您好,登錄后才能下訂單哦!
最近看到很多同學都在研究爬蟲,然后我想到了一款塵封已久的插件,很早之前在我剛接觸爬蟲的時候用過,不過自從上了python爬蟲過后,慢慢就擱置了,今天花時間擼一篇教程,給同學們安利這款插件,如果剛開始學爬蟲,它一定是你通往人生巔峰的不二人選哦!
廢話不多說,這款插件全名叫webscraper,適用于chrome瀏覽器,今天爭取用一篇文章帶大家掌握webscraper的核心要點,好了,開始我們今天的webscraper探索之旅!
一:安裝webscraper
首先下載插件,百度搜webscraper有很多資源,這里就不做過多介紹了,文末給大家附上網(wǎng)盤鏈接,大家也可以自行下載,下載過后,將插件包進行解壓,解壓完成后,下一步就是在chrome瀏覽器導入啦!
step 1(更多工具-->擴展程序):
step 2(加載插件包):
在擴展程序頁面,點擊加載已解壓的擴展程序,選擇剛剛解壓好的插件包,至此,即可成功導入webscraper插件,加載完后,記得選擇啟用該插件哈,如下圖的位置,啟用過后,webscraper的圖表就會展示在瀏覽器的工具欄上,至此即說明webscraper導入成功!
瀏覽器上顯示webscraper圖標,即可說明該插件導入成功!可正常使用了!
二:構造一個完整的爬蟲流程
插件安裝完成后,接下來我們來用webscraper構建一個完整的爬蟲項目:
step 1(create sitemap):
首先,打開webscraper配置框,有兩種方式,一種是鼠標右鍵,選擇檢查,打開開發(fā)者工具,另一種直接按F12快捷啟動開發(fā)者工具,如下圖所示,在開發(fā)者工具的欄目里,我們選擇webscraper,即可進入webscraper的主配置框。
打開后,第一步,我們先創(chuàng)建爬蟲站點,點擊create new sitemap,選擇create sitemap,在配置框里配置sitemap name 以及 start url,其中start url為爬蟲的起始頁,配置如下圖所示,再點擊下方的create sitemap,即可成功創(chuàng)建。我們在這里以CSDN為例,創(chuàng)建一個name為csdn,starturl為https://www.csdn.net/的sitemap。
step 2(Add selector):
創(chuàng)建好sitemap后,第二步則創(chuàng)建selector,selector為爬取數(shù)據(jù)的選擇器,需要通過它來選擇我們想要抓取的數(shù)據(jù)
我們來看Add selector有哪些需要配置的屬性:
ID:選擇器ID,給選擇器命名
Type:選擇器抓取的數(shù)據(jù)屬性,有Text、Link、image、table、HTML、element等多種類型,我們一般常用的就是Text、link、element這幾種類型。
selector:選擇抓取元素,點擊select,然后鼠標選擇我們想要抓取的元素位置即可,鼠標選中后,頁面上會進行高亮顯示,高亮框則是我們要抓取的元素,效果如下圖,具體返回的數(shù)據(jù)視我們選擇的type而定,如果type選擇的是text,則返回選中區(qū)域類的文本數(shù)據(jù),如果選擇的是link,則返回鏈接,如果選擇的是element,則會將整個區(qū)域的所有元素進行返回。
如果要選擇有相同規(guī)律的列表數(shù)據(jù),比如在這里,我們想選擇這一列所有文章的標題,我們只需要連續(xù)選擇兩個標題區(qū)域,selector就能自動識別到我們要抓取的元素,把其他結構一致的元素區(qū)域選中,效果如下圖所示:
element preview:選擇完過后,點擊element preview可預覽下所選擇的元素,看是否選擇正確。
data preview:點擊data preview,可預覽返回的文本數(shù)據(jù)。
multiple:選擇是否多選,在前面我們已經(jīng)說過如何通過selector選擇具有相同規(guī)律的元素,但是選擇出來還不足夠,我們還需要勾選multiple,這樣才能真正的抓取多行數(shù)據(jù)。
Regex:正則表達式,從我們抓取的文本數(shù)據(jù)里面再進行正則匹配。
Delay:選擇器生效前的延遲時長,主要擔心受網(wǎng)速影響,頁面還沒加載完就開始抓取,容易抓取空數(shù)據(jù)。
parent selectors:為該選擇器選擇父選擇器,構造樹形結構,特別是在構造循環(huán)抓取結構的場景經(jīng)常會用到parent selectors的配置。
在這里,我們用selector抓取csdn.net首頁文章列表的標題,配置內(nèi)容如下,點擊save selector即可保存該抓取器。如果想要抓取其他的數(shù)據(jù),按照此種方式配置多個selector即可。
step 3(start scrapy):
設置好selector后,這時我們就可以開始抓取數(shù)據(jù)了,按下圖方式選擇scrape,開始爬取之前,有兩個參數(shù)需要設置:
Request interval(ms):默認值2000ms,即每兩次請求之間的間隔。
Page load delay(ms):默認值500,等待頁面的加載時長。
點擊start scraping,即可開始正式爬取數(shù)據(jù),爬取完后,爬取的數(shù)據(jù)會顯示在窗口,如果要將數(shù)據(jù)導出到csv,選擇Export data as CSV-->點擊download now,即可將剛才抓取的數(shù)據(jù)導出到CSV。
至此,整個完整的爬蟲項目就構建完成了,是不是很簡單!接下來,我們再看下爬蟲常見的應用場景,用webscraper如何解決吧!
三:抓取多級數(shù)據(jù)
在構建了一個簡單的csdn文章標題抓取項目后,有同學說,我想再抓取一個作者信息,于是嘗試著構建一個author的selector,構建完成后,爬取完過后,竟然發(fā)現(xiàn)title跟author對不上,如下圖所示,什么情況,難道是selector設置的不對么,但是明明看到了author信息也被抓取下來了?。?/p>
這個問題也是初學者經(jīng)常所遇到的第一個坑哈!webscraper的selector之間是互相獨立的,也就是說,你分別構建的title selector和author selector分別獨立的再進行工作,根本就沒有存儲他們之間一一對應的關系,所以到最后,看到混亂的數(shù)據(jù)結果也就再正常不過啦!
解決方法也很簡單,就是應用selector的多級結構,第一級selector抓取整個元素,元素中包含title跟author信息,然后再構建這個元素的子selector,子selector從元素里面再獲取title和author。
首先構建父級selector,這里的type需選擇Elements,選擇區(qū)需要選擇包含title和author的整個選擇區(qū)。
接著,第二步,構建子selector,從父selector點擊進去,即可進入子selector的配置框,接著分別配置title和author兩個selector即可。
配置子selector需要注意兩點,第一,multiple不能再勾選,這里只是對單個元素再次進行解析。第二就是,在選擇子selector的時候,要在標黃的區(qū)域框進行選擇,標黃的區(qū)域即是父selector選擇的元素區(qū)域。
設置好后,再進行抓取,這次,終于看到我們的數(shù)據(jù)恢復正常啦!
還有種多級頁面抓取場景是進入到二級頁面繼續(xù)抓取數(shù)據(jù),在本場景,我們想點開每一個文章,然后抓取文章的詳情內(nèi)容,這種場景又怎么實現(xiàn)呢?
利用多級結構也能輕松實現(xiàn),我們首先構建一個抓取文章鏈接的子selector,然后在該鏈接selector之下再構建子selector,這時的子selector抓取的元素就變成了該鏈接的詳情文章頁面了。按照常規(guī)的配置方式,我們再配置抓取文章詳情的selector即可。
第一步,先構建鏈接selector,這里抓取的是鏈接,selector type需要選擇link,我們這里構建了一個名為href的selector。
第二步,進入到href selector的子selector配置頁面,配置文章詳情頁的抓取內(nèi)容,這里我們構建了文章詳情頁里的title和content兩個選擇器。
構建完成后,我們來看下整個抓取結構,可通過selector graph來查看,整個抓取結構呈三級結構,第一級為elements的抓取,主要是解決數(shù)據(jù)一一映射的問題,第二級為子頁面抓取,通過鏈接構建子selector來實現(xiàn)。
至此,我們的子頁面抓取配置完成。
四:翻頁場景的設計模式
我們前面講述的都是抓取單頁內(nèi)容,但是實際情況中,翻頁場景比比皆是,因為一頁所展示的數(shù)據(jù)有限,我們需要通過翻頁來獲取更多的數(shù)據(jù),對于這種場景,我們首先介紹一種通過改變URL來獲取翻頁數(shù)據(jù)的方法,來看這個例子。
這是億歐新聞網(wǎng)站,我們可以發(fā)現(xiàn)一個規(guī)律,當我們切換頁面的時候,它的url會隨著頁數(shù)而發(fā)生變化,這種有規(guī)律的翻頁場景,我們可以通過設置starturl來實現(xiàn),如下的設置方式表示在1到100進行輪詢,間隔為1。
那對于一些無規(guī)律的翻頁場景呢,我們又有哪些翻頁設計模式可以參考呢?常規(guī)的做法我們可以利用循環(huán)嵌套抓取結構來實現(xiàn)翻頁抓取,還是以億歐網(wǎng)站為例,我們來看如何設計一個循環(huán)嵌套抓取結構。
首先在一級selector增加一個獲取下一頁鏈接的selector。該next selector獲取當前頁面的下一頁鏈接。elements selector獲取當前頁面的元素。
接著,我們分別配置elements和next的父節(jié)點,next的父節(jié)點除了root以外,我們將next自身也添加為父節(jié)點。
elements的父節(jié)點除了root以外,我們也將next添加為父節(jié)點。
最后,我們來看下整個抓取結構圖,如下所示,點擊next,可以看到整個結構會無限循環(huán)下去,通過這種方式,我們就可以構建一個通用的翻頁循環(huán)抓取結構!
五:滾動加載場景的設計模式
通過點擊下一頁來翻頁是比較常見的翻頁方式,除此以外,我們還會經(jīng)??吹酵ㄟ^滾動來加載更多數(shù)據(jù)的場景,這種場景我們又該如何解決呢?
其實很簡單,webscraper已經(jīng)幫我們設計好了這種元素類型,即selector type里的elements scroll down,在選擇type時,將之前的elements換成這個類型即可,其他配置方式保持不變,我們即可以實現(xiàn)滾動加載數(shù)據(jù)的抓取。
六:點擊加載場景的設計模式
最后再來說說另外一個點擊加載數(shù)據(jù)的場景吧!我們經(jīng)常會遇到有的場景,需要點擊查看更多才能加載更多的數(shù)據(jù),這種場景怎么解決呢?
當然少不了我們強大的webscraper啦!webscraper提供了一種type類型,即elements click,可以輕松解決此類問題,接下來讓我們看一個具體的實例,我們以億歐網(wǎng)站為例,打開快訊欄目,我們可以看到如果要獲取更多數(shù)據(jù)的話,必須點擊查看更多才會加載。
與滾動加載場景一樣,我們在一級selector設置element click 的選擇器,配置內(nèi)容如下:
id:選擇器名稱
type:選擇elements click
selector:選擇需要抓取的元素,與之前設置方式一致,選擇元素即可
click selector:這里選擇查看更多的元素,也即我們點擊加載按鈕的元素。
click type:一種為click once,即同一個按鈕只點擊一次,一種為click more,同一個按鈕可點擊多次,直到按鈕發(fā)生變化為止。這里我們選擇click more,因為需要不斷點擊查看更多來獲取更多數(shù)據(jù)。
click element uniqueness:判定是否同一按鈕的條件,主要用于停止條件的判定,有以下四種類型可選擇:
Unique Text - 有同樣文本內(nèi)容的按鈕被視為同一按鈕
Unique HTML+Text - 有同樣 HTML 和文本內(nèi)容的按鈕被視為同一按鈕
Unique HTML - 有同樣 HTML 的按鈕被視為同一按鈕
Unique CSS Selector - 有同樣 CSS 選擇器的按鈕被視為同一按鈕
Discard initial elements(忽略初始元素)- 選擇器不會選中在第一次點擊按鈕前就已經(jīng)存在的元素。用在去重的場景
Delay:這里需要按照實際情況配置,如果等待加載的時間配置過短,很容易造成抓取不到數(shù)據(jù)的情況。
配置完click selector過后,接著在其二級子selector繼續(xù)配置想要抓取的數(shù)據(jù)即可。
至此,基本上常用的webscraper操作都介紹完了,掌握以上的方法,基本可以覆蓋80%左右的爬蟲場景。當然使用webscraper也主要是在一些小規(guī)模數(shù)據(jù)的抓取場景,如果要爬取較大規(guī)模的數(shù)據(jù),有較大概率會遇到站點的反爬措施,這時就只能上代碼解決啦!
伙伴們學習python爬蟲的有多少,舉個爪,評論回復:python爬蟲,領取全套python視頻教程!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。