python爬虫解决验证码的思路及示例

  

如果直接从生成验证码的页面把验证码下载到本地后识别,再构造表单数据发送的话,会有一个验证码同步的问题,即请求了两次验证码,而识别出来的验证码并不是实际需要发送的验证码。有如下几种方法解决。

  

<>强法1:

  

用会话:         mysession=requests.Session ()   login_url=' http://xxx.com '   checkcode_url=' http://yyy.com '   html=mysession.get (login_url超时=60 * 4)   # .... balabala解析操作....   checkcode=mysession.get (checkcode_url超时=60 * 4)   张开(“checkcode.png”,“世界银行”)f:   f.write (checkcode.content)      #接下来balabala对图像操作,可以用python的相关库(识别率低,教务网的验证码都够呛),也可以用云速等第三方验证码识别网站提供的有偿服务(识别度较高)      #再接下来构造表单数据balabala      

<>强法2:

  

用饼干:

        #绑定饼干   checkcode_url=' http://yyy.com '   饼干=cookielib.CookieJar ()   处理程序=urllib2.HTTPCookieProcessor(饼干)   刀=urllib2.build_opener(处理器)      #先读取验证码的url   照片=opener.open (checkcode_url) .read ()      # balabala图像处理      #生成帖子数据   data=https://www.yisu.com/zixun/urllib.urlencode (postData)   #构造请求请求=urllib2请求。请求(PostUrl、数据头)   #利用之前存有饼干的揭幕战登录页面   试一试:   响应=opener.open(请求)   结果=response.read ()   urllib2除外。HTTPError e:   打印e.code      

<>强法3:

  

硒+手动构造饼干:该方法无需识别验证码,本人尚未尝试。

  

webdriver操作饼的方法有:

  
      <李> get_cookies()获得所有饼干信息李   <李> get_cookie(名字)返回特定的名字有饼干信息李   <李> add_cookie (cookie_dict)添加饼干,必须有名称和值值   <李> delete_cookie(名字)删除特定(部分)的饼干信息李   <李> delete_all_cookies()删除所有饼干信息李   
        …   #第一次访问xxx网站   driver.get (“http://xxx.com”)   #将用户名密码写入浏览器饼干   driver.add_cookie({“名称”:“用户名”,“价值”:“用户名”})   driver.add_cookie({“名称”:“密码”,“价值”:“密码”})   #再次访问xxx网站,将会自动登录   driver.get (“http://xxx.com”)   time . sleep (5)   …   driver.quit ()      

这种方法难点在于确定该网站是用饼干中的什么键值来表示”用户名”和“密码”的。而且好像有些饼干是加密过的。可以先用get_cookies()进行观察。
  

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
  

python爬虫解决验证码的思路及示例