Scrapy 之配置文件 item.py

了解更多关注微信公众号“木下学Python”吧~

 

目录

数据的存储容器,在对数据进行有处理的操作时,必须要用,例如写入txt,插入数据库等

 ItemLoader

Field 元数据

容器实例化在 spider 中

FilePipeline 文件下载管道的容器


数据的存储容器,在对数据进行有处理的操作时,必须要用,例如写入txt,插入数据库等

 没有对数据进行操作时,可以不使用

 

 

 ItemLoader

文档:https://doc.scrapy.org/en/latest/topics/loaders.html

https://blog.csdn.net/zwq912318834/article/details/79530828

 

 

Field 元数据

可以对存储到容器的数据进行操作

例如在写入 csv 时,对应的数据时列表,但想写入的是字符串,将元数据字段串行化,serializer 是 scrapy 导出源代码里面规定好的一个键,用该键获取元数据

class BookItem(Item):
    ...
    author = Field(serializer=lambda x: ','.join(x))
    ..

 

 

容器实例化在 spider 中

在 spider 文件中,要导入容器模块,实例化使用时实例化在 parse 函数里面,并且一般是在 for 循环里面,如果在 for 循环外面,那最后容器可能到最后因为都是把上一次的数据覆盖,最后就只剩一条数据,所以要在循环里面实例化,每一次都返回一个新的字段

对:

class BooksSpider(scrapy.Spider):
    name = 'books'
    allowed_domains = ['books.toscrape.com']
    start_urls = ['http://books.toscrape.com/']

    def parse(self, response):
        """
        提取数据
        用 css 提取每一本书的标签
        :param response:
        :return:
        """
        for sel in response.css('article.product_pod'):
            book = BooksSpiderItem() !!!!!!!!!!!!!!!!!!!!!!!!这里
            book['name'] = sel.xpath('./h3/a/@title').extract_first()
            book['price'] = sel.css('p.price_color::text').extract_first()

            yield book

        #提取下一页链接
        next_url = response.css('ul.pager li.next a::attr(href)').extract_first()
        if next_url:
            next_url = response.urljoin(next_url)
            yield scrapy.Request(next_url,callback=self.parse)

错:

class BooksSpider(scrapy.Spider):
    name = 'books'
    allowed_domains = ['books.toscrape.com']
    start_urls = ['http://books.toscrape.com/']
    book = BooksSpiderItem() !!!!!!!!!!!!!!!!!!!这里

    def parse(self, response):
        """
        提取数据
        用 css 提取每一本书的标签
        :param response:
        :return:
        """
        for sel in response.css('article.product_pod'):
       
            book['name'] = sel.xpath('./h3/a/@title').extract_first()
            book['price'] = sel.css('p.price_color::text').extract_first()

            yield book

        #提取下一页链接
        next_url = response.css('ul.pager li.next a::attr(href)').extract_first()
        if next_url:
            next_url = response.urljoin(next_url)
            yield scrapy.Request(next_url,callback=self.parse)

 

FilePipeline 文件下载管道的容器

file_urls 为保存下载链接的容器字段,为列表

files 为下载信息的容器的列表,这个在导出文件时必须要,而且不要拼错,拼错保存不了结果

下载完 item['file_urls'] 中的所有文件后,会将各文件的下载结果信息收集另一个你一个列表,赋给 item 的 fiels 字段(item['files'])下载结果包括:

  • path 文件下载到本地的路径(相对于 FILES_STORE 的相对路径)
  • checksum 文件的校验和,一般默认用于作为文件名,是经过散列值计算的
  • url 文件的 url 地址
class MatplotlibExamplesItem(scrapy.Item):
    #文件 url
    file_urls = scrapy.Field()
    #保存下载的文件
    files = scrapy.Field()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值