自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

你懂Scrapy嗎?Scrapy大型爬蟲框架講解【一】

大數(shù)據(jù)
Scrapy是一個為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構性數(shù)據(jù)而編寫的應用框架。 可以應用在包括數(shù)據(jù)挖掘,信息處理或存儲歷史數(shù)據(jù)等一系列的程序中。

[[191183]]

這是Scrapy爬蟲框架的***篇,本系列專題將包含以下內(nèi)容:

  1. 介紹Scrapy框架的主體以及各個組件的意義;
  2. 舉實例講解其具體應用。

開始***節(jié): 介紹Scrapy框架的主體以及各個組件的意義。

Scrapy是一個為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構性數(shù)據(jù)而編寫的應用框架。 可以應用在包括數(shù)據(jù)挖掘,信息處理或存儲歷史數(shù)據(jù)等一系列的程序中。

其最初是為了 頁面抓取 (更確切來說, 網(wǎng)絡抓取 )所設計的, 也可以應用在獲取API所返回的數(shù)據(jù)(例如 Amazon Associates Web Services ) 或者通用的網(wǎng)絡爬蟲。

安裝Scrapy需要一些依賴:

  1. Python
  2. Python Package: pip and setuptools. 現(xiàn)在 pip 依賴 setuptools ,如果未安裝,則會自動安裝setuptools 。
  3. lxml. 大多數(shù)Linux發(fā)行版自帶了lxml。如果缺失,請查看 Installing lxml
  4. OpenSSL. 除了Windows(請查看 平臺安裝指南)之外的系統(tǒng)都已經(jīng)提供。

當安裝好這些依賴之后,只需要運行pip install Scrapy,即可安裝完Scrapy。

然后運行:

  1. scrapy startproject tutorial 

即可自動創(chuàng)建官方標準的代碼目錄。

  1. tutorial/ 
  2.     scrapy.cfg 
  3.     tutorial/ 
  4.         __init__.py 
  5.         items.py 
  6.         pipelines.py 
  7.         settings.py 
  8.         spiders/ 
  9.             __init__.py 
  10.             ...  

其中:

  • tutorial/: 該項目的python總模塊。
  • tutorial/items.py: 項目中的item文件,編寫爬取的字段名稱等;
  • tutorial/pipelines.py: 項目中的pipelines文件;
  • tutorial/settings.py: 項目的設置文件,較為重要;
  • tutorial/spiders/: 放置spider代碼的主目錄;

Scrapy整體架構神圖:

Scrapy中的數(shù)據(jù)流由執(zhí)行引擎控制,其過程如下:

  1. 引擎打開一個網(wǎng)站(open a domain),找到處理該網(wǎng)站的Spider并向該spider請求***個要爬取的URL(s)。
  2. 引擎從Spider中獲取到***個要爬取的URL并在調(diào)度器(Scheduler)以Request調(diào)度。
  3. 引擎向調(diào)度器請求下一個要爬取的URL。
  4. 調(diào)度器返回下一個要爬取的URL給引擎,引擎將URL通過下載中間件(請求(request)方向)轉(zhuǎn)發(fā)給下載器(Downloader)。
  5. 一旦頁面下載完畢,下載器生成一個該頁面的Response,并將其通過下載中間件(返回(response)方向)發(fā)送給引擎。
  6. 引擎從下載器中接收到Response并通過Spider中間件(輸入方向)發(fā)送給Spider處理。
  7. Spider處理Response并返回爬取到的Item及(跟進的)新的Request給引擎。
  8. 引擎將(Spider返回的)爬取到的Item給Item Pipeline,將(Spider返回的)Request給調(diào)度器。
  9. (從第二步)重復直到調(diào)度器中沒有更多地request,引擎關閉該網(wǎng)站。

以上是老生常談,下面談一些經(jīng)驗:

  1. 如果需要大批量分布式爬取,建議采用Redis數(shù)據(jù)庫存儲,可安裝scrapy-redis,使用redis數(shù)據(jù)庫來替換scrapy原本使用的隊列結(jié)構(deque),并配合其它數(shù)據(jù)庫存儲,例如MySQL或者MongoDB,爬取效率將會極大提高。并且其自帶的dupefilter.py負責執(zhí)行requst的去重,使用redis的set數(shù)據(jù)結(jié)構,通過settings文件正確設置后,即便停止scrapy爬蟲,當下次重新開始后也能自動去重。原因就是在redis已經(jīng)存儲了request的信息。
  2. 當涉及到代理IP,Headers頭中間請求信息處理的時候,可以通過中間件Middleware來實現(xiàn)。Spider中間件是介入到Scrapy的spider處理機制的鉤子框架,可以添加代碼來處理發(fā)送給 Spiders的response及spider產(chǎn)生的item和request。
  3. 合理設置settings文件,需要熟練掌握 settings 的各種設置。
  4. 可以重新定義def start_requests(self)函數(shù)來加載cookie信息,form信息的提交用scrapy.FormRequest以及scrapy.FormRequest.from_response這兩個函數(shù),scrapy.FormRequest.from_response能實現(xiàn)自動提交form數(shù)據(jù)。
  5. 采用Scrapy+phantomJS,。 downloadMiddleware 對從 scheduler 送來的 Request 對象在請求之前進行預處理,可以實現(xiàn)添加 headers, user_agent,還有 cookie 等功能 。但也可以通過中間件直接返回 HtmlResponse 對象,略過請求的模塊,直接扔給 response 的回調(diào)函數(shù)處理。
  1. class CustomMetaMiddleware(object): 
  2.     def process_request(self,request,spider): 
  3.         dcap = dict(DesiredCapabilities.PHANTOMJS)      
  4.         dcap["phantomjs.page.settings.loadImages"] = False   
  5.         dcap["phantomjs.page.settings.resourceTimeout"] = 10 
  6.         driver = webdriver.PhantomJS("D:xx\xx",desired_capabilities=dcap) 
  7.         driver.get(request.url) 
  8.         body = driver.page_source.encode('utf8'
  9.         url = driver.current_url 
  10.         driver.quit() 
  11.         return HtmlResponse(request.url,body=body)  

綜上,是對Scrapy的各個組件一些個人的經(jīng)驗總結(jié)。

責任編輯:龐桂玉 來源: 36大數(shù)據(jù)
相關推薦

2018-08-08 11:40:24

ScrapyRequest網(wǎng)絡爬蟲

2021-01-08 09:07:19

Scrapy框架爬蟲

2021-05-18 13:25:28

feapder爬蟲Python

2017-09-16 17:45:32

數(shù)據(jù)采集Scrapy爬蟲

2021-11-08 14:38:50

框架Scrapy 爬蟲

2020-12-07 11:23:32

Scrapy爬蟲Python

2021-04-12 07:36:15

Scrapy爬蟲框架

2021-11-09 09:46:09

ScrapyPython爬蟲

2020-11-11 10:58:59

Scrapy

2023-08-29 09:31:01

Scrapy網(wǎng)頁爬蟲

2020-10-27 08:33:38

Scrapy

2017-11-29 15:21:53

PythonScrapy爬蟲

2012-07-17 09:13:14

Scrapy

2022-03-25 11:44:14

Scrapy爬蟲命令

2021-02-19 10:20:06

Scrapy組件Python

2021-09-26 05:01:55

Scrapy項目爬蟲

2021-06-08 21:36:24

PyCharm爬蟲Scrapy

2018-05-16 13:50:30

Python網(wǎng)絡爬蟲Scrapy

2021-09-30 09:00:34

Scrapy網(wǎng)絡爬蟲Python

2017-11-20 09:46:08

python爬蟲Scrapy
點贊
收藏

51CTO技術棧公眾號