1. 程式人生 > 程式設計 >python爬蟲使用scrapy注意事項

python爬蟲使用scrapy注意事項

在學習中,如果遇到問題把它們都收集整理出來,長期儲存之後也是一份經驗之談。小編跟大家講了這麼久的scrapy框架,在自己學習的整理和小夥伴們的交流反饋中也累積了不少心得。想著有些小夥伴在python學習的時候有點丟三落四的毛病,特意整理出來scrapy在python爬蟲使用中需要注意的事項,大家一起看看吧。

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)

到此這篇關於python爬蟲使用scrapy注意事項的文章就介紹到這了,更多相關scrapy在python爬蟲使用中需要注意什麼內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!