『Scrapy』爬虫框架入门
框架結構
引擎:處于中央位置協調工作的模塊
spiders:生成需求url直接處理響應的單元
調度器:生成url隊列(包括去重等)
下載器:直接和互聯網打交道的單元
管道:持久化存儲的單元
框架安裝
一般都會推薦pip,但實際上我是用pip就是沒安裝成功,推薦anaconda,使用conda install scarpy來安裝。
scarpy需要使用命令行,由于我是使用win,所以還需要把scarpy添加到path中,下載好的scarpy放在anaconda的包目錄下,找到并添加。
框架入門
創建項目
在開始爬取之前,您必須創建一個新的Scrapy項目。 進入您打算存儲代碼的目錄中,運行下列命令:
scrapy startproject tutorial 該命令將會創建包含下列內容的 tutorial 目錄,這個目錄會創建在當前cmd的工作目錄下:
tutorial/scrapy.cfgtutorial/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py ... 這些文件分別是:
scrapy.cfg: 項目的配置文件tutorial/: 該項目的python模塊。之后您將在此加入代碼。tutorial/items.py: 項目中的item文件.tutorial/pipelines.py: 項目中的pipelines文件.tutorial/settings.py: 項目的設置文件.tutorial/spiders/: 放置spider代碼的目錄.
實際上這算也是一個項目,可以使用pycharm加載。
編寫爬蟲
Spider是用戶編寫用于從單個網站(或者一些網站)爬取數據的類。
為了創建一個Spider,您必須繼承 scrapy.Spider 類, 且定義以下三個屬性:
-
name: 用于區別Spider。 該名字必須是唯一的,您不可以為不同的Spider設定相同的名字。 -
start_urls: 包含了Spider在啟動時進行爬取的url列表。 因此,第一個被獲取到的頁面將是其中之一。 后續的URL則從初始的URL獲取到的數據中提取 -
parse()是spider的一個方法。 被調用時,每個初始URL完成下載后生成的Response對象將會作為唯一的參數傳遞給該函數。 該方法負責解析返回的數據(response data),提取數據(生成item)以及生成需要進一步處理的URL的Request對象。 -
allowed_domains:域范圍,非此域內url不予爬取。
spider文件要保存在Spider目錄下,文件名和類名都可以隨便取,但是name屬性是唯一的,調用時用的也是name屬性。
import scrapyclass 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)
開始爬取
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) ?查看包含 [dmoz] 的輸出,可以看到輸出的log中包含定義在 start_urls 的初始URL,并且與spider中是一一對應的。在log中可以看到其沒有指向其他頁面( (referer:None) )。
回顧一下過程
Scrapy為Spider的 start_urls 屬性中的每個URL創建了 scrapy.Request 對象,并將 parse 方法作為回調函數(callback)賦值給了Request。
Request對象經過調度,執行生成 scrapy.http.Response 對象并送回給spider parse() 方法。
?
?
轉載于:https://www.cnblogs.com/hellcat/p/7421656.html
總結
以上是生活随笔為你收集整理的『Scrapy』爬虫框架入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 订婚给多少钱啊?
- 下一篇: 求一个qq网名文艺小清新