Scrapy教程02- 完整示例
这篇文章我们通过一个比较完整的例子来教你使用Scrapy,我选择爬取虎嗅网首页的新闻列表。
这里我们将完成如下几个步骤:
- 创建一个新的Scrapy工程
- 定义你所需要要抽取的Item对象
- 编写一个spider来爬取某个网站并提取出所有的Item对象
- 编写一个Item Pipline来存储提取出来的Item对象
Scrapy使用Python语言编写,如果你对这门语言还不熟,请先去学习下基本知识。
创建Scrapy工程
在任何你喜欢的目录执行如下命令
1
| scrapy startproject coolscrapy
|
将会创建coolscrapy文件夹,其目录结构如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| coolscrapy/ scrapy.cfg # 部署配置文件
coolscrapy/ # Python模块,你所有的代码都放这里面 __init__.py
items.py # Item定义文件
pipelines.py # pipelines定义文件
settings.py # 配置文件
spiders/ # 所有爬虫spider都放这个文件夹下面 __init__.py ...
|
定义我们的Item
我们通过创建一个scrapy.Item类,并定义它的类型为scrapy.Field的属性,
我们准备将虎嗅网新闻列表的名称、链接地址和摘要爬取下来。
1 2 3 4 5 6 7
| import scrapy
class HuxiuItem(scrapy.Item): title = scrapy.Field() link = scrapy.Field() desc = scrapy.Field() posttime = scrapy.Field()
|
也许你觉得定义这个Item有点麻烦,但是定义完之后你可以得到许多好处,这样你就可以使用Scrapy中其他有用的组件和帮助类。
第一个Spider
蜘蛛就是你定义的一些类,Scrapy使用它们来从一个domain(或domain组)爬取信息。
在蜘蛛类中定义了一个初始化的URL下载列表,以及怎样跟踪链接,如何解析页面内容来提取Item。
定义一个Spider,只需继承scrapy.Spider
类并定于一些属性:
- name: Spider名称,必须是唯一的
- start_urls: 初始化下载链接URL
- parse(): 用来解析下载后的Response对象,该对象也是这个方法的唯一参数。
它负责解析返回页面数据并提取出相应的Item(返回Item对象),还有其他合法的链接URL(返回Request对象)。