python爬虫之自动登录与验证码识别

在用爬虫爬取网站数据时,有些站点的一些关键数据的获取需要使用账号登录,这里可以使用requests发送登录请求,并用Session对象来自动处理相关Cookie。

另外在登录时,有些网站有时会要求输入验证码,比较简单的验证码可以直接用pytesser来识别,复杂的验证码可以依据相应的特征自己采集数据训练分类器。

以CSDN网站的登录为例,这里用Python的requests库与pytesser库写了一个登录函数。如果需要输入验证码,函数会首先下载验证码到本地,然后用pytesser识别验证码后登录,对于CSDN登录验证码,pytesser的识别率很高。

其中的pytesser的下载地址为: pytesser下载

具体代码如下:

#coding:utf-8
import sys
import time
import urllib
import shutil
import pytesser
import requests

from lxml import etree

config = {'gid': 1}

def parse(s, html, idx):
 result = {}

 tree = etree.HTML(html)
 try:
  result['lt'] = tree.xpath('//input[@name="lt"]/@value')[0]
  result['execution'] = tree.xpath('//input[@name="execution"]/@value')[0]
  result['path'] = tree.xpath('//form[@id="fm1"]/@action')[0]
 except IndexError, e:
  return None

 valimg = None
 valimgs = tree.xpath('//img[@id="yanzheng"]/@src')
 if len(valimgs) > 0:
  valimg = valimgs[0]

 validateCode = None
 if valimg:
  fname = 'img/' + str(idx) + '_' + str(config['gid']) + '.jpg'
  config['gid'] = config['gid'] + 1
  ri = s.get("https://passport.csdn.net" + valimg)
  with open(fname, 'wb') as f:
   for chk in ri:
    f.write(chk)
   f.close()
  validateCode = pytesser.image_file_to_string(fname)
  validateCode = validateCode.strip()
  validateCode = validateCode.replace(' ', '')
  validateCode = validateCode.replace('\n', '')
  result['validateCode'] = validateCode

 return result

def login(usr, pwd, idx):
 s = requests.Session()

 r = s.get('https://passport.csdn.net/account/login',
 headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0', 'Host': 'passport.csdn.net', })

 while True:
  res = parse(s, r.text, idx)
  if res == None:
   return False
  url = 'https://passport.csdn.net' + res['path']
  form = {'username': usr, 'password':pwd, '_eventId':'submit', 'execution':res['execution'], 'lt':res['lt'],}
  if res.has_key('validateCode'):
   form['validateCode'] = res['validateCode']
  s.headers.update({
   'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0',
   'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4',
   'Content-Type': 'application/x-www-form-urlencoded',
   'Host': 'passport.csdn.net',
   'Origin': 'https://passport.csdn.net',
   'Referer': 'https://passport.csdn.net/account/login',
   'Upgrade-Insecure-Requests': 1,
   })
  r = s.post(url, data=form)

  tree = etree.HTML(r.text)
  err_strs = tree.xpath('//span[@id="error-message"]/text()')
  if len(err_strs) == 0:
   return True
  err_str = err_strs[0]
  print err_str
  err = err_str.encode('utf8')

  validate_code_err = '验证码错误'
  usr_pass_err = '帐户名或登录密码不正确,请重新输入'
  try_later_err = '登录失败连续超过5次,请10分钟后再试'

  if err[:5] == validate_code_err[:5]:
   pass
  elif err[:5] == usr_pass_err[:5]:
   return False
  elif err[:5] == try_later_err[:5]:
   return False
  else:
   return True

if __name__ == '__main__':
 main(sys.argv[1], sys.argv[2], 0)

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

(0)

相关推荐

  • python+selenium实现京东自动登录及秒杀功能

    本文实例为大家分享了selenium+python京东自动登录及秒杀的代码,供大家参考,具体内容如下 运行环境: python 2.7 python安装selenium 安装webdriver(这里是firefox) 其中selenium可以采用pip安装: pip install selenium webdriver下载地址 需要注意的是,webdriver的目录.对应浏览器的目录,都要添加到path. 代码如下: # _*_coding:utf-8_*_ from selenium impo

  • Python自动登录126邮箱的方法

    本文实例讲述了Python自动登录126邮箱的方法.分享给大家供大家参考.具体实现方法如下: import sys, urllib2, urllib,cookielib import re cookie = cookielib.LWPCookieJar() opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) urllib2.install_opener(opener) url='http://entry.mail.12

  • python实现自动登录人人网并访问最近来访者实例

    本文实例讲述了python实现自动登录人人网并访问最近来访者的方法,分享给大家供大家参考. 具体方法如下: ##-*- coding : gbk -*- #在 import os from xml.dom import minidom import re import urllib import urllib2 import cookielib import datetime import time from urllib2 import URLError,HTTPError #登录模块 在网上

  • python验证码识别的实例详解

    其实关于验证码识别涉及很多方面的内容,入手难度大,但是入手后,可拓展性又非常广泛,可玩性极强,成就感也很足,对这感兴趣的朋友们下面跟着小编一起来学习学习吧. 依赖 sudo apt-get install python-imaging sudo apt-get install tesseract-ocr pip install pytesseract 利用google ocr来识别验证码 from PIL import Image import pytesseract image = Image

  • Python使用selenium实现网页用户名 密码 验证码自动登录功能

    好久没有学python了,反正各种理由吧(懒惰总会有千千万万的理由),最近网上学习了一下selenium,实现了一个简单的自动登录网页,具体如下. 1.安装selenium: 如果你已经安装好anaconda3,直接在windows的dos窗口输入命令安装selenium: python -m pip install --upgrade pip 查看版本pip show selenium 2.接着去http://chromedriver.storage.googleapis.com/index.

  • python下调用pytesseract识别某网站验证码的实现方法

    一.pytesseract介绍 1.pytesseract说明 pytesseract最新版本0.1.6,网址:https://pypi.python.org/pypi/pytesseract Python-tesseract is a wrapper for google's Tesseract-OCR ( http://code.google.com/p/tesseract-ocr/ ). It is also useful as a stand-alone invocation scrip

  • Python验证码识别处理实例

    一.准备工作与代码实例 (1)安装PIL:下载后是一个exe,直接双击安装,它会自动安装到C:\Python27\Lib\site-packages中去, (2)pytesser:下载解压后直接放C:\Python27\Lib\site-packages(根据你安装的Python路径而不同),同时,新建一个pytheeer.pth,内容就写pytesser,注意这里的内容一定要和pytesser这个文件夹同名,意思就是pytesser文件夹,pytesser.pth,及内容都要一样! (3)Te

  • python实现二维码扫码自动登录淘宝

    一个小项目自动登录淘宝联盟抓取数据,由于之前在Github上看过类似用Python写的代码因此选择用Python来写,第一次用Python正式写程序还是被其"简单"所震撼,当然用的时候还是对其(2.7版)编码.迁移环境等问题所困扰,还好后来都解决了. 言归正传,抓取淘宝联盟的数据首先要解决的就是登录的问题,之前一般会碰到验证码的困扰,现在支持二维码扫码登录反而简单了,以下是登录的Python代码,主要是获取二维码打印,然后不断的检查扫码状态,如果过期了重新请求二维码(主要看逻辑,由于有

  • 使用python实现baidu hi自动登录的代码

    复制代码 代码如下: # _*_ coding:utf-8 _*_# name login_baidu.pyimport urllib,urllib2,httplib,cookielibdef auto_login_hi(url,name,pwd):    url_hi="http://passport.baidu.com/?login"    #设置cookie    cookie=cookielib.CookieJar()    cj=urllib2.HTTPCookieProce

  • python爬虫之自动登录与验证码识别

    在用爬虫爬取网站数据时,有些站点的一些关键数据的获取需要使用账号登录,这里可以使用requests发送登录请求,并用Session对象来自动处理相关Cookie. 另外在登录时,有些网站有时会要求输入验证码,比较简单的验证码可以直接用pytesser来识别,复杂的验证码可以依据相应的特征自己采集数据训练分类器. 以CSDN网站的登录为例,这里用Python的requests库与pytesser库写了一个登录函数.如果需要输入验证码,函数会首先下载验证码到本地,然后用pytesser识别验证码后登

  • Python爬虫实现自动登录、签到功能的代码

    更新 2016/8/9:最近发现目标网站已经屏蔽了这个登录签到的接口(PS:不过我还是用这个方式赚到了将近一万点积分·····) 前几天女朋友跟我说,她在一个素材网站上下载东西,积分总是不够用,积分是怎么来的呢,是每天登录网站签到获得的,当然也能购买,她不想去买,因为偶尔才会用一次,但是每到用的时候就发现积分不够,又记不得每天去签到,所以就有了这个纠结的事情.怎么办呢,想办法呗,于是我就用python写了个小爬虫,每天去自动帮她签到挣积分.废话不多说,下面就讲讲代码. 我这里用的是python3

  • python爬虫_自动获取seebug的poc实例

    简单的写了一个爬取www.seebug.org上poc的小玩意儿~ 首先我们进行一定的抓包分析 我们遇到的第一个问题就是seebug需要登录才能进行下载,这个很好处理,只需要抓取返回值200的页面,将我们的headers信息复制下来就行了 (这里我就不放上我的headers信息了,不过headers里需要修改和注意的内容会在下文讲清楚) headers = { 'Host':******, 'Connection':'close', 'Accept':******, 'User-Agent':*

  • python爬虫使用cookie登录详解

    前言: 什么是cookie? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的.那么我们可以利用Urllib库保存我们登录的Cookie,然后再抓取其他页面,这样就达到了我们的目的. 一.Urllib库简介 Urllib是python内置的HTTP请求库,官方地址:https://docs.python.org/3/library/urllib.ht

  • python实现校园网自动登录的示例讲解

    因为最近想用树莓派搞个远程监控系统,又因为学校的网需要从网页登录而树莓派又不方便搞个显示器带着,所以寻思着搞个能够自动登录校园网的脚本程序,省去了每次都要打开浏览器输入账号密码的烦恼. 1.工具 火狐浏览器+firedebug插件,debug插件可才浏览器中附加组件中添加,其他浏览器也可以只要可以监控浏览器的网络行为即可. python+requests包 2.步骤 1)  先打开到登录界面,然后在按f12打开firedebug插件,此时debug无任何记录行为,然后点击刷新按钮,再点击登录按钮

  • python爬虫-模拟微博登录功能

    微博模拟登录 这是本次爬取的网址:https://weibo.com/ 一.请求分析 找到登录的位置,填写用户名密码进行登录操作 看看这次请求响应的数据是什么 这是响应得到的数据,保存下来 exectime: 8 nonce: "HW9VSX" pcid: "gz-4ede4c6269a09f5b7a6490f790b4aa944eec" pubkey: "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D24

  • Python爬虫使用脚本登录Github并查看信息

    前言分析目标网站的登录方式 目标地址: https://github.com/login 登录方式做出分析: 第一,用form表单方式提交信息, 第二,有csrf_token, 第三 ,是以post请求发送用户名和密码时,需要第一次get请求的cookie 第四,登录成功以后,请求其他页面是只需要带第一次登录成功以后返回的cookie就可以. 以get发送的请求获取我们想要的token和cookie 代码: import requests from bs4 import BeautifulSou

  • Python爬虫之自动爬取某车之家各车销售数据

    一.目标网页分析 目标网站是某车之家关于品牌汽车车型的口碑模块相关数据,比如我们演示的案例奥迪Q5L的口碑页面如下: https://k.autohome.com.cn/4851/#pvareaid=3311678 为了演示方式,大家可以直接打开上面这个网址,然后拖到全部口碑位置,找到我们本次采集需要的字段如下图所示: 采集字段 我们进行翻页发现,浏览器网址发生了变化,大家可以对下如下几页的网址找出规律: https://k.autohome.com.cn/4851/index_2.html#d

  • Python脚本实现自动登录校园网

    Python自动化脚本登录校园网 所需工具:python编译环境(博主使用的pycharm作演示,其实在cmd也可以操作!) selenium自动化脚本 .bat批处理文件 第一步,通过pycharm创建一个项目 点击左上角file,然后new project 2.创建项目 3.然后右键项目名创建py文件 4.在pycharm中调用cmd,(在左下角的terminal就是了),再通过cd命令进入到Scripts文件下,Scripts是自己的python编译器文件夹下的目录 5.下载seleniu

  • Python实现新版正方系统滑动验证码识别

    目录 步骤一:点击数据分析 步骤二:滑动验证码图像分析,计算滑动距离x值 步骤三:生成提交参数 Python实现新版正方系统滑动验证码识别算法和方案 步骤一:点击数据分析 点击滑动按钮,将发送一个请求到 /zfcaptchaLogin 请求内容 "type": "verify" "rtk": "6cfab177-afb2-434e-bacf-06840c12e7af" "time": "16246

随机推荐