爆料网页数据采集技巧 如何采集网页数据


爆料网页数据采集技巧 如何采集网页数据

文章插图
前不久,我在 LearnML 子论坛上看到一篇帖子 。楼主在这篇帖子中提到,他需要为自己的机器学习项目抓取网页数据 。很多人在回帖中给出了自己的方法,主要是学习如何使用 BeautifulSoup 和 Selenium 。
我曾在一些 数据科学项目中使用过 BeautifulSoup 和 Selenium 。在本文中,我将告诉你如何用一些有用的数据抓取一个网页,并将其转换成 pandas 数据结构(DataFrame) 。
为什么要将其转换成数据结构呢?这是因为大部分机器学习库都能处理 pandas 数据结构,并且只需少量修改就可对你的模型进行编辑 。
首先,我们要在维基百科上找到一个表来转换成数据结构 。我抓取的这张表,展示的是维基百科上浏览量最大的运动员数据 。
其中一项大量的工作就是,通过浏览 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 href="https://www.520longzhigu.com/wiki/Wikipedia:General_disclaimer" title="Wikipedia:General disclaimer">Disclaimers</a></li><li id="footer-places-contact"><a href="https://www.520longzhigu.com//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact Wikipedia</a></li><li id="footer-places-mobileview"><a class="noprint stopMobileRedirectTog复制代码
从语料库中收集所有的表,我们有一个较小的表面区域来搜索 。
wiki_tables = soup.find_all('table', class_='wikitable')wiki_tables复制代码
因为存在很多表,所以需要一种过滤它们的方法 。
据我们所知,Cristiano Ronaldo(也就是葡萄牙足球运动员 C 罗)有一个锚标记,这可能在几个表中是独一无二的 。
通过 Cristiano Ronaldo 文本,我们可以过滤那些被锚标记的表 。此外,我们还发现一些包含这个锚标记的父元素 。
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 href="https://www.520longzhigu.com/wiki/Cristiano_Ronaldo" title="Cristiano Ronaldo">Cristiano Ronaldo</a><td style="text-align: left;"><a href="https://www.520longzhigu.com/wiki/Cristiano_Ronaldo" title="Cristiano Ronaldo">Cristiano Ronaldo</a></td><a href="https://www.520longzhigu.com/wiki/Cristiano_Ronaldo" title="Cristiano Ronaldo">Cristiano Ronaldo</a><td style="text-align: left;"><a href="https://www.520longzhigu.com/wiki/Cristiano_Ronaldo" title="Cristiano Ronaldo">Cristiano Ronaldo</a></td><a href="https://www.520longzhigu.com/wiki/Cristiano_Ronaldo" title="Cristiano Ronaldo">Cristiano Ronaldo</a><td style="text-align: left;"><a href="https://www.520longzhigu.com/wiki/Cristiano_Ronaldo" title="Cristiano Ronaldo">Cristiano Ronaldo</a></td>复制代码
父元素只显示单元格 。
这是一个带有浏览器 web 开发工具的单元格 。
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>复制代码


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: