urllib2 下载验证码图片
我正在尝试通过使用“mechanize”也就是urllib2来下载VBB论坛上的验证码图片。验证码的位置在这里(用任何用户名和密码登录后会要求输入验证码):
<img id="imagereg" src="image.php?type=hv&hash=c76c6f3c2e0fc3bf32fd99d36555fa04" alt="" width="201" height="61" border="0" />
我试着获取那张图片,但下载下来的却是一个.php文件。
br.open('http://www.amaderforum.com/image.php?type=hv&hash=c76c6f3c2e0fc3bf32fd99d36555fa04')
我把文件扩展名改成了图片格式,但它并不是验证码图片。有人能帮忙吗?
下面是一些来自请求头的信息:
GET /image.php?type=hv&hash=c76c6f3c2e0fc3bf32fd99d36555fa04 HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: www.amaderforum.com\r\nCookie: bbsessionhash=25e24573ce64dfc95dbb873667f21787; bblastvisit=1312644421; bblastactivity=0\r\nConnection: close\r\nUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17\r\n\r\n' reply: 'HTTP/1.1 200 OK\r\n' header: Date: Sat, 06 Aug 2011 15:30:48 GMT
header: Server: Apache
header: X-Powered-By: PHP/5.2.9
header: Content-transfer-encoding: binary
header: Content-disposition: inline; filename=image.jpg
header: Content-Length: 5745
header: Connection: close
header: Content-Type: image/jpeg
1 个回答
这里有一个简单的脚本,它会打开找回密码的页面,找到验证码,然后把验证码的图片下载到一个叫out.jpg的文件里。
这个脚本需要用到一个叫做 lxml 的库。
希望这对你有帮助!祝好!
import urllib2
import lxml.html
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/2010010' \
'1 Firefox/4.0.1',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language':'en-us,en;q=0.5',
'Accept-Charset':'ISO-8859-1,utf-8;q=0.7,*;q=0.7'}
req = urllib2.Request('http://www.amaderforum.com/login.php?do=lostpw', None,
headers)
f = urllib2.urlopen(req)
page = f.read()
tree = lxml.html.fromstring(page)
imgurl = "http://www.amaderforum.com/" + \
tree.xpath(".//img[@id='imagereg']")[0].get('src')
req = urllib2.Request(imgurl, None, headers)
f = urllib2.urlopen(req)
img = f.read()
open('out.jpg', 'wb').write(img)