一、Form表单分析

  以豆瓣登录页面为例分析,豆瓣登录页是:https://accounts.douban.com/login,浏览器打开之后查看源码,查找登录的form表单HTML结构。如下:

  包括了form_email、form_password、captcha-solution四个表单参数,需要注意之处是name,而不是id。

二、验证码图片处理

  1、分析验证码参数图片的构建如下图,获取id为captcha_image的src图片即可。可以采用人工输入,或第三方图片验证码识别API获得。

  2、点击该url,图片是:

 获取url之后,使用urllib.request.urlretrieve(url,filename="d:/captcha.jpg")下载图片

  3、接下来通过python脚本获取该图片,保存在本地,在python命令行中采用input()方式,人工识别后输入该验证码:captcha_value = credit。

三、登录参数构建

  通过预先注册的用户名、密码,获得验证码,构建表单参数如下:

data={    "form_email":"XXXXX",    "form_password":"******",    "captcha-solution":captcha_value,}

四、Session参数存储

1、cookiejar学习:http://cuiqingcai.com/968.html

2、在request参数中指定cookiejar,如下:

首次访问目标网站:

构建登录参数后,开始登录。

五、登录后数据爬取

  通过formdata认证通过后,在回调函数crawlerdata中处理爬取的网页,通过response对象进行数据解析。

六、主要代码

import scrapyfrom scrapy.http import Request,FormRequestimport urllib.requestclass DoubanSpider(scrapy.Spider):    name = "Douban"    allowed_domains = ["douban.com"]

    UserAgent = {"User-Agent:":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2050.400 QQBrowser/9.5.10169.400"}

    def start_requests(self):        return [Request("https://accounts.douban.com/login",callback=self.Login,meta={"cookiejar":1})]

    def Login(self, response):        captcha = response.xpath("//img[@id='captcha_image']/@src").extract()        url = "https://accounts.douban.com/login"        print("正在保存验证码图片")        captchapicfile = "F:/20_Python/2000_PythonData/SelfStudy/douban/douban/captcha.png"        urllib.request.urlretrieve(captcha[0],filename = captchapicfile)        print("打开图片文件,查看验证码,输入单词......")        captcha_value = input()

        data = {            "form_email":"XXXX",            "form_password":"XXXX",            "captcha-solution":captcha_value,        }        print("正在登陆中……")        return [FormRequest.from_response(response,                                              meta={"cookiejar":response.meta["cookiejar"]},                                              headers = self.UserAgent,                                              formdata = data,                                              callback=self.crawlerdata,                                              )]

    def crawlerdata(self,response):        print("完成登录.........")        title = response.xpath("/html/head/title/text()").extract()        content2 = response.xpath("//meta[@name='description']/@content").extract()        print(title[0])        print(content2[0])

Python Scrapy 验证码登录处理相关推荐

  1. python绕过验证码登录_python接口自动化(十三)--cookie绕过验证码登录(详解)...

    简介 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接).获取不到也没关系,可以通过添加cookie的方式绕过验证码.(注意:并不是所有的 ...

  2. 使用python解决验证码登录并爬取登录后的个人界面:本篇以古诗文网站为例

    爬取总结记录:由于经验不足,个人尝试了很多方法,都失败了,查看了网站的上面别人的爬取经验,按照别人做的,但都没有成功. 几经波折最后终于解决了. 好了上代码: 其中有涉及到个人信息的,这里进行了模糊处 ...

  3. python+requests 验证码登录

    描述:登录界面存在验证码,需要通过验证码的输入来实现登录.对于验证码的处理,我们可以通过session的方式,来保证访问的多个请求,在一个事务里面, 1.先创建一个session req = requ ...

  4. scrapy mysql 模拟登录知乎_详细的Python Scrapy模拟登录知乎

    之前爬取携程和51job都是免登陆就能爬取数据的,但是今天爬取知乎的时候就需要登录后才能爬到数据,那我们只能进行模拟登录了. 知乎登录分为邮箱登录和手机登录两种方式,通过浏览器的开发者工具查看,我们通 ...

  5. python编写一个登陆验证程序_python项目实战:实现验证码登录网址实例

    前言 相信大家都明白,大多数的网站为了不被恶意访问,往往需要设置验证码登录,避免机器人访问,而造成我服务器瘫痪,崩溃,这里用到Python3,主要用到的包是re urllib.request http ...

  6. python全系列之爬虫scrapy_python爬虫scrapy之登录知乎

    下面我们看看用scrapy模拟登录的基本写法: 注意:我们经常调试代码的时候基本都用chrome浏览器,但是我就因为用了谷歌浏览器(它总是登录的时候不提示我用验证码,误导我以为登录时不需要验证码,其实 ...

  7. Python - WebDriver 识别登录验证码

    Python - WebDriver 识别登录验证码 没什么可说的直接上代码! #-*-coding:utf-8-*- # Time:2017/9/29 7:16 # Author:YangYangJ ...

  8. python用selenium 验证码图片_Python +Selenium解决图片验证码登录或注册问题(推荐)

    1. 解决思路 首先要获得这张验证码的图片,但是该图片一般都是用的js写的,不能够通过url进行下载. 解决方案:截图然后根据该图片的定位和长高,使用工具进行裁剪 裁剪完毕之后,使用工具解析该图片. ...

  9. 巧用10行python 代码让JMETER实现动态验证码登录

    一.第三方工具准备 1.准备python 环境 2.使用:使用第三方库Python免费验证码识别之ddddocr识别OCR自动库实现 3.安装方法:镜像:pip install ddddocr -i ...

最新文章

  1. 腾讯员工晒出薪资:真实985毕业薪资,大家看我还有救吗?网友:日薪?
  2. 分布式并行计算MapReduce
  3. 树莓派设置音频输出音量
  4. python sanic orm_Sanic + 前端MVVM 一种新一代Python高性能全栈开发实践
  5. SQL获取上个月的第一天最后一天datetime
  6. PHP生成UTF-8编码的CSV文件用Excel打开乱码的解决办法
  7. vlan tag是做什么用的?
  8. 使用smartping监控服务器的网络可用性
  9. Python 基于 uiautomator2 实现《全民开喵铺》自动收币,自动签到,自动浏览得喵币
  10. android第三方拨号盘,Android开发-教你如何使用拨号盘
  11. thinkadmin 单页面多个富文本初始化
  12. 驱动学习(九)字符设备的非阻塞操作
  13. 区块链 - 展望2022年元宇宙会呈现哪些趋势?
  14. 有个码龄5年的程序员跟我说:“他连wifi从来不用密码”
  15. 如果只有十万,你会选择买房还是买车?
  16. 他居然发邮件请我去吃饭——邮件伪造那些事儿
  17. stm32f429+超声波传感器HC-SR04 -- 测距
  18. 蓝牙AOA室内定位:高精度室内定位的“C”位
  19. “undefined reference to“ 问题汇总及解决方法
  20. 蓝桥杯2013Java组省赛(世界末日)

热门文章

  1. limit_choices_to a value on a field in the same model - Google Groups
  2. 《一个操作系统的实现》读书笔记连载ing……
  3. 【Vegas原创】outlook连接exchange需要密码的解决方法
  4. html景图片怎么设置百分比,8个风光照片拍摄技巧
  5. 学籍管理系统 c语言流程图,程序设计基础 ——C语言第10章 综合应用案例——学生学籍管理系统...
  6. jquery 添加 padding_【开发小技巧】11—如何使用JavaScript / jQuery为网站创夜间/高亮模式?...
  7. 新时代的网络工程师需要掌握哪些技能
  8. 用C语言实现 静态通讯录+动态通讯录+文件实现“退出保存信息版本”(附上思路+项目展示+源代码)
  9. poj3565(最大权完美匹配)
  10. 关于学习Python的一点学习总结(22->相关的迭代操作)