新建工程
scrapy startproject tutorial
如果没有报错,则创建成功
在Mac下如果报这个错误:
1 | Traceback (most recent call last): |
尝试
export PYTHONPATH=/Library/Python/2.7/site-packages:$PYTHONPATH
或
echo "export PYTHONPATH=/Library/Python/2.7/site-packages:$PYTHONPATH" >> ~/.bashrc
然后重新创建工程
该命令将会创建包含下列内容的 tutorial 目录:
1 | tutorial/ |
这些文件分别是:
- scrapy.cfg: 项目的配置文件
- tutorial/: 该项目的python模块。之后您将在此加入代码。
- tutorial/items.py: 项目中的item文件.
- tutorial/pipelines.py: 项目中的pipelines文件.
- tutorial/settings.py: 项目的设置文件.
- tutorial/spiders/: 放置spider代码的目录.
创建爬虫
在tutorial/spiders下创建dmoz_spider.py,代码:
1 | from scrapy.spider import Spider |
上面的class中,参数说明如下:
- name是Scrapy 识别的爬虫名字,一定要唯一。
- allowed_domains 是域名白名单
- start_urls 即种子url (如果没有定义其他Rule的话,也就是只抓取这几页)
- parse()是spider的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。
爬取数据
切换到tutorial目录,执行:
scrapy crawl dmoz
然后,发现目录下多了 Books 和 Resources 2个文件。
在执行上面的shell命令时,scrapy会创建一个scrapy.http.Request对象,将start_urls传递给它,抓取完毕后,回调parse函数。
刚才发生了什么?
Scrapy为Spider的 start_urls 属性中的每个URL创建了 scrapy.Request 对象,并将 parse 方法作为回调函数(callback)赋值给了Request。
Request对象经过调度,执行生成 scrapy.http.Response 对象并送回给spider parse() 方法。
参考Scrapy入门教程。