路飛學成-Python爬蟲實戰密訓-第3章
阿新 • • 發佈:2018-07-12
請求 ref 流處理 自己 ems 需要 難點 crawl html
1,本節學習體會、心得 :
本章的內容非常多,scrapy框架的使用。對於學過django的人來說。可能要更好理解一些把。個人感覺還是挺簡單的。所有的知識點一聽就懂,唯一不好的就是時間太緊迫了,不的不快速觀看,只能等以後拐回來再細細品味了。本章的難點再下載中間件,實際上跟django差不多,但是仍然需要認真聽才能聽懂,而且要結合自己敲代碼聯系。這樣就能夠很好掌握了。其它的應用方面就簡單多了,可以快速瀏覽,知道功能和使用方法,聯系的時候可以隨時翻筆記完成。對與時間緊迫的小夥伴們來說,還是挑重點學習更好
2,本節的知識點總結:
總結:
1. 安裝scrapy
linux安裝 pip3 install scrapy
windows安裝 pip3 install wheel 下載twisted http://www.lfb.uci.edu/~gohlke/pythonlibs/#twisted pip3 install Twisted-18.4.0-cp36-cp36m-win_amd64.whl 安裝scrapy Pip3 install scrapy 安裝pywin32 Pip3 install pywin32
2. scarpy 的基本使用
創建project scrapy startproject day710 #創建一個項目 d day 710 #進入項目目錄 scrapy genspider example example.com 創建要爬取的網站的文件 scrapy crawl chouti --nolog # 運行起來 設置初始url(默認設置好的)
response.text 就是爬取到的內容 然後進行解析
from scrapy.selector import HtmlXPathSelector #導入內部解析器
解析: 標簽對象:xpath(‘/html/body/url/li/a/@href‘) 列表: xpathe(‘/html/body/url/li/a/@href‘).extract() 值: xpathe(‘/html/body/url/li/a/@href‘).extract_first()
3. 爬蟲的的架構
Scrapy主要包括了以下組件:
- 引擎(Scrapy)
用來處理整個系統的數據流處理, 觸發事務(框架核心) - 調度器(Scheduler)
用來接受引擎發過來的請求, 壓入隊列中, 並在引擎再次請求的時候返回. 可以想像成一個URL(抓取網頁的網址或者說是鏈接)的優先隊列, 由它來決定下一個要抓取的網址是什麽, 同時去除重復的網址 - 下載器(Downloader)
用於下載網頁內容, 並將網頁內容返回給蜘蛛(Scrapy下載器是建立在twisted這個高效的異步模型上的) - 爬蟲(Spiders)
爬蟲是主要幹活的, 用於從特定的網頁中提取自己需要的信息, 即所謂的實體(Item)。用戶也可以從中提取出鏈接,讓Scrapy繼續抓取下一個頁面 - 項目管道(Pipeline)
負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化實體、驗證實體的有效性、清除不需要的信息。當頁面被爬蟲解析後,將被發送到項目管道,並經過幾個特定的次序處理數據。 - 下載器中間件(Downloader Middlewares)
位於Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請求及響應。 - 爬蟲中間件(Spider Middlewares)
介於Scrapy引擎和爬蟲之間的框架,主要工作是處理蜘蛛的響應輸入和請求輸出。 - 調度中間件(Scheduler Middewares)
介於Scrapy引擎和調度之間的中間件,從Scrapy引擎發送到調度的請求和響應。
Scrapy運行流程大概如下:
- 引擎從調度器中取出一個鏈接(URL)用於接下來的抓取
- 引擎把URL封裝成一個請求(Request)傳給下載器
- 下載器把資源下載下來,並封裝成應答包(Response)
- 爬蟲解析Response
- 解析出實體(Item),則交給實體管道進行進一步的處理
- 解析出的是鏈接(URL),則把URL交給調度器等待抓取
4.post/請求頭/cookie 去重 中間件
post/請求頭/cookie 自動登陸抽屜 先訪問一個頁面 拿到cookie 原始的cookie print(response.headers.getlist(‘Set-Cookie‘)) 解析的cookie Cookie = cookieJar() cookie.extract_cookies(response,response.request) cookie_dic={} fork,vincookie._cookies.items(): fori,jinv.items(): form,ninj.items(): self.cookie_dic[m]=n.value print(self.cookie_dic) req=Request( url=‘http://dig.chouti.com/login‘, method=‘POST‘, headers={‘Content-Type‘:‘application/x-www-form-urlencoded;charset=UTF-8‘}, body=‘phone=8613503851931&password=abc1234&oneMonth=1‘, cookies=self.cookie_dic, callback=self.parse_check, ) yieldreq 利用meta={‘cookiejar‘:True} 自動操作cookie defstart_requests(self): forurlinself.start_urls: yieldRequest(url=url,callback=self.parse_index,meta={‘cookiejar‘:True}) req=Request( url=‘http://dig.chouti.com/login‘, method=‘POST‘, headers={‘Content-Type‘:‘application/x-www-form-urlencoded;charset=UTF-8‘}, body=‘phone=8613503851931&password=abc1234&oneMonth=1‘, meta={‘cookiejar‘:True}, callback=self.parse_check, ) Yield req 開啟關閉cookie 配置文件裏 #COOKIES_ENABLED=False 避免重復訪問 scrapy默認使用 scrapy.dupefilter.RFPDupeFilter 進行去重,相關配置有: 1 DUPEFILTER_CLASS = ‘scrapy.dupefilter.RFPDupeFilter‘ 2 DUPEFILTER_DEBUG = False 3 JOBDIR = "保存範文記錄的日誌路徑,如:/root/" # 最終路徑為 /root/requests.seen 來自 <http://www.cnblogs.com/wupeiqi/articles/6229292.html> 中間件 對所有請求在請求的時候自動添加請求頭 配置 DOWNLOADER_MIDDLEWARES={ ‘day710.middlewares.Day710DownloaderMiddleware‘:543, }
先寫這麽多 待更新
路飛學成-Python爬蟲實戰密訓-第3章