📅  最后修改于: 2023-12-03 15:34:52.421000             🧑  作者: Mango
Scrapy是一个基于Python语言的数据抓取框架,可以快速方便地从网站中爬取数据,并存储到本地或者数据库中。其中提取数据的部分,例如XPath和CSS选择器等,是非常重要的。本文将介绍如何使用Scrapy提取项目。
在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是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是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 crawl book
以上命令中,使用crawl
参数指定Spider的名称。
在运行过程中,Scrapy将会访问目标网站,提取数据,并将其保存到MongoDB中。
本文通过一个示例,介绍了如何使用Scrapy提取项目。其中包括了Spider、Pipeline和Item等内容,希望能为读者提供一些参考。