📜  Scrapy-提取项目(1)

📅  最后修改于: 2023-12-03 15:34:52.421000             🧑  作者: Mango

Scrapy提取项目

Scrapy是一个基于Python语言的数据抓取框架,可以快速方便地从网站中爬取数据,并存储到本地或者数据库中。其中提取数据的部分,例如XPath和CSS选择器等,是非常重要的。本文将介绍如何使用Scrapy提取项目。

设置Item

在Scrapy项目中,Item可以理解为要抓取的数据项。在items.py文件中定义Item的属性,例如:

import scrapy

class BookItem(scrapy.Item):
    book_name = scrapy.Field()
    author = scrapy.Field()
    rating = scrapy.Field()
    description = scrapy.Field()

以上是一个示例的Item,定义了书名、作者、评分和描述等属性。其中每个属性均使用了Scrapy提供的Field()方法。

编写Spider

Spider是Scrapy爬虫中最重要的组件。它定义了如何从目标网站中提取数据。在spiders目录下新建一个文件,例如book_spider.py,并定义以下内容:

import scrapy
from ..items import BookItem

class BookSpider(scrapy.Spider):
    name = 'book'
    allowed_domains = ['book.example.com']
    start_urls = ['https://book.example.com/']

    def parse(self, response):
        book_list = response.xpath('//ul[@class="book-list"]/li')
        for book in book_list:
            item = BookItem()
            item['book_name'] = book.xpath('.//h3/a/text()').get()
            item['author'] = book.xpath('.//span[@class="author"]/a/text()').get()
            item['rating'] = book.xpath('.//span[@class="rating"]/text()').get()
            item['description'] = book.xpath('.//p/text()').get()
            yield item

以上代码中,Spider名称为book,定义了目标网站的域名和起始页面。在parse()方法中,使用XPath选择器提取书籍列表,并循环抓取每一页的信息,将结果封装到BookItem对象中,最终通过yield语句返回给Pipeline处理。

Pipeline处理数据

Pipeline是Scrapy中处理数据的流程,负责对Spider提取的数据进行处理和持久化。在本项目中,数据将被存储到MongoDB数据库中。可以在项目的settings.py配置文件中进行如下配置:

ITEM_PIPELINES = {
    'book.pipelines.BookPipeline': 300,
}
MONGO_URI = 'mongodb://localhost:27017/'
MONGO_DATABASE = 'books'

以上代码中,定义了一个名为BookPipeline的Pipeline,并将其优先级设置为300。此外还配置了MongoDB的URI和数据库名称。

pipelines.py文件中实现BookPipeline

import pymongo

class BookPipeline(object):
    collection_name = 'books'

    def open_spider(self, spider):
        self.client = pymongo.MongoClient(spider.settings.get('MONGO_URI'))
        self.db = self.client[spider.settings.get('MONGO_DATABASE')]

    def close_spider(self, spider):
        self.client.close()

    def process_item(self, item, spider):
        self.db[self.collection_name].insert(dict(item))
        return item

以上代码中,定义了BookPipeline类,其中定义了MongoDB的连接客户端和数据库。实现了process_item()方法,负责将Item对象转换为字典,并插入到MongoDB中。

运行Scrapy

以上准备工作完成后,运行Scrapy程序即可开始提取数据。使用以下命令在终端运行Scrapy:

scrapy crawl book

以上命令中,使用crawl参数指定Spider的名称。

在运行过程中,Scrapy将会访问目标网站,提取数据,并将其保存到MongoDB中。

总结

本文通过一个示例,介绍了如何使用Scrapy提取项目。其中包括了Spider、Pipeline和Item等内容,希望能为读者提供一些参考。