反爬策略一共有10种吧:UA,robots,动态加载数据, 图片懒加载, 代理, js加密,js混淆,验证码,动态变化的请求参数,cookie.
模拟登录不成功的话一般三种情况:
1.验证码
2.动态请求参数
3.cookie
针对三种情况,前面已经说了验证码,本篇讲动态请求参数和cookie
动态请求参数:1.page_text为请求到的页面内容
2.用xpath解析出动态的参数
3.把动态参数设为变量放入请求
cookie:1.创建session
2.页面请求
验证码请求
登录后的页面请求
其实就是所有的请求都带有cookie。
上代码供大家参考
from lxml import etree
import requests
"""
动态解析的参数
__VIEWSTATE=tree.xpath('//*[@id='__VIEWSTATE']/@value')[0]
__VIEWSTATEGENERATOR=tree.xpath('//*[@id='__VIEWSTATEGENERATOR']/@value')[0]
session放入每次的请求
sess=requests.Session()
"""
#sessiong 代替requests
sess=requests.Session()
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
login_url='https://***//user/login.aspx?from=http://**/user/collect.aspx'
page_text=sess.get(url=login_url,headers=headers).text##sessiong 代替requests
tree=etree.HTML(page_text)
img_path='https://***'+tree.xpath('//*(@id="imgCode")/@src')[0]
img_data=sess.get(url=img_path,headers=headers).content##sessiong 代替requests
with open('./code.jpg','wb') as fp:
fp.write(img_data)
code_result=transform_code_img('./code.jpg',1004)
print(code_result)
#动态参数
__VIEWSTATE=tree.xpath('//*[@id='__VIEWSTATE']/@value')[0]
__VIEWSTATEGENERATOR=tree.xpath('//*[@id='__VIEWSTATEGENERATOR']/@value')[0]
post_url='https://**'
data={
"__VIEWSTATE":__VIEWSTATE,
"__VIEWSTATEGENERATOR":__VIEWSTATEGENERATOR,
"code":code_result,
"denglu":"登录",
}
#登录以后的验证页面
response=sess.post(url=post_url,headers=headers,data=data)#sessiong 代替requests
page_text=response.text
with open('main.html','w',encoding='utf-8') as fp:
fp.write(page_text)