目標
Scrapy簡介
Scrapy是壹個為了爬取網站數據,提取結構性數據而編寫的應用框架。可以應用在包括數據挖掘,信息處理或存儲歷史數據等壹系列的程序中。
使用過程創建壹個Scrapy項目定義提取的Item編寫爬取網站的 spider 並提取 Item編寫Item Pipeline 來存儲提取到的Item(即數據)
接下來的圖表展現了Scrapy的架構,包括組件及在系統中發生的數據流的概覽(綠色箭頭所示)。下面對每個組件都做了簡單介紹,並給出了詳細內容的鏈接。數據流如下所描述
Paste_Image.png
組件
Scrapy Engine引擎負責控制數據流在系統中所有組件中流動,並在相應動作發生時觸發事件。詳細內容查看下面的數據流(Data Flow)部分。調度器(Scheduler)調度器從引擎接受request並將他們入隊,以便之後引擎請求他們時提供給引擎。下載器(Downloader)下載器負責獲取頁面數據並提供給引擎,而後提供給spider。SpidersSpider是Scrapy用戶編寫用於分析response並提取item(即獲取到的item)或額外跟進的URL的類。每個spider負責處理壹個特定(或壹些)網站。更多內容請看 Spiders 。Item PipelineItem Pipeline負責處理被spider提取出來的item。典型的處理有清理、驗證及持久化(例如存取到數據庫中)。更多內容查看 Item Pipeline 。下載器中間件(Downloader middlewares)下載器中間件是在引擎及下載器之間的特定鉤子(specific hook),處理Downloader傳遞給引擎的response。其提供了壹個簡便的機制,通過插入自定義代碼來擴展Scrapy功能。更多內容請看下載器中間件(Downloader Middleware)。Spider中間件(Spider middlewares)Spider中間件是在引擎及Spider之間的特定鉤子(specific hook),處理spider的輸入(response)和輸出(items及requests)。其提供了壹個簡便的機制,通過插入自定義代碼來擴展Scrapy功能。更多內容請看 Spider中間件(Middleware)。
三:實例分析
1.從網站的主頁進入最新鬥圖表情後網址是中,所以要加入allowed_domains的列表中content.xpath('//img/@data-original').extract()[i]中extract()用來返回壹個list(就是系統自帶的那個)裏面是壹些妳提取的內容,[i]是結合前面的i的循環每次獲取下壹個標簽內容,如果不這樣設置,就會把全部的標簽內容放入壹個字典的值中。filename ='doutu\\{}'.format(item['name'])+ item['img_url'][-4:]是用來獲取圖片的名稱,最後item['img_url'][-4:]是獲取圖片地址的最後四位這樣就可以保證不同的文件格式使用各自的後綴。最後壹點就是如果xpath沒有正確匹配,則會出現(referer: None)
4.配置settings.py,如果想抓取快壹點CONCURRENT_REQUESTS設置大壹些,DOWNLOAD_DELAY設置小壹些,或者為0.#-*- coding: utf-8-*-BOT_NAME ='ScrapyDoutu'SPIDER_MODULES =['ScrapyDoutu.spiders']NEWSPIDER_MODULE ='ScrapyDoutu.spiders'DOWNLOADER_MIDDLEWARES ={
5.配置middleware.py配合settings中的UA設置可以在下載中隨機選擇UA有壹定的反ban效果,在原有代碼基礎上加入下面代碼。這裏的user_agent_list可以加入更多。import randomfrom scrapy.downloadermiddlewares.useragent import UserAgentMiddlewareclass RotateUserAgentMiddleware(UserAgentMiddleware):
6.到現在為止,代碼都已經完成了。那麽開始執行吧!
scrapy crawl doutu
之後可以看到壹邊下載,壹邊修改User Agent。
五:總結
學習使用Scrapy遇到很多坑,但是強大的搜索系統不會讓我感覺孤單。所以感覺Scrapy還是很強大的也很意思,後面繼續學習Scrapy的其他方面內容。
github地址加群
學習過程中遇到什麽問題或者想獲取學習資源的話,歡迎加入學習交流群
,我們壹起學Python!