scrapy初試
- 2019 年 12 月 30 日
- 筆記
文章目錄
scrapy初試
創建項目 打開
cmd,在終端輸入scrapy startproject tutorial,這裡將在指定的文件夾下創建一個scrapy工程 其中將會創建以下的文件:
scrapy.cfg: 項目的配置文件tutorial/: 該項目的python模組。之後您將在此加入程式碼。tutorial/items.py: 項目中的item文件.tutorial/pipelines.py: 項目中的pipelines文件.tutorial/settings.py: 項目的設置文件.tutorial/spiders/: 放置spider程式碼的目錄.
import scrapy class DmozItem(scrapy.Item): title = scrapy.Field() link = scrapy.Field() desc = scrapy.Field()
定義item Item是保存爬取到的數據的容器;其使用方法和python字典類似, 並且提供了額外保護機制來避免拼寫錯誤導致的未定義欄位錯誤。 類似在ORM中做的一樣,您可以通過創建一個 scrapy.Item 類, 並且定義類型為 scrapy.Field的類屬性來定義一個Item。 (如果不了解ORM, 不用擔心,您會發現這個步驟非常簡單) 首先根據需要從dmoz.org獲取到的數據對item進行建模。 我們需要從dmoz中獲取名字,url,以及網站的描述。 對此,在item中定義相應的欄位。編輯 tutorial 目錄中的 items.py 文件:
一開始這看起來可能有點複雜,但是通過定義item, 您可以很方便的使用Scrapy的其他方法。而這些方法需要知道您的item的定義. 編寫第一個爬蟲 在工程的根目錄下打開終端輸入
scrapy genspider demo douban.com這裡的demo是spders文件下的主要py文件douban.com是要爬取的域名,會在demo.py中的allowed_domains中顯示,主要的功能就是限制爬取的urlspider程式碼中內容解析
name: 用於區別Spider。 該名字必須是唯一的,您不可以為不同的Spider設定相同的名字。start_urls: 包含了Spider在啟動時進行爬取的url列表。 因此,第一個被獲取到的頁面將是其中之一。 後續的URL則從初始的URL獲取到的數據中提取。parse()是spider的一個方法。 被調用時,每個初始URL完成下載後生成的 Response 對象將會作為唯一的參數傳遞給該函數。 該方法負責解析返回的數據(response data),提取數據(生成item)以及生成需要進一步處理的URL的Request對象。
以下是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 dmozspider中的數據存取 在工程的根目錄下打開終端輸入scrapy crawl dmoz -o items.json這裡是將數據存儲到json文件中
