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入門項目

相關文章
相關標籤/搜索