Python Scrapy 验证码登录处理
2023-09-11 14:17:09 时间
一、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 scrapy
from scrapy.http import Request,FormRequest
import urllib.request
class 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脚本扫描给定网段的MAC地址表(scapy或 python-nmap)
- Python多线程_thread和Threading
- Python中zipfile压缩文件模块的使用
- python执行脚本加参数_命令行运行Python脚本时传入参数的三种方式详解以及argparse子命令subparsers()方法
- Python任意参数的数量/预习课python基础
- Python 的构建工具 setup.py
- 地球引擎初级教程——Python API 语法(内涵JavaScript转python工具包介绍)
- 中途转行python?怎么学?没有基础的我30了自学Python转行靠谱吗?
- 【Python】自动化抢勾,python软件安装教程
- 学python能做什么兼职-初学Python到月入过万最快的兼职途径(纯干货)
- 详解Python列表(list)的方法sort()的第一个参数key【简单清晰明了的讲解】
- 带大家用40行python代码实现一个疫情地图
- python scrapy爬虫框架
- Python视频制作 MoviePy框架视频vfx视频效果示例
- Python新闻网站项目-2.Scrapy爬虫的配置和数据抓取
- 使用 Python 和 AI 将自己卡通化VToonify(教程含源码)
- Python 数据分析教程之如何验证线性回归的假设,线性回归的假设是什么?以及如何用python验证它们?
- Python 网络安全之使用 Python-scapy PSDetect.py 的端口扫描检测器
- (数据科学学习手札54)Python中retry的简单用法
- (数据科学学习手札05)Python与R数据读入存出方式的总结与比较
- openAI的仿真环境Gym Retro的Python API接口
- 【Python基础】我的第一个 python 程序
- Python删除列表中的空格
- 【python百度智能云】:Python — 三种获取__VIEWSTATE、__VIEWSTATEGENERATOR、__EVENTVALIDATION方法。
- 【Python】中文编解码操作
- Python 渐进式jpeg转换 可用于登录界面的背景图的 延迟加载 先模糊后清晰
- Apache同时支持PHP和Python的配置方法