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参数
        )

 

可以使用 Scrapy 框架和 XPath 选择器来爬取 www.runoob.com 网页图片,具体步骤如下: 1. 创建 Scrapy 项目并定义 Item 在命令行输入以下命令,创建一个名为 `runoob` 的 Scrapy 项目: ``` scrapy startproject runoob ``` 然后在 `runoob` 项目文件夹下的 `items.py` 文件定义 `RunoobItem`,用于存储爬取到的图片信息: ```python import scrapy class RunoobItem(scrapy.Item): image_urls = scrapy.Field() images = scrapy.Field() ``` 2. 创建 Spider 并编写爬虫逻辑 在 `runoob` 项目文件夹下的 `spiders` 文件夹创建名为 `image_spider.py` 的文件,并编写如下代码: ```python import scrapy from runoob.items import RunoobItem class ImageSpider(scrapy.Spider): name = 'image_spider' allowed_domains = ['www.runoob.com'] start_urls = ['https://www.runoob.com/'] def parse(self, response): item = RunoobItem() # 提取所有图片链接 item['image_urls'] = response.xpath('//img/@src').extract() yield item ``` 在 `ImageSpider` ,我们首先定义了爬虫的名称 `name`、允许爬取的域名 `allowed_domains` 和起始爬取的 URL 列表 `start_urls`。然后在 `parse` 方法使用 XPath 选择器提取页面所有的图片链接,并将其存储到 `item` 。最后使用 `yield` 将 `item` 传递给 Scrapy 引擎。 3. 配置 Scrapy Pipeline 在 `runoob` 项目文件夹下的 `settings.py` 文件,添加如下配置: ```python ITEM_PIPELINES = {'scrapy.pipelines.images.ImagesPipeline': 1} IMAGES_STORE = 'images/' ``` 在这里我们使用 Scrapy 内置的 `ImagesPipeline` 来下载图片,并将下载的图片保存到 `images/` 目录下。 4. 运行爬虫 在命令行进入 `runoob` 项目文件夹,输入以下命令启动爬虫: ``` scrapy crawl image_spider ``` Scrapy 就会自动爬取 www.runoob.com 页面的所有图片,并将其下载到 `images/full/` 目录下。 注意:如果运行过程出现错误,可以尝试安装 Pillow 库(用于处理图片),并重启命令行窗口再次运行爬虫: ``` pip install Pillow ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

还是那个同伟伟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值