Scrapy 模拟登陆
1. 重写 爬虫中的start_requests 方法,直接携带cookies 进行登录
注意的是在scrapy 中,cookies 不能放在headers 中,而需要把cookies作为一个独立的参数。因为在scrapy配置文件中单单独定义了一个cookies配置,读取cookies
会直接从该配中进行cookies的获取。
import scrapy class RenrenSpider(scrapy.Spider): name = 'renren' # allowed_domains = ['renren.com'] start_urls = ['http://www.renren.com/467372239/profile'] #重写start_requests,携带cookie登录 def start_requests(self): # 直接携带登录后的cookies,用程序进行模拟登陆,此cookies 是手动从登录后的用户页面获取的cookies值。 cookies = "anonymid=jt79zqv32wojoo; _r01_=1; ln_uact=1970664163@qq.com; ln_hurl=http://hdn.xnimg.cn/photos/hdn521/20120626/2140/h_main_0eaI_4eba0000010a1375.jpg; jebe_key=f32e6ca1-2cf0-4c86-9704-f044e43596c6%7C6c2f984601684a4271fb8c935cca39fb%7C1552485889426%7C1%7C1552485886593; _de=3C53B1DB040C239CEA46451CE0EBFBB16DEBB8C2103DE356; depovince=GUZ; jebecookies=383e5b17-6a15-4f29-87e4-8bc34d3f7d5c|||||; JSESSIONID=abcFlwgP7q7zDbiPlx4Mw; ick_login=b8ee1ebc-9b38-4b55-85e2-278bdc40f14a; p=c4d2de67ce9245d603bc0ee23389a23f9; first_login_flag=1; t=1130c7f349026f1788028140af80c58d9; societyguester=1130c7f349026f1788028140af80c58d9; id=467372239; xnsid=479ffbb4; ver=7.0; loginfrom=null; wp_fold=0; jebe_key=f32e6ca1-2cf0-4c86-9704-f044e43596c6%7C6c2f984601684a4271fb8c935cca39fb%7C1552485889426%7C1%7C1553576509085" # 使用字典推导式进行 转化成字典形式的cookies cookies = {i.split('=')[0]:i.split('=')[1] for i in cookies.split(';')} yield scrapy.Request( self.start_urls[0] , dont_filter=True, cookies=cookies ) def parse(self, response): import re print(re.findall('邓纪云',response.body.decode())) # 找是否含有该名字信息,如果有的话就说明模拟登陆成功!
在配置文件中注册:可以观察 cookies 在scrapy 发送请求的传递过程。
COOKIES_DEBUG=True
2. scrapy 模拟登陆之发送post的请求
案例:登录GitHub
3. scrapy 通过scrapy.Form_request.from_response() 方法进行模拟登陆。
前提是 form表单中有action地址。登录页面中: