
文章插圖
前不久,我在 LearnML 子論壇上看到一篇帖子 。樓主在這篇帖子中提到,他需要為自己的機器學習項目抓取網頁數(shù)據 。很多人在回帖中給出了自己的方法,主要是學習如何使用 BeautifulSoup 和 Selenium 。
我曾在一些 數(shù)據科學項目中使用過 BeautifulSoup 和 Selenium 。在本文中,我將告訴你如何用一些有用的數(shù)據抓取一個網頁,并將其轉換成 pandas 數(shù)據結構(DataFrame) 。
為什么要將其轉換成數(shù)據結構呢?這是因為大部分機器學習庫都能處理 pandas 數(shù)據結構,并且只需少量修改就可對你的模型進行編輯 。
首先,我們要在維基百科上找到一個表來轉換成數(shù)據結構 。我抓取的這張表,展示的是維基百科上瀏覽量最大的運動員數(shù)據 。
其中一項大量的工作就是,通過瀏覽 HTML 樹來得到我們需要的表 。
通過 request 和 regex 庫,我們開始使用 BeautifulSoup 。
from bs4 import BeautifulSoupimport requestsimport reimport pandas as pd復制代碼
下面,我們將從網頁中提取 HTML 代碼:
website_url = requests.get('https://en.wikipedia.org/wiki/Wikipedia:Multiyear_ranking_of_most_viewed_pages').textsoup = BeautifulSoup(website_url, 'lxml')print(soup.prettify())</a></li><li id="footer-places-disclaimer"><a title="Wikipedia:General disclaimer">Disclaimers</a></li><li id="footer-places-contact"><a >Contact Wikipedia</a></li><li id="footer-places-mobileview"><a class="noprint stopMobileRedirectTog復制代碼
從語料庫中收集所有的表,我們有一個較小的表面區(qū)域來搜索 。
wiki_tables = soup.find_all('table', class_='wikitable')wiki_tables復制代碼
因為存在很多表,所以需要一種過濾它們的方法 。
據我們所知,Cristiano Ronaldo(也就是葡萄牙足球運動員 C 羅)有一個錨標記,這可能在幾個表中是獨一無二的 。
通過 Cristiano Ronaldo 文本,我們可以過濾那些被錨標記的表 。此外,我們還發(fā)現(xiàn)一些包含這個錨標記的父元素 。
links = []for table in wiki_tables:_table = table.find('a', string=re.compile('Cristiano Ronaldo'))if not _table:continueprint(_table)_parent = _table.parentprint(_parent)links.append(_parent)<a title="Cristiano Ronaldo">Cristiano Ronaldo</a><td style="text-align: left;"><a title="Cristiano Ronaldo">Cristiano Ronaldo</a></td><a title="Cristiano Ronaldo">Cristiano Ronaldo</a><td style="text-align: left;"><a title="Cristiano Ronaldo">Cristiano Ronaldo</a></td><a title="Cristiano Ronaldo">Cristiano Ronaldo</a><td style="text-align: left;"><a title="Cristiano Ronaldo">Cristiano Ronaldo</a></td>復制代碼
父元素只顯示單元格 。
這是一個帶有瀏覽器 web 開發(fā)工具的單元格 。
parent_lst = []for anchor in links:_ = anchor.find_parents('tbody')print(_)parent_lst.append(_)復制代碼
利用 tbody,我們可以返回包含以前的錨標記的其他表 。
為進一步過濾,我們可以在以下表中的不同標題進行搜索:
for i in parent_lst:print(i[0].find('tr'))tr><th>Rank*</th><th>Page</th><th>Views in millions</th></tr><tr><th>Rank</th><th>Page</th><th>Views in millions</th></tr><tr><th>Rank</th><th>Page</th><th>Sport</th><th>Views in millions</th></tr>復制代碼
以上關于本文的內容,僅作參考!溫馨提示:如遇健康、疾病相關的問題,請您及時就醫(yī)或請專業(yè)人士給予相關指導!
「愛刨根生活網」www.malaban59.cn小編還為您精選了以下內容,希望對您有所幫助:- Internet Explorer已限制此網頁運行可以訪問計算機的腳本或ActiveX控件——強烈譴
- 華為手機如何收藏網頁 如何保存網頁
- 百度網頁分享按鈕工具下線 百度工具條怎么沒了
- 婚姻生辰八字配對免費測試,哪有測生辰八字配對婚姻的軟件或網頁??
- adobephotoshop入門教程 Adobe推出網頁版Photoshop
- 女星被大佬哄去多人運動爆料 被曝多人運動的明星都有誰
- vim下一頁:網頁游戲排行榜2021前十名,2021十大最火網頁游戲排名
- 分析mac打不開百度的原因 為什么mac打不開網頁
- 免費學生網頁制作成品 銷售問答網站模板
- 自己制作一個網站的方法 html5制作網頁教程
