Python网络蜘蛛:如何解决验证码?

时间:2016-05-12 14:59:43

标签: python web-scraping scrapy-spider

验证码是随机生成的。我得到验证码的链接并下载它。之后,我使用这个也正确设置的验证码和标题抓取网站。但是,错误显示验证码错误!我不知道如何解决这个问题。看来,当我拿到一个验证码时,它就会改变。有人能帮我吗?任何帮助将不胜感激。

我的剧本

#coding=utf-8
import urllib
import urllib.request as urllib2
import sys
import http.cookiejar as cookielib
import time
import os
time=time.time()
cookiejar=cookielib.CookieJar()
urlopener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
urllib2.install_opener(urlopener)

urlopener.addheaders.append(('Referer', 'http://www.jsgsj.gov.cn:58888/mini/netweb/SMLibrary.jsp'))
urlopener.addheaders.append(('Accept-Language', 'zh-CN'))
urlopener.addheaders.append(('Host', 'www.jsgsj.gov.cn:58888'))
urlopener.addheaders.append(('User-Agent', 'Mozilla/5.0 (compatible; MISE 9.0; Windows NT 6.1); Trident/5.0'))
urlopener.addheaders.append(('Connection', 'Keep-Alive'))

imgurl='http://www.jsgsj.gov.cn:58888/mini/netWebServlet.json?randImg=true&tmp='+str(time)
outfile=open(r'code.jpg', 'wb')
response=urllib2.Request(imgurl)
html=urlopener.open(response)
outfile.write(html.read())
outfile.close() 
authcode=raw_input('enter the code:')
url_company='http://www.jsgsj.gov.cn:58888/mini/netWebServlet.json?codeCheck=true'
data={'corpName':'苏州','yzm':authcode}
html=urlopener.open(urllib2.Request(url_company,urllib.urlencode(data)))
page=(html.read())
print ("html:",yzm, page)

1 个答案:

答案 0 :(得分:0)

你应该考虑创建一个会话对象。

当你发布你的authcode时,会话已经改变了,而且章节也发生了变化。 我建议使用请求模块执行此操作(创建会话对象)

Python Requests