來源:新浪眾測
作者:AppSo新酷應用
不知大家是否總能在朋友圈看到類似的廣告,『加班完成的 Excel 用 Python 只需 3 分鐘』、『每天都能準點下班只因學會了 Python』,似乎 Python 已經成為了當代年輕人的必備技能。
▲朋友圈廣告
的確,作為一門易於上手的程式語言,Python 在自動化辦公中用處巨大,特別是對於網頁數據的爬取,在這樣一個大數據時代顯得尤為重要。
爬取網頁數據,也可以稱為『網絡爬蟲』 ,能幫助我們快速搜集網際網路的海量內容,從而進行深度的數據分析與挖掘。比如抓取各大網站的排行榜、抓取各大購物網站的價格信息等。而我們日常用的搜尋引擎就是一個個『網絡爬蟲』。
但畢竟學習一門語言的成本太高了,有什麼辦法可以不學 Python 也能達到目的呢?當然有,藉助 Chrome 瀏覽器的《Web Scraper》插件,讓你在不用寫代碼的情況下,就能快速抓取海量內容。
懶人目錄
抓取頁面中多條信息——bilibili 排行榜為例
自動翻頁抓取——豆瓣電影 Top250 為例
抓取二級頁面內容——知乎熱榜為例
抓取頁面中的多條信息——BiliBili 排行榜為例
安裝《Web Scraper》後,在瀏覽器按 F12 進入開發者模式,就能在最後一個標籤頁看到《Web Scraper》的菜單。需要注意的是,如果開發者模式面板不在下方,則會提示必須將其放到瀏覽器下方才能繼續。
在菜單中選擇『Create new sitemap - Create sitemap』以創建新的 sitemap,填入名稱與起始地址就可以開始了。這裡以 BiliBili 排行榜為例,介紹如何抓取頁面中的多條信息,起始地址設為『https://www.bilibili.com/ranking』。
這裡我們需要抓取『視頻標題』、『播放量』、『彈幕數』、『up 主』以及『綜合得分』,因此首先為每一條記錄創建一個封裝器。
點擊『Add new selector』,id 填寫『封裝器』, type 選擇『element』,然後點擊『selector』,選擇一條記錄的外邊框,外包框中需要包含上述所有信息,然後再選擇第二條,這樣就會發現頁面中的所有記錄都已自動選擇,點擊『Done selecting』完成數據的選擇。還要記得勾選『Multiple』以保證抓取多條記錄,最後保存該選擇器即可。
返回後點擊剛才的封裝器,進入二級路徑,創建『標題』選擇器,id 填寫『視頻標題』,type 選擇『text』,點擊『selector』會發現第一條記錄高亮顯示,這是因為我們已提前將其設定為了封裝器。選擇包圍框中的標題,再點擊『Done selecting』完成標題的選擇,注意這裡不需要勾選『Multiple』,最後保存該選擇器。
同樣的,我們為『播放量』、『彈幕數』、『up 主』和『綜合得分』分別建立選擇器,選擇後可以通過『Data pview』預覽是否選中了想要的內容。另外還可以通過菜單欄中的『Sitemap bilibili_ranking - Selector graph』 直觀地查看樹狀結構。
繼續在剛才的菜單下選擇『Scrape』開始創建抓取任務,單個網頁的間隔時間和響應時間默認即可。點擊『Start scraping』開始抓取。這時候瀏覽器會自動打開新的頁面,停留數秒後自動關閉,代表抓取已完成。
點擊『Refresh Data』刷新數據,或點擊『Sitemap bilibili_ranking - Browse』查看數據。通過『Sitemap bilibili_ranking - Export data as CSV』即可下載為 CSV 格式文件。
▲BiliBili 排行榜
使用 Excel 打開,由於《Web Scraper》抓取的內容是無序的,因此需要對『綜合得分』進行降序排列,以恢復原始排行榜的結果。
自動翻頁抓取——豆瓣電影 Top250 為例
Bilibili 排行榜只有 100 條記錄,並且都在一個網頁中,那麼如果有分頁顯示的情況該怎麼辦呢?這裡以豆瓣電影 Top250 為例介紹自動翻頁抓取。
同樣的,新建 sitemap,在填寫起始地址前,我們先觀察一下豆瓣電影 Top250 的構成,總共有 250 條記錄,每頁顯示 10 條,共分為 25 頁。
而每一頁的網址都非常有規律,第一頁的地址為『https://movie.douban.com/top250?start=0&filter=』,第二頁僅僅是把地址中的『start=0』改為了『start=25』,因此我們填寫起始地址時便可以填寫『https://movie.douban.com/top250?start=[0-250:25]&filter=』,這裡 start=[0-250:25] 表示 以 25 的步長從 0 取到 250,因此 start 分別為 0、25、50 等等。這樣《Web Scraper》就會按順序一頁一頁抓取數據了。
接下來類似於 BiliBili 排行榜,創建『封裝器』後再添加『電影名』、『豆瓣評分』、『電影短評』以及『豆瓣排名』選擇器就行了,然後開始抓取。
可以看到瀏覽器會一頁一頁地進行翻頁抓取,這裡只需要安靜地等待抓取完畢即可,最後得到的數據以『豆瓣排名』進行升序排序,就能獲得豆瓣電影 Top250 的榜單了。
▲豆瓣電影 Top250
當然,這只是一種最簡單的分頁方法,而許多網站地址並不一定有著類似的規律,因此《Web Scraper》還有更多的方法能用來分頁,但相對較為複雜,在此也不再贅述了。
抓取二級頁面內容——知乎熱榜為例
以上完成了對網頁的單頁以及多頁內容的抓取,但不是每次都有著現成的數據擺在一個頁面中,因此還需要更進一步地對二級頁面進行搜尋。以知乎熱榜為例,介紹如何對二級頁面的『關注量』和『瀏覽量』進行抓取。
首先,新建 sitemap,起始地址為『https://www.zhihu.com/hot』。然後像前面一樣創建『封裝器』,再創建『文章標題』、『文章熱度』、『知乎排名』這三個選擇器。
接下來是重要步驟,創建一個『二級頁面』的連結。點擊『Add new selector』,id 填寫『二級頁面』, type 選擇『link』,然後點擊『selector』,選擇文章的標題,即每篇文章的入口,確認選擇後保存退出。
這樣就相當於有了一個窗口,點擊剛才創建的『二級頁面』,進入下一級目錄,然後像之前創建『文章標題』一樣創建『關注量』與『瀏覽量』兩個選擇器。最後整個樹狀結構如下圖所示。
點擊『Sitemap zhihu_hot - Scrape』開始抓取,這裡可以將『Page load delay』響應時間調大一些,確保網頁完全加載完畢。這時候瀏覽器會依次打開每個二級頁面進行抓取,因此需要等待一會兒。
抓取任務完成後將結果下載為 CSV 文件,按『知乎排名』降序排列,即可獲得整個知乎熱榜的榜單。
▲知乎熱榜
至此,介紹了如何使用《Web Scraper》抓取頁面中多條信息、自動翻頁抓取以及抓取二級頁面內容。很顯然《Web Scraper》的功能遠不止這些,還有更多強大的功能比如圖片抓取、正則表達式等等可自行摸索。
另外,如果只是想要簡單地抓取信息,可以嘗試使用其它插件如《Simple scraper》《Instant Data Scraper》,這些插件甚至可以一鍵抓取,但相比《Web Scraper》,功能的豐富度還是欠缺不少的。
不用學 Python,也不用花錢讓別人幫你,使用《Web Scraper》自己就能完成網頁抓取,或許下一個準時下班的就是你?