爬虫文件(spiders / jobbole.py):
spiders/jobbole.py
class JobboleSpider(scrapy.Spider): 爬虫类
parse() 函数
- 解析出列表页 urls,每条 url 依次通过 Request 交给 parse_detail()(作为参数response) (如果还需要列表页每栏封面图,需要在 Request 的 meta 选项中附图片链接)
- 如需提取下一页链接继续爬取,可再用一个 Request 交回 parse()
parse_detail() 函数
-
方法1. 提取 parse() 获得的 url 页面具体内容(文章标题、日期等,可使用 xpath / css)
实例化 items.py 中定义的格式类 article_item,以键值对形式给它赋值(类似字典) -
方法2. 使用 item loader 加载 item。实例化后用 add_css() / add_value() 赋值
两函数最终结果(Request、article_item)需要 yield
scrapy 自动把 article_item 路由到 pipelines.py 中,集中处理数据保存、去重等
数据格式文件(items.py):
items.py
class JobboleArticleItem(scrapy.Item): 格式类
- 类似字典,只有一种类型 scrapy.Field(),格式如 title = scrapy.Field()
可在Field括号内设预处理参数,input_processor=MapCompose(自定义函数)、output_processor=Takefirst()(用 itemloader 结果是 list,需要取 list 第一个)
class ArticleItemLoader(ItemLoader): 自定义item loader
- 可自定义 item loader 在爬虫文件使用,在里面加 default_output_processor=Takefirst(),免得在每条Field里面加预处理参数。如果不需要取第一个,则加一个 output_processor 覆盖掉。
数据存储文件(pipelines.py):
pipelines.py
class ArticlespiderPipeline(object): 系统默认pipeline
init() 函数
- 做存储的预备工作,如打开json文件、连接mysql数据库等,为process_item()做准备
process_item() 函数
- 有 item 参数,可以接收路由到的 article_item
(可在里面自定义数据的处理)
spider_closed() 函数
- 数据存储完成后,关闭文件或连接
也可以自定义新的 pipeline(管道),把 item 保存到 json 文件或 mysql 数据库,不过需要修改 settings.py 的ITEM_PIPELINES 参数值。格式: ‘项目名.pipelines.管道名’ : 数字
数字越小的管道越早进入(如先进入图片存储管道,在结果 item 中增加图片路径值;再进入存储管道,把最终 item 存到 json 文件或 mysql 数据库 [ 需要 pip install mysqlclient,pipelines.py 中 import MySQLdb)
本文介绍了Scrapy爬虫框架的基本组件,包括spiders中的JobboleSpider类及其parse、parse_detail方法,用于抓取网页内容;items.py中的JobboleArticleItem类和ArticleItemLoader,定义数据格式并进行加载;以及pipelines.py中的ArticlespiderPipeline,负责数据处理和存储。通过parse方法获取URL,然后使用ItemLoader填充Item,并在pipelines中进行数据持久化操作。

被折叠的 条评论
为什么被折叠?



