標籤:

scrapy初試

scrapy初試

創建項目

打開cmd,在終端輸入scrapy startproject tutorial,這裡將在指定的文件夾下創建一個scrapy工程

其中將會創建以下的文件:

  • scrapy.cfg: 項目的配置文件
  • tutorial/: 該項目的python模塊。之後您將在此加入代碼。
  • tutorial/items.py: 項目中的item文件.
  • tutorial/pipelines.py: 項目中的pipelines文件.
  • tutorial/settings.py: 項目的設置文件.
  • tutorial/spiders/: 放置spider代碼的目錄.

定義item

Item是保存爬取到的數據的容器;其使用方法和python字典類似, 並且提供了額外保護機制來避免拼寫錯誤導致的未定義欄位錯誤。

類似在ORM中做的一樣,您可以通過創建一個 scrapy.Item 類, 並且定義類型為 scrapy.Field的類屬性來定義一個Item。 (如果不了解ORM, 不用擔心,您會發現這個步驟非常簡單)

首先根據需要從dmoz.org獲取到的數據對item進行建模。 我們需要從dmoz中獲取名字,url,以及網站的描述。 對此,在item中定義相應的欄位。編輯 tutorial 目錄中的 items.py 文件:

import scrapyclass DmozItem(scrapy.Item):title = scrapy.Field()link = scrapy.Field()desc = scrapy.Field()

一開始這看起來可能有點複雜,但是通過定義item, 您可以很方便的使用Scrapy的其他方法。而這些方法需要知道您的item的定義.

編寫第一個爬蟲

在工程的根目錄下打開終端輸入scrapy genspider demo douban.com

這裡的demospders文件下的主要py文件

douban.com是要爬取的域名,會在demo.py中的 allowed_domains中顯示,主要的功能就是限制爬取的url

spider代碼中內容解析

  • name: 用於區別Spider。 該名字必須是唯一的,您不可以為不同的Spider設定相同的名字。
  • start_urls: 包含了Spider在啟動時進行爬取的url列表。 因此,第一個被獲取到的頁面將是其中之一。 後續的URL則從初始的URL獲取到的數據中提取。
  • parse() 是spider的一個方法。 被調用時,每個初始URL完成下載後生成的 Response 對象將會作為唯一的參數傳遞給該函數。 該方法負責解析返回的數據(response data),提取數據(生成item)以及生成需要進一步處理的URLRequest對象。

以下是spider目錄下的demo.py的代碼

import scrapy

class DmozSpider(scrapy.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)

spider的爬取

進入工程的根目錄下打開終端輸入:scrapy crawl dmoz

spider中的數據存取

在工程的根目錄下打開終端輸入scrapy crawl dmoz -o items.json

這裡是將數據存儲到json文件中

推薦閱讀:

Python學習筆記 ——yield
推薦一些相見恨晚的 Python 庫 「二」
python操作Mysql資料庫
Python黑帽編程 3.1 ARP欺騙
100G Python從入門到精通全套資料!

TAG:Python |