有些网站需要登录才能访问,所以爬虫需要获取登录cookie,然后通过爬虫代理使用cookie进行数据采集。本例按照上述流程实现如下:1模拟表单登录在post请求中向服务器发送表单数据,爬虫会存储返回的cookie。importrequestsdata={'data1':'XXXXX','data2':'XXXXX'}response=requests.post(url=url,data=data)2提取cookie并登录。读取存储的cookie并登录。服务器会认为爬虫请求的是登录用户,所以会返回登录内容。注意需要验证码的情况可以通过使用带验证码的cookie登录来解决。#!-*-encoding:utf-8-*-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,}#访问网站三次,使用同一个Session(keep-alive),两者可以保持同一个外网IPs=requests.session()#setcookiecookie_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)#没有登录response2=requests_session.get(url_login)#登录是因为我拿到了ResponseCookie前!response3=requests_session.get(url_results)#登录是因为之前拿到了ResponseCookie!