online gambling singapore online gambling singapore online slot malaysia online slot malaysia mega888 malaysia slot gacor live casino malaysia online betting malaysia mega888 mega888 mega888 mega888 mega888 mega888 mega888 mega888 mega888 你懂Scrapy嗎?Scrapy大型爬蟲框架講解【一】


作者:蚍蜉撼大樹

這是Scrapy爬蟲框架的第一篇,本系列專題將包含以下內容:

  1. 介紹Scrapy框架的主體以及各個組件的意義;

  2. 舉實例講解其具體應用。

開始第一節:介紹Scrapy框架的主體以及各個組件的意義。

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

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

安裝Scrapy需要一些依賴:

  • Python

  • Python Package: pip and setuptools. 現在pip 依賴setuptools ,如果未安裝,則會自動安裝setuptools 。

  • lxml.大多數Linux發行版自帶了lxml。如果缺失,請查看Installing lxml

  • OpenSSL. 除了Windows(請查看平台安裝指南)之外的系統都已經提供。

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

然後運行:

scrapy startproject tutorial

即可自動創建官方標準的代碼目錄。

tutorial/
    scrapy.cfg
    tutorial/
        __init__. py 
        items . py 
        pipelines. py 
        settings. py
        spiders/
            __init__. py 
            ...

其中:

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

Scrapy整體架構神圖:

Scrapy中的數據流由執行引擎控制,其過程如下:

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

以上是老生常談,下面談一些經驗:

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

綜上,是對Scrapy的各個組件一些個人的經驗總結。

via:知乎

End.

轉貼自: 36大數據


留下你的回應

以訪客張貼回應

0

在此對話中的人們

I can’t imagine focusing long enough to research; much less write this kind of article. You’ve outdo...
打破4個大數據迷思 在 Joomla 文章
This design is spectacular! You definitely know how to keep a reader amused. Between your wit and yo...
I discovered your blog web site on google and examine just a few of your early posts. Continue to ma...
Fantastic beat ! I wish to apprentice while you amend your website, how could i subscribe for a blog...
Our god bless people, your blog could be the approach carrier for great organization. I actually pre...

Monthly Select

虛擬貨幣價格形成與預測:情緒、總經、網絡與投資人結構:(一)交易策略
虛擬貨幣價格形成與預測:情緒、總經、網絡與投資人結構:(二)泡沫與崩盤
虛擬貨幣價格形成與預測:情緒、總經、網絡與投資人結構:(三)敘述統計
虛擬貨幣價格形成與預測:情緒、總經、網絡與投資人結構:(四)文獻回顧
虛擬貨幣價格形成與預測:情緒、總經、網絡與投資人結構:(五)決定因素
虛擬貨幣價格形成與預測:情緒、總經、網絡與投資人結構:(六) 結論

YOU MAY BE INTERESTED

Editor's choice

24 三 2024 05:14 - mm

摘要: 上週,媒體報導歐盟官方也正在計劃進行同樣的調查,準備在4月舉行的歐美貿易科技委員會中,與美國討論合作方案,針對未來若發生中國傾銷低價成熟晶片,採取反制措施。

Read more...
24 三 2024 05:18 - mm

摘要: 房市去年下半年起交易量明顯回升,央行21日宣布升息半碼,為去年第2季以來首次升息,房仲業者分析,若以房貸1,000萬元、貸款年限30年計算,升息半碼後,粗估每月多繳631元,每年多繳7,572元,雖不至於增加太多,但對買方確實會帶來「溫水煮青蛙」危機感,可能稍降房市買氣。

Read more...