Python爬蟲 ---scrapy框架初探及實戰

Scrapy框架安裝

操做環境介紹

操做系統: Ubuntu19.10
Python版本: Python3.7.4
編譯器: pycharm社區版html

安裝scrapy框架(linux系統下)

安裝scrapy框架最繁瑣的地方在於要安裝不少的依賴包,若缺乏依賴包,則scrapy框架的安裝就會報錯。
不過anaconda環境中會自帶lxml模塊,能夠免去一些步驟
在終端輸入命令安裝依賴包python

sudo apt-get install python-dev
sudo apt-get install libevent-dev

根據提示輸入y確認安裝,耐心等待安裝完成便可
安裝完所須要的依賴包以後,就能夠直接用pip安裝scrapy框架了linux

pip install scrapy

在終端輸入命令後,可能會出現網絡響應超時等報錯數據庫

通過幾回的嘗試以後,我認爲這是軟件源的問題致使下載過慢,建議更換清華的鏡像源來安裝網絡

pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple

在命令的末尾加上-i來暫時使用指定的鏡像源來安裝scrapy框架
在排除其餘問題的影響後,若安裝速度依舊不理想,可多嘗試幾個源來安裝框架

阿里雲 http://mirrors.aliyun.com/pypi/simple/ 
中國科技大學 https://pypi.mirrors.ustc.edu.cn/simple/ 
豆瓣(douban) http://pypi.douban.com/simple/ 
清華大學 https://pypi.tuna.tsinghua.edu.cn/simple/ 
中國科學技術大學 http://pypi.mirrors.ustc.edu.cn/simple/

ok,咱們能夠看到更換源以後的下載速度有了顯著的提高,只須要等待幾秒鐘就能夠看到安裝成功的標誌dom

檢測安裝是否成功

打開終端,輸入命令查看scrapy版本scrapy

scrapy --version

看到相似下圖所示的版本信息:ide

再輸入命令函數

scrapy bench

這條命令是調用scrapy去爬取一個空網址的內容,再輸入命令以後,看到scrapy正在運行去爬取空網址的內容即安裝成功了這個框架

Scrapy框架爬取原理

Scrapy框架的主體結構分爲五個部分:

Scrapy Engine(引擎): 負責Spider、ItemPipeline、Downloader、Scheduler中間的通信,信號、數據傳遞等。
Scheduler(調度器): 它負責接受引擎發送過來的Request請求,並按照必定的方式進行整理排列,入隊,當引擎須要時,交還給引擎。
Downloader(下載器): 負責下載Scrapy Engine(引擎)發送的全部Requests請求,並將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來處理。
Spider(爬蟲): 它負責處理全部Responses,從中分析提取數據,獲取Item字段須要的數據,並將須要跟進的URL提交給引擎,再次進入Scheduler(調度器)。
Item Pipeline(管道): 它負責處理Spider中獲取到的Item,並進行進行後期處理(詳細分析、過濾、存儲等)的地方。

它還有兩個能夠自定義下載功能的中間件:

Downloader Middlewares(下載中間件): 一個能夠自定義擴展下載功能的組件。
Spider Middlewares(Spider中間件): 一個能夠自定擴展和操做引擎和Spider中間通訊的功能組件。

Scrapy框架運行方式

由上圖能夠看出,引擎就至關於框架中的大腦,調配着其餘部分的運做。

首先爬蟲文件向引擎發送網址請求,在經由引擎將網址發送給調度器,調度器經過內部的函數將發來的網址進行隊列操做,將排好隊的網址從新發送回引擎。引擎接收到了發送回來的隊列以後,便將請求交給下載器,由下載器從外部網頁獲取網頁源碼,將獲取到的響應數據再發送回引擎。引擎接收到下載器發回的網頁源碼以後,再將數據傳回爬蟲文件,由爬蟲文件負責對html數據的提取,等到數據提取完畢,再把數據發送給引擎。引擎對爬蟲文件發送來的內容進行檢測,若判斷傳過來的內容爲數據,則引擎將數據發送給專門保存文件的管道數據,管道文件接收到發來的數據以後,就能夠有選擇的保存在數據庫或文件中。

至此,一次完整的爬蟲項目運行完成。

Scrapy框架實例

使用Scrapy爬取阿里文學

使用scrapy框架爬取的通常步驟

1.建立爬蟲項目
2.建立爬蟲文件
3.編寫爬蟲文件
4.編寫items
5.編寫pipelines
6.配置settings
7.運行scrapy框架

注:上面的步驟是使用scrapy的通常步驟,實際操做時能夠根據爬取頁面的難易度來調整這些步驟

1.建立爬蟲項目

首先找到一個文件夾,用於保存項目的內容
打開終端,在該目錄下輸入:

scrapy startproject [項目名稱]

成功建立

這時能夠發現文件夾下多了一個以項目名稱命名的文件夾

進入文件夾,發現裏面已經有了框架的模板文件

init.py //初始文件
items.py //定義目標,想要爬什麼信息
pipelines.py //爬後處理
middlewares.py //中間鍵
settings.py //文件的設置信息

2.建立爬蟲文件

scrapy genspider [爬蟲名] [想要爬取網址的域名]

注意:爬蟲名必定不能與項目名同樣,不然會建立失敗

3.分析文件,編寫爬蟲文件

咱們在上一步建立了爬蟲文件以後會發現多出來一個py文件在項目名目錄下

打開aliwx.py文件,開始分析網頁,提取想要爬取的信息
打開阿里文學的官網首頁,先設定咱們想要爬取的內容爲最近更新的書名及章節,使用xpath語法進行提取

打開項目文件夾下的spider文件夾,再打開咱們剛剛所建立的爬蟲文件
打開後能夠看到一個基礎的爬蟲框架,咱們要根據實際的須要來修改這個框架的內容

上面有紅色箭頭的地方就是咱們主要修改的地方
首先將第一個指向的地址換成咱們想要爬取的地址,即阿里文學的官網首頁《https://www.aliwx.com.cn/》
第二個地方就是咱們設置爬取內容的定製項

import scrapy

class AliwxSpider(scrapy.Spider):
    name = 'aliwx'
    allowed_domains = ['aliwx.com.cn']
    start_urls = ['https://www.aliwx.com.cn/']

    def parse(self, response):
        #選擇全部a標籤下的內容
        selectors = response.xpath("//ul[@class='list']/li[@class='tr']/a")  
        # 循環遍歷每個a標籤,使書名和最新章節能夠一對一匹配
        for selector in selectors:
            #提取a標籤下的書名 . 表示在當前標籤下繼續選擇
            book_name = selector.xpath("./span[2]/text()").get()  
            #提取a標籤下的最新章節名
            book_new = selector.xpath("./span[3]/text()").get() 

            #打印書名和章節名
            print(book_name,book_new)

4.設置settings

打開settings文件,在文件中找到代碼

這一行的意思是詢問是否遵循爬蟲協議,大體來說就是協議規範了咱們只能提取網站容許咱們提取的內容,因此此處應該將True提換成False,不然咱們頗有可能提取不到想要的內容

5.運行scrapy框架

打開終端,將目錄切換至項目文件夾下,輸入命令行來運行項目

scrapy crawl [爬蟲名]

等待項目運行完畢,便可看到爬取到的內容:

6.將爬取下來的內容保存到文件

若是想要將內容保存到文件中,就須要設置一個返回值來儲存
將print(book_name,book_new)語句替換

items = {
                'name': book_name,
                'new': book_new,
            }

            yield items

再打開終端,輸入運行並保存命令:

scrapy crawl aliwx -o book.csv

等待程序運行完成,就能夠看到出現了一個book.csv文件在項目目錄下,打開就是咱們所保存的內容

到此爲止一個最基本的爬蟲項目就製做完成了,若是有哪裏寫的很差請大佬多多批評指正!

相關文章
相關標籤/搜索