有關webscraper的問題,看這個就夠了

huangbangqing12發表於2019-01-10

視訊教程:https://study.163.com/course/introduction/1209047816.htm

可能有朋友不知道webscraper,我再介紹一下:webscraper 一一款谷歌外掛,可以方便的抓取網頁上的內容:文字、連結、圖片、表格等,而無需寫一行程式碼

webscraper有如下優點——

  1. 免費
  2. 不受作業系統限制,只要安裝Chrome瀏覽器即可執行
  3. 操作簡單,易上手。(很多沒有技術背景的同學,都可以快速學會)
  4. 功能強大:不僅可以抓靜態網頁,對於js動態載入的資料,也很容易抓取

根據已經測試的經歷,下列型別網站均可抓取——

  1. 58同城、大眾點評、美團、鏈家等
  2. 微信公眾號、簡書、知乎、部落格等
  3. 淘寶、阿里巴巴、網易嚴選等

可以在瀏覽器檢視到的資料,95%均可抓取。

你可能會問,那剩下的5%是什麼呢?—— 等你遇到再說吧,如果遇不到,那對你來說,就是100%了[微笑]


一、常見問題

1、下載了webscraper安裝包,但是無法安裝,怎麼辦?

如果你無法科學上網,可以從連結: https://pan.baidu.com/s/1eTn8up8 密碼: jpqy下載webscraper安裝包。

下載好以後,將此安裝包,拖到chrome://extensions/頁面,按照提示安裝即可。

提示:!!下載好的安裝包,不能直接雙擊安裝

2、webscraper安裝好後,開啟沒有看到工作介面,怎麼辦?

有的同學,webscraper安裝成功,然後在瀏覽器點選 “右鍵” ----> “檢查”後,出現如下介面。

 

紅框處,沒有出現webscraper的入口。

解決方案:將開發者工具,除錯成 底部 模式,操作步驟如下圖——

 

調成“底部”模式後,就正常了,如下圖——

 

3、第一個例子,抓取知乎張佳瑋的文章列表,為什麼結果順序和網站不一樣?

webscraper抓取資料的結果,預設是無序。若是想要結果變的有序,需要安裝CouchDB,這點在第三次分享中有講到。

4、知乎張佳瑋的文章總共有30多頁,幾百條資料,為什麼我只抓到了20條?

因為你抓取的是單頁資料,所以只有20條。
如何抓取多頁,在第二次分享中有講到。

5、資料下載到本地後,用excel開啟後為什麼是亂碼?

這是由於你excel的編碼問題,解決方案:百度“excel開啟亂碼”,有很多方法。

6、我想抓取多條記錄,但為什麼結果只有一條?

你沒有勾選Multiple

7、data preview的時候有多條資料,但實際為什麼只抓到幾條?

你可能忘記設定 delay 了,或者需要將 delay 增大一點,這點你需要根據自己的網路狀況調整一下。

8、data preview的時候有資料,但scrape的時候卻沒有結果?

3種可能情況——
1)你選中了網頁元素,但是沒有點選“Done selecting",也就是沒有完成最後一步,正確選中網頁元素後,在Selector最右邊,會出現一段「程式碼」,有了這段「程式碼」才代表選中元素完成。

image.png


2)選擇器沒選對,這個就比較複雜了,需要根據實際情況分析
3)網站有反爬蟲,所以無法實際抓取

 

9、抓取圖片時,開始抓取後,就不工作了,一直卡在那裡

2種可能情況——
1)網路問題:關閉這個彈出視窗,重新抓取
2)下載的圖片數量太大,瀏覽器卡死、崩潰

提示:webscraper 不適合下載大量圖片;
百度搜尋圖片、搜狗搜尋圖片都有反爬,不能下載。

10、想選中某個元素,但一點選就會跳轉,怎麼解決?

跳轉問題,第三次分享有講到。如果著急,可以自己摸索一下,點選下圖這個 enable key,然後出現 spc 鍵,將滑鼠移動到你要點選的地方,按下 s 鍵

 

11、抓取的內容除了excel,可以匯出為其他格式嗎?

不可以,webscraper暫時只支援匯出excel

12、有時候點選 create sitemap按鈕沒反應,怎麼回事?

這種情況一般出現在,安裝並啟用 CouchDB 後。

解決方法:開啟 CouchDB,重啟瀏覽器。

原理:建立 sitemap,本質就是將 sitemap name 和 start url 這兩條資料儲存到磁碟上,但現在儲存不了,說明你和磁碟中間的儲存過程出現問題。

而你現在用的是 CouchDB 儲存資料,說明 CouchDB 這一步有問題,而 CouchDB 資料庫一般不會出問題,所以問題就是你沒有開啟 CouchDB,需要手動開啟 CouchDB。

CouchDB 是一個基於 js 的資料庫,需要和瀏覽器互動,所以你需要讓瀏覽器知道,你開啟了 CouchDB,所以這時候,如果建立 sitemap 還不成功,就需要重啟瀏覽器,讓它知道,哦,現在 CouchDB 已經啟動了,我可以用它了。

13、為什麼我的excel裡面部分列內容和教程裡的不一樣?

大家安裝的 webscraper 方式不同,版本也可能不同。所以結果顯示可能有所差別,但是差別肯定不會影響到真實資料。

可能就是多了一列 web-scraper-start-url,或者少了這一列。或者其他。這些都不是大問題。

大家自己根據實際情況,不要覺得和教程裡面的結果不一樣,就覺得自己的資料有問題。

遇到不一樣的地方,不要著急,先檢視哪裡不一樣,然後分析下不同之處的意義。

如果不同之處只是一些 “通識” 性的資訊,比如 start URL、或者頁碼數、或者其他,而自己需要的資料抓取到了,就說明那些不同之處是軟體自動附帶的,可能為的是更清楚的表明資料的來源或者其他。

14、為什麼抓取完成後,什麼也沒有,顯示“No data scraped yet”?

最近幾天,發現 webscraper 的一些細節功能發生了變化,原來是 12 月 22 日更新了新版本,有了一些新變化,具體細節如下:

1)抓取 image 的時候,“Download image” 這個選項消失了。如圖一。
2)點選 “scrap" 以後的設定介面,原來的預設值有了變化,從 5000 變為 2000。如圖二
3)抓取完畢後,不會直接顯示資料,需要點選一個”refresh“這個按鈕,如圖三
4)抓取結果中,多了一列 “web-scraper-order”,暫時不清楚用途。如圖四

我暫時只發現這些變化,但是這些變化都不影響我們的資料結果。大家可以忽略。

可能有的人的 webscraper 版本沒有這些變化,那就忽略就行了。

 

 

 

 

image.png

15、抓取圖片沒有“Download image”選項,怎麼辦?

之前說過 webscraper 的最新版本去除了 “Download image" 選項,也就是批量下載圖片的功能,最新版本現在只能抓取圖片連結。
解決方案有 2 種——
1、批量抓取到圖片的連結,然後使用迅雷等下載工具批量下載。
2、解除安裝掉最新的 webscraper,安裝老版本,可以從這裡下載,連結: 連結:百度網盤 請輸入提取密碼 密碼: i7e9

老版本依然是有”Download image" 這個選項的。

注意不要科學上網,否則 webscraper 可能會自動更新到最新版本。

16、安裝CouchDB後,http://127.0.0.1:5984/_utils/ 為什麼打不開?

配置 couchDB 時 當在網頁輸入連結連結:http://127.0.0.1:5984/_utils/ 時,如果發生網頁崩潰或打不開要求介面時,只需開啟下載的檔案 couchdb-2.1.1

 

如果安裝過程出現下面圖片錯誤,說明你的系統版本和軟體版本不相容。 你需要下載 32 位的版本, 連結:連結:百度網盤 請輸入提取密碼 密碼: apet 下載安裝成功後,需要開啟 CouchDB 軟體。 嗯,是的軟體安裝好,還要 “開啟”。之前遇到很多朋友,沒有開啟 CouchDB。之後訪問連結:連結:http://127.0.0.1:5984/_utils/ 才會正常。

 

17、資料抓取下來了,但是錯位,怎麼回事?

資料錯位,是因為你沒有建立子選擇器。
你應該新建一個Element作為父選擇器,把要抓取的資訊,作為子選擇器。這樣抓取的資訊就不會錯位。

二、抓取網站的思路

1、如果要抓取的資料有多頁,我該用哪個分頁方式?

抓取多頁資料,翻頁方式按照以下優先順序:
1)規律分頁:首先分析url是否規律
如果有規律——使用規律分頁
如果沒有規律,看第2條——

2)如果是js動態載入,繼續分析是哪一種:
如果是「下拉載入更多」方式,則使用Element scroll down。
如果是「點選載入更多」方式,則使用Element click,Click type選擇「click more」,Click element uniqueness選擇「unique CSS Selector」。
其餘情況看第3條——

3)如果點選翻頁按鈕時,網頁的 url沒有變化,或者 url只有#後面的部分發生變化,比如:https://weibo.com/5745019302/DCC6EAQdO?type=comment#_rnd1519785953991
那麼這時候,使用Element click,Click type選擇「click once」,Click element uniqueness選擇「unique Text」。

4)如果以上方式都不屬於你遇到的翻頁方式,則使用最後一種「迴圈翻頁」,適用型別:頁面的翻頁按鈕本身就是一個url,這個url指向按鈕所示的那頁

具體原理及方法在第三次分享裡有講到。

我也總結了一個sitemap,大家可以複用一下:

分享一個抓取百度搜尋關鍵字,所有結果的標題和詳情頁連結的 sitemap。 嗯,是所有頁面,你搜到多少頁,就抓多少頁。這是個無限迴圈的抓取。 不過有個小 bug,就是他會在最後兩頁的時候,來回重複抓。也就是前面所有頁抓完後,重複的抓最後兩頁,建議你到最後的時候,手動中斷程式,然後匯出資料。
'''
{"_id":"baidu","startUrl":" 連結:https://www.baidu.com/s?wd=%E6%AF%94%E7%89%B9%E5%B8%81&pn=0&oq=%E6%AF%94%E7%89%B9%E5%B8%81&tn=baiduhome_pg&ie=utf-8&usm=3&rsv_idx=2&rsv_pq=c789a61d0005f45c&rsv_t=1cd9H90S6andIWLAmJXh9Q7QV8IK940mPN%2B7Fyi4G6aHwXrxXQOwM%2Bns3%2FGsE4oUOjlH","selectors":[{"parentSelectors":["_root","pagination"],"type":"SelectorElement","multiple":true,"id":"total","selector":"h3.t a","delay":"2000"},{"parentSelectors":["total"],"type":"SelectorText","multiple":false,"id":"title","selector":"parent","regex":"","delay":""},{"parentSelectors":["total"],"type":"SelectorLink","multiple":false,"id":"detail","selector":"parent","delay":""},{"parentSelectors":["_root","pagination"],"type":"SelectorLink","multiple":true,"id":"pagination","selector":"div#page a","delay":"2000"}]}
'''
如何應用到自己想要搜尋的目標呢? 很簡單,直接百度搜尋關鍵字,將第一頁的 url 作為 start url 替換掉我的即可。

2、選擇器可以聯合使用嗎?

可以,而且一般情況下,經常需要多個選擇器一起使用,才能達到更好的效果。

兩種方式——

串聯

比如

  • Element ——> Text(link)(Element)
  • Element scroll down ——> Text(link)(Element)
  • Element click ——> Text(link)(Element)

並聯

Element Click 和 Element scroll down

下面是案例: 抓取簡書首頁所有文章標題(當然你也可以抓連結,抓評論數,點贊數,我只是選一個簡單的說明一下方法)。

目標網站:連結:簡書 - 創作你的創作

先說說這個網站抓取的難點:
1、進入網站後,會顯示一部分文章。
2、如果需要檢視更多文章,則需要向下滑動滑鼠。
3、滑動滑鼠顯示更多文章後,會出現一個 “閱讀更多” 的按鈕。如圖 1. 這時候滑動滑鼠就沒用了,需要點選 “閱讀更多” 按鈕才能檢視更多文章。

再說說用 webscraper 抓取的方法: Element scroll down + Element Click + Text 。

可以看到,抓取這個網站的標題,需要套用多個選擇器。而且其中有兩個配置項較多的 Element 選擇器。

下面是 sitemap(兩個 3 引號之間):
'''
{"_id":"aaa","startUrl":[" 連結:簡書 - 創作你的創作],"selectors":[{"id":"aaa","type":"SelectorElementScroll","selector":"a.title","parentSelectors":["_root"],"multiple":true,"delay":"5000"},{"id":"ccc","type":"SelectorElementClick","selector":"a.title","parentSelectors":["_root"],"multiple":true,"delay":"5000","clickElementSelector":"a.load-more","clickType":"clickMore","discardInitialElements":false,"clickElementUniquenessType":"uniqueCSSSelector"},{"id":"fff","type":"SelectorText","selector":"parent","parentSelectors":["ccc"],"multiple":false,"regex":"","delay":0}]}
'''
selector 樹如圖二。
aaa:Element scroll down
bbb:Element Click
ccc:Text

大家從 selector 樹可以看到,aaa 是個 Element 選擇器,但是卻沒有子選擇器。 是的,這裡是這個案例的一個特殊的地方。Element scroll down(aaa)選擇器不是為了抓取資料,而是為了輔助顯示資料。因為這個網站一開始需要 “滑動滑鼠” 才能顯示更多。

真正抓取資料的是 Element Click(bbb) 選擇器下的 ccc 選擇器。

這裡的 aaa 和 bbb 是並列的,因為測試中發現,Element Click 和 Element scroll down 串聯的話,始終無法抓取到資料,因為這兩個選擇器串聯的話,哪個在前,哪個在後,該選多大區域,實在不好選。大家可以下去試試。


總結,以後遇到這類網站:需要載入更多,和 “點選載入更多” 兩種結合的網站。可以使用這種方法。

使用 Element scroll down 輔助顯示資料,不建立子選擇器。
使用 Element Click 抓取資料,建立 Text 或者選擇器。


以上,就是一些經常遇到的問題,如果大家還有什麼疑惑,可以留言,我會逐一回答。如果問題比較典型,我會單獨整理成文,釋出出來。

相關文章