日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 爬虫框架_Python网络爬虫-scrapy框架的使用

發布時間:2025/3/20 python 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 爬虫框架_Python网络爬虫-scrapy框架的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. Scrapy

1.1 Scrapy框架的安裝

Scrapy是一個十分強大的爬蟲框架,依賴的庫比較多,至少需要依賴的庫有Twisted 、lxml和pyOpenSSL。在不同的平臺環境下,它所依賴的庫也各不相同,所以在安裝之前,最好確保把一些基本庫安裝好。

通過pip安裝:pip install scrapy

如果出現如下錯誤:

這是安裝Twisted導致的這個錯誤的發生的,需要從非官方版本下載twisted并安裝:

https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

下載對應版本后,通過pip安裝:

pip install Twisted-19.2.0-cp36-cp36m-win_amd64.whl

Twisted是用Python實現的基于事件驅動的網絡引擎框架,Twisted支持許多常見的傳輸及應用層協議,包括TCP、UDP、SSL/TLS、HTTP、IMAP、SSH、IRC以及FTP。scrapy是基于twisted實現的。

成功安裝twisted后,再通過pip install scrap即可成功安裝scrapy。

1.2 Scrapy框架基本使用

第一步:創建項目

CMD進入需要放置項目的目錄 輸入:

# DoubanBook代表項目的名字

用pycharm打開可以看到如下目錄結構:

第二步:創建一個爬蟲

cd DoubanBook scrapy genspider doubanbook book.douban.com

其中doubanbook是爬蟲的名字,http://book.douban.com代表爬蟲爬取url。

執行成功后,可以看到spiders目錄下新生成的文件:

打開doubanbook.py文件,可以看到scrapy框架生成的基本爬蟲模板,里面定義了爬蟲的名稱,爬取起始url,還有一個需要完善的解析方法。

第三步:實現爬蟲

先簡單嘗試一下把parse方法里的pass去掉,打印網頁源碼:

def

第四步:運行爬蟲

通過下面命令運行爬蟲:

# doubanbook就是第二步創建爬蟲時定義的爬蟲名稱

這時會出現403錯誤

這是因為豆瓣網站檢測了請求是不是由瀏覽器發起的,不是的話會被拒絕訪問,所以要讓爬蟲模擬瀏覽器請求。

修改settings.py配置文件,配置請求頭:

# Override the default request headers:

再次運行爬蟲,就能正常打印出網頁源碼。

scrapy從創建項目到運行爬蟲的基本流程就是這樣,詳細內容在后面具體介紹。

1.3 Scrapy基本原理

scrapy架構如圖所示:

  • Scrapy Engine: scrapy引擎,負責Spiders、ItemPipeline、Downloader、Scheduler中間的通訊,信號、數據傳遞等等。
  • Scheduler(調度器): 它負責接受引擎發送過來的requests請求,并按照一定的方式進行整理排列、入隊,等待Scrapy Engine(引擎)來請求時,交給引擎。
  • Downloader(下載器):負責下載Scrapy Engine(引擎)發送的所有Requests請求,并將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spiders來處理,
  • Spiders:它負責處理所有Responses,從中分析提取數據,獲取Item字段需要的數據,并將需要跟進的URL提交給引擎,再次進入Scheduler(調度器),
  • Item Pipeline:它負責處理Spiders中獲取到的Item,并進行處理,比如去重,持久化存儲(存數據庫,寫入文件,總之就是保存數據用的)
  • Downloader Middlewares(下載中間件):可以當作是一個可以自定義擴展下載功能的組件。
  • Spider Middlewares(Spider中間件):可以理解為是一個可以自定擴展和操作引擎和Spiders中間‘通信‘的功能組件(比如進入Spiders的Responses;和從Spiders出去的Requests)

根據scrapy框架的架構,建立一個項目之后:

第一件事情是在items.py文件中定義一些字段,這些字段用來臨時存儲你需要保存的數據。方便后面保存數據到其他地方,比如數據庫 或者 本地文本之類的。

第二件事情在spiders文件夾中編寫自己的爬蟲。

第三件事情在pipelines.py中存儲自己的數據。

第四件事情,不是非做不可的,settings.py文件 并不是一定要編輯的,只有有需要的時候才會編輯。SpiderMiddleware和DownloaderMiddleware也是在有需要的情況下進行修改。

1.4 Scrapy中items的用法

在items中定義爬取內容,如下所示:

import

1.5 Scrapy中spiders的用法

spider中通過解析請求的頁面,最后構造一個item并返回。解析可以使用xpath進行解析,也可以使用Beautiful Soup等第三方庫解析。

import

1.6 Scrapy中Item Pipeline的用法

頁面解析后得到item之后,通過item pipeline進行后處理,一般是存入數據庫或寫入文件。

把數據存入數據庫,需要使用到pymysql、pymongo等操作數據庫的第三方庫,通過pip安裝:

pip install pymysql pip install pymongo

下面通過MySQL演示具體使用:

import

然后取消settings中的ITEM_PIPELINES注釋,數字代表優先級,當有多個item_pipelines的時候起作用。

# Configure item pipelines

這樣再執行scrapy crawl doubanbook啟動爬蟲,數據就會保存到數據庫中。

2.使用scrapy-redis實現分布式爬蟲

Scrapy 是一個通用的爬蟲框架,但是不支持分布式,Scrapy-redis是為了更方便地實現Scrapy分布式爬取,而提供了一些以redis為基礎的組件。

2.1 scrapy-redis安裝

需要安裝reids和scrapy_redis庫。

pip install redis pip install scrapy_redis

2.2 scrapy-redis基本原理

Scrapy-Redis分布式策略:

  • Master端(核心服務器) :搭建一個Redis數據庫,負責url指紋判重、Request的分配,以及數據的存儲
  • Slaver端(爬蟲程序執行端) :負責執行爬蟲程序,運行過程中提交新的Request給Master
  • Scrapy-Reids 就是將Scrapy原本在內存中處理的 調度(就是一個隊列Queue)、去重這兩個操作通過Redis來實現。
  • 多個Scrapy在采集同一個站點時會使用相同的redis key(可以理解為隊列)添加Request 獲取Request 去重Request,這樣所有的spider不會進行重復采集。
  • Redis是原子性的,一個Request要么被處理 要么沒被處理,不存在第三可能。

2.3 scrapy-redis實例

2.3.1 items.py

定義兩個item,一個是待爬取的每本書的url,一個是每本書的具體內容。

# -*- coding: utf-8 -*-

2.3.2 spiders

實現兩個spider,一個用來獲取每本書的url,存入redis,框架實現去重,爬取隊列等。另一個用來爬取每本書的具體內容,從redis中讀取url進行爬取。

master端spider:返回MasterRedisItem

import

client端spider:返回DangdangItem,其中redis_key = 'dangdang:start_urls',和下面pipelines對應一致。

# -*- coding: utf-8 -*-

2.3.3 pipelines.py

處理url的redis緩存和最終數據保存到數據庫。

# -*- coding: utf-8 -*-

2.3.4 middlewares.py

# -*- coding: utf-8 -*-

2.3.5 settings.py

# -*- coding: utf-8 -*-

運行master端開始獲取url存入redis,client端可以開啟多個同時進行爬取,這樣就實現了spider的并行。

scrapy crawl dangmaster # 開啟一個 scrapy crawl dangdang # 可以開啟多個

3.反爬措施

代碼還沒敲完就被封的豆瓣。

3.1 代理ip的使用

許多網站也做了許多反爬措施,其中爬蟲訪問過于頻繁直接封ip地址的方法被許多網站采用,代理ip便可以防止這種情況出現。

scrapy框架在middlewares里設置代理ip。

def

3.2 cookies池的使用

有的網站不登錄直接爬取會有一些弊端,弊端主要有以下兩點。

  • 設置了登錄限制的頁面無法爬取。如某論壇設置了登錄才可查看資源,某博客設置了登錄才可查看全文等,這些頁面都需要登錄賬號才可以查看和爬取。
  • 一些頁面和接口雖然可以直接請求,但是請求一旦頻繁,訪問就容易被限制或者IP直接被封,但是登錄之后就不會出現這樣的問題,因此登錄之后被反爬的可能性更低。

所以可以搭建一個cookies池來模擬登錄。

GitHub地址:

https://github.com/stormstone/SpiderSSS

References

  • 崔慶才的個人博客
  • 廖雪峰的官方網站
  • Urllib模塊的使用
  • Requests官方文檔
  • Xpath教程
  • selenium官網
  • selenium-python文檔
  • pyquery官網
  • 使用 scrapy-redis實現分布式爬蟲
  • 總結

    以上是生活随笔為你收集整理的python 爬虫框架_Python网络爬虫-scrapy框架的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。