Scrapy学习(二) 入门

快速入门

接上篇Scrapy学习(一) 安装,安装后,咱们利用一个简单的例子来熟悉如何使用Scrapy建立一个爬虫项目。css

建立一个Scrapy项目

在已配置好的环境下输入python

scrapy startproject dmozgit

系统将在当前目录生成一个myproject的项目文件。该文件的目录结构以下github

dmoz/    # 项目根目录
   scrapy.cfg    # 项目配置文件
   dmoz/    # 项目模块
       __init__.py
        items.py    # 项目item文件,有点相似Django中的模型
        pipelines.py    # 项目pipelines文件,负责数据的操做和存储
        settings.py    # 项目的设置文件.
        spiders/    # 项目spider目录,编写的爬虫脚步都放此目录下
            __init__.py

接下来咱们以dmoz.org为爬取目标。开始变现简单的爬虫项目。正则表达式

编写items

在items.py中编写咱们所需的数据的模型json

from scrapy.item import Item, Field

class Website(Item):
    name = Field()
    description = Field()
    url = Field()

这个模型用来填充咱们爬取的数据app

编写Spider

在spiders文件下新建爬虫文件。这部分才是业务的核心部分。
首先建立一个继承scrapy.spiders.Spider的类
而且定义以下三个属性dom

  • name 标识spiderscrapy

  • start_urls 启动爬虫时进行爬取的url列表,默认为空ide

  • parse() 每一个初始的url下载后的response都会传到该方法内,在这个方法里能够对数据进行处理。

from scrapy.spiders import Spider
from scrapy.selector import Selector
from dirbot.items import Website

class DmozSpider(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):
        sites = response.css('#site-list-content > div.site-item > div.title-and-desc')
        items = []

        for site in sites:
            item = Website()
            item['name'] = site.css(
                'a > div.site-title::text').extract_first().strip()
            item['url'] = site.xpath(
                'a/@href').extract_first().strip()
            item['description'] = site.css(
                'div.site-descr::text').extract_first().strip()
            items.append(item)
        return items

其中值得注意的是,在parse方法内,咱们能够用Selector选择器来提取网站中咱们所需的数据。提取的方式有几种。

  • xpath() 传入xpath表达式获取节点值

  • css() 传入css表达式获取节点值

  • re() 传入正则表达式获取节点值 # 此方法本人未测试

运行并保存数据

接下来咱们运行爬虫,并将爬取的数据存储到json中

scrapy crawl dmoz -o items.json

其余

在运行爬虫的过程当中,我遇到了以下报错:

KeyError: 'Spider not found: dmoz

这个是由于个人spider类中设置的name的值和我scrapy crawl运行的spider不一致致使的。

具体代码详见:
scrapy入门项目

相关文章
相关标签/搜索