python-爬虫(8)-模拟登录

      反爬策略一共有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)


 

你可能感兴趣的:(python)