Scrapy框架主要由五大組件組成,分別是調度器(Scheduler)、下載器(Downloader)、爬蟲(Spider)和實體管道(Item Pipeline)、Scrapy引擎(Scrapy Engine);
調度器:可以假設成一個URL的優先隊列,由它來決定下一個要抓取的網址是什么,同時去除重復的網址;
下載器:是所有組件中負擔最大的,用于高速地下載網絡上的資源;
爬蟲:是用戶最關心的部份,用戶定制自己的爬蟲,用于從特定的網頁中提取自己需要的信息,也可以從中提取出鏈接,讓Scrapy繼續抓取下一個頁面;
實體管道:用于處理爬蟲提取的實體,要的功能是持久化實體、驗證實體的有效性、清除不需要的信息;
Scrapy引擎:是整個框架的核心,用來控制調試器、下載器、爬蟲,實際上引擎相當于計算機的CPU,控制著整個流程;
第一步:首先要使用scrapy框架需要先安裝它,可以使用pip安裝scrapy框架,注意如果在Windows系統下直接使用pip命令行安裝可能會報錯,這時需要手動安裝幾個依賴庫如wheel、lxml、Twisted、pywin32等,報錯信息會提示你缺少哪個庫。
這里提一下Twisted插件的安裝,它的下載地址為:https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted, 進入后找到twisted,選擇下載對應的版本,其中cp表示python版本,下載完成后進入終端,輸入pip install Twisted-19.2.0-cp37-cp37m-win_amd64.whl
,這里注意你下載的是哪個版本就輸入哪個版本的文件名,安裝完成后再輸入pip install scrapy
就能成功安裝scrapy框架了;
第二步:創建爬蟲項目,創建儲存 scrapy 文件夾scrapy_python,然后在命令行工具中cd進入這個項目路徑,用 scrapy startproject 名稱
命令新建項目;
這樣我們就成功的創建了一個scrapy項目,我們在PyCharm中看看
第三步:可以在剛剛創建的項目的spiders文件夾中創建一個蜘蛛文件,用于爬取網頁數據的,我們試著爬取一下csdn網站,那么新建蜘蛛的命令行是:scrapy genspider csdn www.csdn.net
,其中csdn是你創建的蜘蛛的文件名,而www.csdn.net
表示爬取的目標網址的域名,你想爬取哪個網站就使用哪個網站的域名。
第四步:如果要啟動我們創建的蜘蛛文件,我們可以使用命令行:scrapy crawl csdn
,這里的csdn
是蜘蛛文件中name的對應值;
第五步:想要測試爬去數據是否成功,我們可以在項目的模板中創建一個測試文件,如:start_spider.py,然后通過debug來進行項目調試,可以輸出我們想要爬取的網頁數據;
fromscrapy.cmdlineimportexecuteexecute(["scrapy","crawl","csdn",])
第六步:爬取數據時需要遵循爬蟲協議,它用來限定爬蟲程序可以爬取的內容范圍,位于scrapy 項目的 settings.py文件中默認 ROBOTSTXT_OBEY = True
,即遵守此協議,當我們想要爬取的內容不符合該協議但仍要爬取時,可以設置 ROBOTSTXT_OBEY = False
,表示不遵守此協議;
第七步:這樣我們就可以開始使用Xpath選擇器或者CSS選擇器來解析想要爬取的頁面數據了;
XPath的全稱是XML Path Language,即XML路徑語言,它是一種在結構化文檔中定位信息的語言,XPath使用路徑表達式來選取XML文檔中的節點或節點集。節點是通過沿著路徑 (path) 或者步 (steps) 來選取的;
謂語用來查找某個特定的節點或者包含某個指定的值的節點,謂語嵌在方括號中,比如//body//a[1]
表示選取屬于body 子元素的第一個 a 元素,//a[@href]
表示選取所有擁有名為 href 的屬性的 a 元素等;
除了索引、屬性外,Xpath還可以使用便捷的函數來增強定位的準確性,如contains(s1,s2)
表示如果s1中包含s2則返回true,反之返回false、text()
表示獲取節點中的文本內容、starts-with()
表示從起始位置匹配字符串;
使用XPath選取節點的常用語法有
表達式書寫方式 | 表達式意義 |
---|---|
* | 選擇HTML頁面中任意的節點 |
/ | 從根節點選取 |
// | 從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置 |
. | 選取當前節點 |
.. | 選取當前節點的父節點 |
/bookstore/book[1] | 選取屬于 bookstore 子元素的第一個 book 元素 |
/bookstore/book[last()] | 選取屬于 bookstore 子元素的最后一個 book 元素 |
/bookstore/book[last()-1] | 選取屬于 bookstore 子元素的倒數第二個 book 元素 |
//title[@lang] | 選取所有擁有名為 lang 的屬性的 title 元素 |
//title[@lang=’eng’] | 選取所有 title 元素,且這些元素擁有值為 eng 的 lang 屬性 |
/bookstore/book[price>35.00] | 選取 bookstore 元素的所有 book 元素,且其中的 price 元素的值須大于 35.00 |
/bookstore/book[price>35.00]/title | 選取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值須大于 35.00 |
//* | 選取文檔中的所有元素 |
//title[@*] | 選取所有帶有屬性的 title 元素 |
//book/title , //book/price | 選取 book 元素的所有 title 和 price 元素 |
//title , //price | 選取文檔中的所有 title 和 price 元素 |
child::book | 選取所有屬于當前節點的子元素的 book 節點 |
child::text() | 選取當前節點的所有文本子節點 |
/bookstore/book/title | 選取所有 title 節點 |
/bookstore/book/price/text() | 選取 price 節點中的所有文本 |
//* | 任意元素 |
我們來通過XPath選擇器爬取網站中我們想要爬取的信息,如下圖我們來爬去今日推薦中的標題
importscrapyclassCsdnSpider(scrapy.Spider):name='csdn'allowed_domains=['www.csdn.net']start_urls=['http://www.csdn.net/']defparse(self,response):#選擇所有class="company_name"的h4元素下的a元素的文本result=response.xpath('//h4[@class="company_name"]/a/text()').extract()#將得到的文本列表循環foriinresult:print(i)
我們來看一下輸出打印,看看是不是我們想要的結果
到此,關于“scrapy框架的簡單介紹”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注本站網站,小編會繼續努力為大家帶來更多實用的文章!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
(相關資料圖)提起joy什么意思大家在熟悉不過了,被越來越多的人所熟知,那你知道joy什么意思嗎?快和小編一起去了解一下吧!1、joy的意思是:高興;愉快;喜悅;令人高興的人(或事);成功;滿意;滿足。2、詞義辨析:joy,delight,pleasure這三個詞的共同意思是“愉快”或“高興”。其區別是:delight指“喜悅”或“高興”,多表示突然、短暫的喜悅;pleasure指“愉快”,是一般...
【資料圖】提起廣州黃大仙廟在哪里大家在熟悉不過了,被越來越多的人所熟知,那你知道廣州黃大仙廟在哪里嗎?快和小編一起去了解一下吧!地址:廣州芳村區花地村古祠路1號。廣州黃大仙廟始建于清朝已亥年,即公元1899年,并于1904年得各界熱心人士捐款重修。當年這里地雖偏僻,但曾是廣州的宗教圣地之一,其香火鼎盛,對廣州市區及珠江三角洲一帶有極大的影響。當年神廟的正門,當街有一座樓,石柱、門樓頂均有花紋圖案裝...
(資料圖)關于cien是什么牌子的知識大家了解嗎?以下就是小編整理的關于cien是什么牌子的介紹,希望可以給到大家一些參考,一起來了解下吧!作為通用汽車公司技術旗艦的代表作,頂極V12動力的凱迪拉克Cien概念車將是2002年該品牌100周年紀念的最合適的展示作品。這輛引人注目、極具動感的Cien名稱源自西班牙語,是100的意思,將凱迪拉克的設計與技術完美的融合在一輛中置引擎、2座超級跑車中。...