Scrapy框架由多个互相协作的组件构成。本节将详细介绍其中的几个主要组件:Item, Spider, Pipeline。
1. Item
在Scrapy中,爬取的数据被封装在Item对象中。你可以将Item视为一个简单的Python字典。Item用于定义爬取数据的数据结构。
例如,如果你想爬取一个博客网站,你可能需要保存每篇博客的标题,发布日期和内容。你可以定义一个BlogPostItem如下:
import scrapy
class BlogPostItem(scrapy.Item):
title = scrapy.Field()
date = scrapy.Field()
content = scrapy.Field()
然后,在你的Spider中,你可以创建一个新的BlogPostItem,并设置其字段:
def parse(self, response):
item = BlogPostItem()
item['title'] = response.css('h1::text').get()
item['date'] = response.css('.date::text').get()
item['content'] = response.css('.content::text').get()
return item
2. Spider
Spider是定义如何爬取网站(即如何进行页面请求,如何解析响应)的地方。每个Spider必须定义一个唯一的名字,定义爬取的行为,以及如何从网页内容中抽取Item。
import scrapy
from myproject.items import BlogPostItem
class BlogSpider(scrapy.Spider):
name = "blog"
start_urls = [
'http://myblog.com',
]
def parse(self, response):
for post in response.css('.post'):
item = BlogPostItem()
item['title'] = post.css('h1::text').get()
item['date'] = post.css('.date::text').get()
item['content'] = post.css('.content::text').get()
yield item
3. Pipeline
Item Pipeline负责处理被Spider抽取出来的Item。常见的处理数据的方法包括清洗HTML数据,验证爬取的数据(检查Item包含某些字段),查重(并丢弃)以及存储到数据库。
以下是一个简单的Pipeline示例,将所有爬取到的Items存入一个JSON文件:
import json
class JsonWriterPipeline(object):
def open_spider(self, spider):
self.file = open('items.jl', 'w')
def close_spider(self, spider):
self.file.close()
def process_item(self, item, spider):
line = json.dumps(dict(item)) + "\n"
self.file.write(line)
return item
要启用Item Pipeline,你必须将其添加到你项目的ITEM_PIPELINES
配置中,如:
ITEM_PIPELINES = {'myproject.pipelines.JsonWriterPipeline': 1}
其中,字典的键是类的路径,值是数字,数字定义了运行的顺序:项目中的Item Pipeline将按照这个顺序运行,数字小的优先。
以上是Scrapy的主要组件:Item,Spider以及Pipeline的简介。希望这些信息能帮助你更好地理解Scrapy框架的工作原理,以便你可以更有效地使用它来完成你的爬虫项目。
推荐阅读:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。