02-17 模拟登陆+多种反爬

1、验证码识别:(为了模拟登陆)

相关的线上识别平台:打码兔,云打码,

超级鹰(主要使用):http://www.chaojiying.com/about.html
	1.注册,登陆(用户中心的身份认证)
	2、识别收费、
	3、登陆后创建一个软件
		①点击软件ID-> 生成一个软件ID
		②下载实例代码: 点击开发文档-选择python-下载文档
		 文档和爬虫项目放同目录
	4、价格体系-有验证码类型,英文数字,中文汉字(如1902)

二、对古诗文网中的验证码图片进行识别:

重点:
	对古诗文网站模拟登陆

设计到的反爬:

-验证码
-动态请求参数:每次请求对应的请求参数都是动态变化的
    -解决办法:动态捕获,通常情况下动态请求的参数都会被
    			隐藏在前台页面的原码中
-cookie
    -解决办法:
        -1,headers中添加cookie
        -2使用session发送请求 :重点要弄清楚是cookie室友哪个url产生的
        -本例中,cookie实在验证码图片对应url请求你时产生的

代码:

import requests
from lxml import etree

#使用session捕获cookie ,zhel
s=requests.Session()
first_url='https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
s.get(first_url,headers=headers)

url='https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
    
}

page_text=requests.get(url,headers=headers).text
tree=etree.HTML(page_text)
url10000=tree.xpath('//*[@id="imgCode"]/@src')[0] 
#注意,url10000对应的地址是不完整的,缺少域名,域名的查找:点击图片-复制图片地址
#xpath返回的都是列表,所以哪怕只有一个元素,也需要切片索引
img_src='https://so.gushiwen.cn'+tree.xpath('//*[@id="imgCode"]/@src')[0]

img_code_data=s.get(img_src,headers=headers).content
with open('./yanzhengma.jpg','wb') as fp:
    fp.write(img_code_data)

继续解析动态变化的参数?动态捕获动态的请求参****


__VIEWSTATE=tree.xpath('//*[@id="__VIEWSTATE"]/@value')[0]
__VIEWSTATEGENERATOR=tree.xpath('//*[@id="__VIEWSTATEGENERATOR"]/@value')[0]

上边代码是下载验证码图片,下载后需要超级英鹰识别该图片,并将其中的字母或数字返回**

img_text=getCodeImgText('./yanzhengma.jpg',1004) #验证码图片路径和验证码类型
print(img_text)

*接下来就是利用识别代码进行模拟登陆 为什么需要模拟登陆?因为有些数据是经过登陆后才会显示出来的

#重点是寻找 点击登陆按钮 发送请求对应得数据包 因为需要输入
密码和用户名,以及验证码,所以至少有三个参数的url 寻找url时
一定要找点击同时刻产生的数据包
# 点击登陆按钮后发起请求的url:通过抓包工具获得
load_url='https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'
form_data={
    '__VIEWSTATE':__VIEWSTATE,
    '__VIEWSTATEGENERATOR': __VIEWSTATEGENERATOR,
    'from': 'http://so.gushiwen.cn/user/collect.aspx',
    'email': '18781954274',
    'pwd': 'lwx@930911',
    'code': img_text # 这里需要用到之前提取解析到的验证码内容,
    'denglu': '登录',
}
main_page=s.post(load_url,headers=headers,data=form_data).text
with open('main.html','w',encoding='utf-8') as fp:
    fp.write(main_html)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值