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