你們好,本篇文章咱們來看一下強大的Python
爬蟲框架Scrapy
。Scrapy
是一個使用簡單,功能強大的異步爬蟲框架,咱們先來看看他的安裝。html
Scrapy
的安裝是很麻煩的,對於一些想使用Scrapy
的人來講,它的安裝經常就讓不少人死在半路。在此我將個人安裝過程和網絡上整理的安裝方法,分享給你們,但願你們可以安裝順利。若是你在學習Python的過程當中碰見了不少疑問和難題,能夠加-q-u-n 227 -435-450裏面有軟件視頻資料免費python
開始以前,咱們要肯定本身安裝了Python
,本篇文章咱們以Python3.5
爲例。Scrapy
有不少依賴的包,咱們來一一安裝。數據庫
pip -v
,查看pip
是否安裝正常,若是正常,那麼咱們進行下一步;pip install wheel
這個包咱們以前的文章介紹過,安裝好他咱們就能夠安裝一些wheel
件;lxml
安裝,以前的文章說過他的安裝,那麼咱們這裏在從新整理一下。whl文件地址:here。找到本身對應版本的文件,下載好後,找到文件位置,右鍵點擊文件屬性,點擊安全標籤,複製他的所在路徑。打開管理員工具(cmd),pip install <粘貼whl路徑>
;PyOpenssl
的whl
文件地址:here。點擊下載,whl
文件安裝方式同上;Twisted
框架這個框架是一個異步網絡庫,是Scrapy
的核心。whl
文件地址:here;Pywin32
這是一個Pywin32
兼容的庫,下載地址:here,選好版本進行下載;Scrapy
了,pip install scrapy
是否是很麻煩呢,若是你們不喜歡折騰,那麼在Windows
下也能夠很方便的安裝。那就要使用咱們以前提到的Anaconda
了。具體安裝你們本身找找,或者在以前的文章中找。那麼他的安裝Scrapy
只須要一行:json
|
Linux
系統安裝起來就要簡單一點:瀏覽器
|
咱們須要先安裝一些C++
的依賴庫,xcode-select --install
網絡
須要安裝命令行開發工具,咱們點擊安裝。安裝完成,那麼依賴庫也就安裝完成了。框架
而後咱們直接使用pip
安裝pip install scrapy
dom
以上,咱們的Scrapy
庫的安裝基本上就解決了。
Scrapy
的中文文檔地址:here
Scrapy是一個爲了爬取網站數據,提取結構性數據而編寫的應用框架。 能夠應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。
他的基本項目流程爲:
Scrapy
項目Item
spider
並提取Item
Item Pipeline
來存儲提取到的Item
(即數據)而通常咱們的爬蟲流程爲:
URL
並獲得源代碼,進行下一步分析;咱們一步一步來看看如何使用。
在開始爬取以前,您必須建立一個新的Scrapy
項目。 進入您打算存儲代碼的目錄中,運行下列命令(以知乎日報爲例):
|
該命令將會建立包含下列內容的 zhihu 目錄:
|
這些文件分別是:
scrapy.cfg: 項目的配置文件
zhihurb/: 該項目的python模塊。以後您將在此加入代碼。
zhihurb/items.py: 項目中的item文件.
zhihurb/pipelines.py: 項目中的pipelines文件.
zhihurb/settings.py: 項目的設置文件.
zhihurb/spiders/: 放置spider代碼的目錄.
這一步是定義咱們須要獲取到的數據信息,好比咱們須要得到網站裏的一些url
,網站文章的內容,文章的做者等。這一步定義的地方就在咱們的items.py
文件。
|
這一步就是寫咱們最熟悉的爬蟲了,而咱們的Scrapy
框架可讓咱們不須要去考慮實現的方法,只須要寫出爬取的邏輯就能夠了。
首先咱們須要在 spiders/ 文件夾下建立咱們的爬蟲文件,好比就叫spider.py
。寫爬蟲前,咱們須要先定義一些內容。咱們以知乎日報爲例:https://daily.zhihu.com/
|
這裏咱們定義了什麼呢?首先咱們導入了Scrapy
的Spider
組件。而後建立一個爬蟲類,在類裏咱們定義了咱們的爬蟲名稱:zhihu(注意:爬蟲名稱獨一無二的,是不能夠和別的爬蟲重複的)。還定義了一個網址範圍,和一個起始 url 列表,說明起始 url 能夠是多個。
而後咱們定義一個解析函數:
|
咱們直接打印一下,看看這個解析函數是什麼。
|
因爲Scrapy
是不支持在IDE
中執行,因此咱們必須在命令行裏執行命令,咱們要肯定是否是cd
到爬蟲目錄下。而後執行,這裏的命令顧名思義,crawl
是蜘蛛的意思,zhihu
就是咱們定義的爬蟲名稱了。
查看輸出,咱們先看到的是一些爬蟲類的輸出,能夠看到輸出的log
中包含定義在 start_urls
的初始URL,而且與spider
中是一一對應的。咱們接着能夠看到打印出了網頁源代碼。但是咱們彷佛並無作什麼,就獲得了網頁的源碼,這是Scrapy
比較方便的一點。
接着就可使用解析工具解析源碼,拿到數據了。
因爲Scrapy
內置了CSS
和xpath
選擇器,而咱們雖然可使用Beautifulsoup
,可是BeautifulSoup
的缺點就是慢,這不符合咱們Scrapy
的風格,全部我仍是建議你們使用CSS
或者Xpath
。
因爲以前我並無寫過關於Xpath
或者CSS
選擇器的用法,那麼首先這個並不難,並且熟悉瀏覽器的用法,能夠很簡單的掌握他們。
咱們以提取知乎日報裏的文章url
爲例:
|
這裏咱們使用xpath
解析出全部的url
(extract()是得到全部URL集合,extract_first()是得到第一個)。而後將url
利用yield
語法糖,回調函數給下一個解析url
的函數。
後面詳細的組件使用留在下一章講解,這裏假如咱們解析出了文章內容和標題,咱們要將提取的數據保存到item
容器。
Item
對象至關因而自定義的python
字典。 您可使用標準的字典語法來獲取到其每一個字段的值。(字段便是咱們以前用Field賦值的屬性)。
|
這裏咱們須要在管道文件pipelines.py
裏去操做數據,好比咱們要將這些數據的文章標題只保留 5 個字,而後保存在文本里。或者咱們要將數據保存到數據庫裏,這些都是在管道文件裏面操做。咱們後面在詳細講解。
那麼最簡單的存儲方法是使用命令行命令:
scrapy crawl zhihu -o items.json
這條命令就會完成咱們的數據保存在根目錄的json
文件裏,咱們還能夠將他格式保存爲msv
,pickle
等。改變命令後面的格式就能夠了。