3.2 编写第一个爬虫程序

参考官方文档(http://doc.scrapy.org/en/latest/intro/tutorial.html),编写 Scrapy Tutorial

Scrapy Tutorial

  • 在确保Scrapy安装正确能用之后,我们将用官方给定文档编写我们的第一个爬虫程序

我们学习的任务

  1. 创建新的Scrapy工程;
  2. 定义你将提取的Items;
  3. 写一个spider抓取网站并提取Items;
  4. 写ItemPipeline来存储提取的Items

创建一个工程

在开始爬取时,你首先必须建立一个新的Scrapy Project。输入一个你想将工程保存并运行的目录,如:

cd G:/python project/scrapy

进入目录后,我们将创建我们的工程。键入:

scrapy startproject tutorial

这会创建一个tutorial的目录,内容为:

  • scrapy.cfg: 项目的配置文件
  • tutorial/: 该项目的python模块。之后您将在此加入代码。
  • tutorial/items.py: 项目中的item文件.
  • tutorial/pipelines.py: 项目中的pipelines文件.
  • tutorial/settings.py: 项目的设置文件.
  • tutorial/spiders/: 放置spider代码的目录.

定义Item

item是保存爬取到的数据的容器。在这儿编写,我们需要抓取的数据的种类。其方法和python中的字典类似。根据教程,我们将从http://www.dmoz.org/中获取名字,URL以及网站的描述。对此,我们要在item中定义相应的片段。编辑 tutorial目录下的item.py:

from scrapy.item import Item, Field
class TutorialItem(Item):
    """存储提取信息数据结构"""
    title = Field()
    link  = Field()
    desc  = Field()

编写第一个爬虫(spider)

Spider是用户编写用于从单个网站(或者一些网站)爬取数据的类:

其包含了一个用于下载的初始URL,如何跟进网页中的链接以及如何分析页面中的内容, 提取生成item 的方法。为了创建一个Spider,您必须继承 scrapy.Spider 类, 且定义以下三个属性:

  • name: 用于区别Spider。 该名字必须是唯一的,您不可以为不同的Spider设定相同的名字。
  • start_urls: 包含了Spider在启动时进行爬取的url列表。 因此,第一个被获取到的页面将是其中之一。 后续的URL则从初始的URL获取到的数据中提取。
  • parse() 是spider的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的Request 对象。

编写dmoz_spider.py,保存在tutorial/spiders目录下:

import scrapy
class DmozSpider(scrapy.spiders.Spider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]
    start_urls = [
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
    ]
    def parse(self, response):
        filename = response.url.split("/")[-2]
        with open(filename, 'wb') as f:
            f.write(response.body)

爬取

进入项目的根目录,执行下列命令:

scrapy crawl dmoz

运行完成后,将会得到与下列相似的输出:

2014-01-23 18:13:07-0400 [scrapy] INFO: Scrapy started (bot: tutorial)
2014-01-23 18:13:07-0400 [scrapy] INFO: Optional features available: ...
2014-01-23 18:13:07-0400 [scrapy] INFO: Overridden settings: {}
2014-01-23 18:13:07-0400 [scrapy] INFO: Enabled extensions: ...
2014-01-23 18:13:07-0400 [scrapy] INFO: Enabled downloader middlewares: ...
2014-01-23 18:13:07-0400 [scrapy] INFO: Enabled spider middlewares: ...
2014-01-23 18:13:07-0400 [scrapy] INFO: Enabled item pipelines: ...
2014-01-23 18:13:07-0400 [dmoz] INFO: Spider opened
2014-01-23 18:13:08-0400 [dmoz] DEBUG: Crawled (200) <GET http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/> (referer: None)
2014-01-23 18:13:09-0400 [dmoz] DEBUG: Crawled (200) <GET http://www.dmoz.org/Computers/Programming/Languages/Python/Books/> (referer: None)
2014-01-23 18:13:09-0400 [dmoz] INFO: Closing spider (finished)

观察目录可以发现多了两个文件---Book, Resources

具体可以参考中文翻译:http://scrapy-chs.readthedocs.org/zh_CN/latest/intro/tutorial.html

results matching ""

    No results matching ""