当前位置: 首页 > 后端技术 > Python

爬取需要登录的网站

时间:2023-03-25 21:04:51 Python

爬虫在收集网站的过程中,一些数据价值高的网站会限制访问者的访问行为。此时建议通过登录获取目标网站的cookie,然后利用cookie配合代理IP进行数据采集和分析。1使用表单登录是post请求,即先将表单数据发送给服务器,服务器将返回的cookie保存在本地。importrequestsdata={'data1':'XXXXX','data2':'XXXXX'}response=requests.post(url=url,data=data)2使用cookie登录使用cookie登录,服务器会认为你是登录用户,所以它会返回给你一个登录内容。所以需要验证码的情况,可以通过使用带有验证码的cookie登录来解决。importrequestsimportrandomimportrequests.adapters#要访问的目标页面targetUrlList=["https://httpbin.org/ip","https://httpbin.org/headers","https://httpbin.org/user-agent",]#代理服务器(产品官网www.16yun.cn)proxyHost="t.16yun.cn"proxyPort="31111"#代理隧道认证信息proxyUser="用户名"proxyPass="密码"proxyMeta="http://%(user)s:%(pass)s@%(host)s:%(port)s"%{"host":proxyHost,"port":proxyPort,"user":proxyUser,"pass":proxyPass,}#设置http和https访问都使用HTTP代理proxies={"http":proxyMeta,"https":proxyMeta,}#访问网站3次,使用同一个Session(keep-alive),都可以保持同一个外网IPs=requests.session()#设置cookiecookie_dict={"JSESSION":"123456789"}cookies=requests.utils.cookiejar_from_dict(cookie_dict,cookiejar=None,overwrite=True)s.cookies=cookiesforiinrange(3):forurlintargetUrlList:r=s.get(url,proxies=proxies)printr.text如果有验证码,此时使用response=requests_session.post(url=url_login,data=data)是不行的。方法应该如下:response_captcha=requests_session.get(url=url_login,cookies=cookies)response1=requests.get(url_login)#notloggedinresponse2=requests_session.get(url_login)#alreadyloggedin,因为我得到了之前响应Cookie!response3=requests_session.get(url_results)#登录是因为之前拿到了ResponseCookie!