Scrapy框架的学习(10.Scrapy中的模拟登陆(使用cookie模拟登陆))

1. 为什么需要模拟登陆?

     获取cookie,能够爬取登陆后的页面的数据

2.使用cookie模拟登陆的场景

   (1) cookie过期时间很长,常见于一些不规范的网站

    (2) 能在cookie过期之前把搜有的数据拿到

    (3) 配合其他程序使用,比如其使用selenium把登陆之后的cookie获取到,然后保存到本地,

         scrapy发送请求之前先读取本地cookie

3. 在一个scrapy的项目创建好之后,爬虫的py文件里面的start_urls = [] 里面的url地址是谁来请求的?

     可以点击进入到Spider类中的源码中,发现start_urls 列表中的url是由里面的start_resquests()方法执行的,方法里面又        调用了 make_requests_from_url()  

     

4. .重写父类中start_requests()方

    设置cookies,把cookies的字符串形式转化为字典的形式

   在yield scrapy.Request()中设置cookies参数

   默认在settings里面已经开启了cookiess,下次请求时会带上,上次请求的cookies

    在settings里面设置 COOKIES_DEBUG = True 可以看见cookies在不同的请求里面传递的过程是怎样的

     前提是不设置 LOG_LEVEL

5.  利用cookie模拟登陆人人网

    首先登陆进去人人网,把登陆进入之后的对应的cookie复制出来

     然后在项目的爬虫文件中,进行逻辑代码的编写

# -*- coding: utf-8 -*-
import scrapy
import re


class RenrenSpider(scrapy.Spider):
    name = 'renren'
    allowed_domains = ['renren.com']
    start_urls = ['登陆人人网之后的网址']

    '''重写父类的start_requests方法'''

    def start_requests(self):
        cookies = "自己登陆人人网之后的=cookie"
        '''转化为字典的形式'''
        cookies = {i.split("=")[0]: i.split("=")[1] for i in cookies.split("; ")}
        yield scrapy.Request(
            self.start_urls[0],
            callback=self.parse,
            cookies=cookies   #  设置cookie参数
        )

    def parse(self, response):
        '''我们之匹配到和自己用户名一样的字符串,如果匹配到则说明已经匹配到的登录之后的数据,模拟登陆就成功了'''
        print(re.findall("自己人人网的用户名", response.body.decode()))
        yield scrapy.Request(
            "登陆之后的个人信息网址",
            callback=self.parse_detial
        )

    def parse_detial(self, response):
        print(re.findall("自己人人网的用户名", response.body.decode()))

  6. 然后我们运行程序之后,就可以看见,匹配到了登录之后的自己人人网的用户名 

 7. 我们还可以在scrapy.Request()  里面设置headers参数

    def start_requests(self):
        cookies = "自己登陆人人网之后的=cookie"
        
        '''转化为字典的形式'''
        cookies = {i.split("=")[0]: i.split("=")[1] for i in cookies.split("; ")}
        '''设置headers参数,也可以加一些更多的请求头'''
        headers = {"Cookie":cookies}
        yield scrapy.Request(
            self.start_urls[0],
            callback=self.parse,
            headers=headers   #  设置headers参数
        )

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还是那个同伟伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值