网页抓取问题(有一定难度),顶者有分

syspring 2004-12-02 11:00:37
这是一个网页抓取问题;

我从a.asp到b.asp用action,在b.asp里有抓取c.asp网页的代码,但是c.asp里有图片验证码,如果不输入验证码,那么取不出数据,如何才能取出图片验证码,然后再进行抓取网页呢。
...全文
460 点赞 收藏 45
写回复
45 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lingyun2111 2004-12-03
学习一下
回复
breezejfd 2004-12-03
终于看明白问题了
帮顶,顺便学习
回复
xx123731 2004-12-03
这方面还不懂 ,学习中。。。
回复
ayun00 2004-12-03
后期的验证码普遍加了噪点干扰,而且设置了不同的字体,且进行了一定角度的旋转
每次都是动态生成图片

这个验证码是怎么做的?
回复
syspring 2004-12-03
up
回复
prcgolf 2004-12-03
UP
回复
chunling2 2004-12-03
学习中,,努力中
回复
axiang80 2004-12-03
up!!
回复
lonelydreamsym 2004-12-02
得先进行数字识别呀,另个进行干扰了,很难实现的
回复
syspring 2004-12-02
就是http://202.108.250.203/inquire/price.php网址

我想自已通过程序给它一个关键词,然后就可以查询了。但不能用action直接到这个网址的方法。
回复
椅子 2004-12-02
模拟post的原理是winsock连接要接收post的网页,将你构造的post数据send过去就可以了。
如果不直到post数据格式,可用抓数据包的软件截获。
下面代码在vb6运行通过,只是构造post数据包的两个function,测试代码可能有误。
Private Function buildHTTPHEAD()
Dim s As String
s = "HEAD http://localhost/ HTTP/1.1" & vbCrLf
s = s & "Host: localhost" & vbCrLf
s = s & "Accept: */*" & vbCrLf
s = s & "User-Agent: Commodore C64" & vbCrLf
s = s & "Connection: close" & vbCrLf
buildHTTPHEAD = s & vbCrLf
End Function


Private Function buildHTTPPOST()
Dim s As String
Datapage = Datapage & "-----------------------------7d12dc371306a8" & vbCrLf
Datapage = Datapage & "Content-Disposition: form-data; name=""word""" & vbCrLf
Datapage = Datapage & "" & vbCrLf
Datapage = Datapage & "Content-Type: application/x-www-form-urlencoded" & vbCrLf & vbCrLf
Datapage = Datapage & "椅子" & vbCrLf

s = "POST http://www.baidu.com/baidu HTTP/1.1" & vbCrLf
s = s & "Accept: */*" & vbCrLf
s = s & "Content-Type: application/x-www-form-urlencoded; boundary=---------------------------7d12dc371306a8" & vbCrLf
s = s & "Host: www.baidu.com/" & vbCrLf
s = s & "User-Agent: Commodore C64" & vbCrLf
s = s & "Connection: Keep-Alive" & vbCrLf
s = s & "Content-Length: " & Len(Datapage) & vbCrLf
s = s & "Cache-Control: no-cache" & vbCrLf & vbCrLf

buildHTTPPOST = s & Datapage & vbCrLf
End Function
回复
dachangtui 2004-12-02
楼上说得有理
回复
阿泰 2004-12-02
简单的图片识别虽然是可行的,比如说在VB中可以得到像素点的颜色值
然后根据文字特征就可以判定数字和字母

特别是早期的验证嘛只有4位数字,还是能识别出来的
如楼上 yizia(椅子)提供的代码,因为这个数字图片都是固定的
并没有严格意义上验证码

后期的验证码普遍加了噪点干扰,而且设置了不同的字体,且进行了一定角度的旋转
每次都是动态生成图片
应该说软件几乎是无法短时间内破解出来的

楼主不如提供出地址来,让大家去抓抓看好了,省得说着还费劲 :)
回复
syspring 2004-12-02
楼上的,我就是想问:怎样模拟啊?请详示:
回复
椅子 2004-12-02
还有,关键是那个网址好像测试来路网址,如果它判断出来路网站是:
1:空
2:直接输入
3:通过收藏
产生这几种情况的可能原因是:在b.asp里用了response.redirect或window.open或window.location
那么它就不接收我的任何数据,怎样才能过这道屏障呢。


可用程序模拟post突破referrer验证
回复
椅子 2004-12-02
通过上面我们可以发现,很容易就可以从网页的图片代码中获取到图片所显示的数字。

第一步:把网页的图片另存到本地,用记事本打开看看,对照图片所显示的数字
重复第一步直到所有数字的源码都掌握了
第二步:再说就没有意义了,无数个办法
回复
bananafox 2004-12-02
关注
回复
椅子 2004-12-02
我的想法就是,对该页面进行访问时就会产生一个随机码,这个随机码由程序生成图片,同时将随机码存入Session当中,但是如何在客户端获取这个Session值,我就不知道了。。。呵呵,我搬张登子来坐着,看大家有何高招!

错误的,如果能得到session还用暴力穷举吗?
以xbm验证为例:
a(0,1) = "0x3c" '数字0
a(0,2) = "0x66"
a(0,3) = "0xc3"
a(0,4) = "0xc3"
a(0,5) = "0xc3"
a(0,6) = "0xc3"
a(0,7) = "0xc3"
a(0,8) = "0xc3"
a(0,9) = "0x66"
a(0,10)= "0x3c"

a(1,1) = "0x18" '数字1
a(1,2) = "0x1c"
a(1,3) = "0x18"
a(1,4) = "0x18"
a(1,5) = "0x18"
a(1,6) = "0x18"
a(1,7) = "0x18"
a(1,8) = "0x18"
a(1,9) = "0x18"
a(1,10)= "0x7e"

上面两个代码分别是图形0和1的代码,下面这个代码则是网页中生成的图片代码
#define counter_width 16
#define counter_height 10
static unsigned char counter_bits[]={
0x3c,0x18,0x66,0x1c,0xc3,0x18,0xc3,0x18,0xc3,0x18,0xc3,0x18,0xc3,0x18,0xc3,0x18,0x66,0x18,0x3c,0x7e};
回复
dj0628 2004-12-02
数字识别还是有一定难度的……
回复
hedongyang 2004-12-02
之前网上流传的广东互联星空登录的破解就是带有了图片验证登录的,那是VB做工的,不断提交,每次自动输进去的验证码与图片一模一样。。不知道怎么弄出来的。


http://community.csdn.net/Expert/topic/3596/3596997.xml?temp=.5176508

这里有篇帖子也是在讨论相关的问题。。。
回复
加载更多回复
相关推荐
发帖
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
帖子事件
创建了帖子
2004-12-02 11:00
社区公告
暂无公告