Python爬蟲:Scrapy框架的安裝和基本使用

你們好,本篇文章咱們來看一下強大的Python爬蟲框架Scrapy。Scrapy是一個使用簡單,功能強大的異步爬蟲框架,咱們先來看看他的安裝。python

Scrapy的安裝數據庫

Scrapy的安裝是很麻煩的,對於一些想使用Scrapy的人來講,它的安裝經常就讓不少人死在半路。在此我將個人安裝過程和網絡上整理的安裝方法,分享給你們,但願你們可以安裝順利。若是你在學習Python的過程當中碰見了不少疑問和難題,能夠加-q-u-n 227 -435-450裏面有軟件視頻資料免費
clipboard.pngjson

Windows安裝xcode

開始以前,咱們要肯定本身安裝了Python,本篇文章咱們以Python3.5爲例。Scrapy有不少依賴的包,咱們來一一安裝。瀏覽器

首先,使用pip -v,查看pip是否安裝正常,若是正常,那麼咱們進行下一步;安全

pip install wheel這個包咱們以前的文章介紹過,安裝好他咱們就能夠安裝一些wheel件;網絡

lxml安裝,以前的文章說過他的安裝,那麼咱們這裏在從新整理一下。whl文件地址:here。找到本身對應版本的文件,下載好後,找到文件位置,右鍵點擊文件屬性,點擊安全標籤,複製他的所在路徑。打開管理員工具(cmd),pip install <粘貼whl路徑>;框架

PyOpenssl 的whl文件地址:here。點擊下載,whl文件安裝方式同上;dom

Twisted框架這個框架是一個異步網絡庫,是Scrapy的核心。whl文件地址:here;異步

Pywin32這是一個Pywin32兼容的庫,下載地址:here,選好版本進行下載;

若是上面的庫全都安裝好了,那麼咱們就能夠安裝咱們的Scrapy了,pip install scrapy

是否是很麻煩呢,若是你們不喜歡折騰,那麼在Windows下也能夠很方便的安裝。那就要使用咱們以前提到的Anaconda了。具體安裝你們本身找找,或者在以前的文章中找。那麼他的安裝Scrapy只須要一行:

conda install scrapy

Linux安裝

Linux系統安裝起來就要簡單一點:

sudo apt-get install build-essential python3-dev libssl-dev libffi-dev libxml2 libxml2-dev libxslt1-dev zlib1g-dev

Mac OS安裝

咱們須要先安裝一些C++的依賴庫,xcode-select --install

須要安裝命令行開發工具,咱們點擊安裝。安裝完成,那麼依賴庫也就安裝完成了。

而後咱們直接使用pip安裝pip install scrapy

以上,咱們的Scrapy庫的安裝基本上就解決了。

Scrapy的基本使用

Scrapy的中文文檔地址:here

Scrapy是一個爲了爬取網站數據,提取結構性數據而編寫的應用框架。 能夠應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。

他的基本項目流程爲:

建立一個Scrapy項目

定義提取的Item

編寫爬取網站的spider並提取Item

編寫Item Pipeline來存儲提取到的Item(即數據)

而通常咱們的爬蟲流程爲:

抓取索引頁:請求索引頁的URL並獲得源代碼,進行下一步分析;

獲取內容和下一頁連接:分析源代碼,提取索引頁數據,而且獲取下一頁連接,進行下一步抓取;

翻頁爬取:請求下一頁信息,分析內容並請求在下一頁連接;

保存爬取結果:將爬取結果保存爲特定格式和文本,或者保存數據庫。

咱們一步一步來看看如何使用。

建立項目

在開始爬取以前,您必須建立一個新的Scrapy項目。 進入您打算存儲代碼的目錄中,運行下列命令(以知乎日報爲例):

scrapy startproject zhihurb

該命令將會建立包含下列內容的 zhihu 目錄:

zhihurb/

scrapy.cfg

zhihurb/

    __init__.py

    items.py

    pipelines.py

    settings.py

    spiders/

        __init__.py

        ...

這些文件分別是:

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

定義Item

這一步是定義咱們須要獲取到的數據信息,好比咱們須要得到網站裏的一些url,網站文章的內容,文章的做者等。這一步定義的地方就在咱們的items.py文件。

import scrapy

class ZhihuItem(scrapy.Item):

name = scrapy.Field()

article = scrapy.Field()

編寫Spider

這一步就是寫咱們最熟悉的爬蟲了,而咱們的Scrapy框架可讓咱們不須要去考慮實現的方法,只須要寫出爬取的邏輯就能夠了。

首先咱們須要在 spiders/ 文件夾下建立咱們的爬蟲文件,好比就叫spider.py。寫爬蟲前,咱們須要先定義一些內容。咱們以知乎日報爲例:https://daily.zhihu.com/

from scrapy import Spider

class ZhihuSpider(Spider):

name = "zhihu"

allowed_domains = ["zhihu.com"]

start_urls = ['https://daily.zhihu.com/']

這裏咱們定義了什麼呢?首先咱們導入了Scrapy的Spider組件。而後建立一個爬蟲類,在類裏咱們定義了咱們的爬蟲名稱:zhihu(注意:爬蟲名稱獨一無二的,是不能夠和別的爬蟲重複的)。還定義了一個網址範圍,和一個起始 url 列表,說明起始 url 能夠是多個。

而後咱們定義一個解析函數:

def parse(self, response):

print(response.text)

咱們直接打印一下,看看這個解析函數是什麼。

運行爬蟲

scrapy crawl zhihu

因爲Scrapy是不支持在IDE中執行,因此咱們必須在命令行裏執行命令,咱們要肯定是否是cd到爬蟲目錄下。而後執行,這裏的命令顧名思義,crawl是蜘蛛的意思,zhihu就是咱們定義的爬蟲名稱了。

查看輸出,咱們先看到的是一些爬蟲類的輸出,能夠看到輸出的log中包含定義在 start_urls 的初始URL,而且與spider中是一一對應的。咱們接着能夠看到打印出了網頁源代碼。但是咱們彷佛並無作什麼,就獲得了網頁的源碼,這是Scrapy比較方便的一點。

提取數據

接着就可使用解析工具解析源碼,拿到數據了。

因爲Scrapy內置了CSS和xpath選擇器,而咱們雖然可使用Beautifulsoup,可是BeautifulSoup的缺點就是慢,這不符合咱們Scrapy的風格,全部我仍是建議你們使用CSS或者Xpath。

因爲以前我並無寫過關於Xpath或者CSS選擇器的用法,那麼首先這個並不難,並且熟悉瀏覽器的用法,能夠很簡單的掌握他們。

咱們以提取知乎日報裏的文章url爲例:

from scrapy import Request

def parse(self, response):

urls = response.xpath('//div[@class="box"]/a/@href').extract()

for url in urls:

    yield Request(url, callback=self.parse_url)

這裏咱們使用xpath解析出全部的url(extract()是得到全部URL集合,extract_first()是得到第一個)。而後將url利用yield語法糖,回調函數給下一個解析url的函數。

使用item

後面詳細的組件使用留在下一章講解,這裏假如咱們解析出了文章內容和標題,咱們要將提取的數據保存到item容器。

Item對象至關因而自定義的python字典。 您可使用標準的字典語法來獲取到其每一個字段的值。(字段便是咱們以前用Field賦值的屬性)。

假如咱們下一個解析函數解析出了數據

def parse_url(self, response):

# name = xxxx

# article = xxxx

# 保存

item = DmozItem()

item['name'] = name

item['article'] = article

# 返回item

yield item

保存爬取到的數據

這裏咱們須要在管道文件pipelines.py裏去操做數據,好比咱們要將這些數據的文章標題只保留 5 個字,而後保存在文本里。或者咱們要將數據保存到數據庫裏,這些都是在管道文件裏面操做。咱們後面在詳細講解。

那麼最簡單的存儲方法是使用命令行命令:

scrapy crawl zhihu -o items.json

這條命令就會完成咱們的數據保存在根目錄的json文件裏,咱們還能夠將他格式保存爲msv,pickle等。改變命令後面的格式就能夠了。

相關文章
相關標籤/搜索