如何为你的机器学习项目抓取网页数据?
作者头像
  • VicorPower
  • 2021-07-20 13:35:33 7

前不久,在一个子论坛上,有人提出需要为自己的机器学习项目抓取网页数据。许多网友建议使用 BeautifulSoup 和 Selenium 这两个工具。

我之前在一些数据科学项目中也用过 BeautifulSoup 和 Selenium。在本文中,我将详细介绍如何抓取网页数据,并将其转换成 pandas 数据结构(DataFrame),以便在机器学习项目中使用。

为什么要把数据转换成 DataFrame 呢?这是因为大多数机器学习库都支持 pandas 数据结构,并且对数据进行少量修改就可以用来训练模型。

为了演示,我们从维基百科抓取一个表格,该表格展示了访问量最大的运动员数据。

首先,我们需要获取网页的 HTML 代码: ```python import requests import re import pandas as pd from bs4 import BeautifulSoup

url = 'https://en.wikipedia.org/wiki/Wikipedia:Multiyearrankingofmostviewed_pages' response = requests.get(url) soup = BeautifulSoup(response.text, 'lxml') ```

接下来,我们需要从网页中提取所有的表格: python wiki_tables = soup.find_all('table', class_='wikitable')

由于网页中有多个表格,我们需要过滤出我们需要的那个。我们知道某个表格中包含“Cristiano Ronaldo”这一锚文本,可以通过这个特征来过滤表格。 python links = [] for table in wiki_tables: _table = table.find('a', string=re.compile('Cristiano Ronaldo')) if not _table: continue links.append(_table.parent)

接下来,我们进一步过滤这些表格,找到包含特定标题的表格: ```python parentlst = [] for anchor in links: _ = anchor.findparents('tbody') parentlst.append()

进一步筛选表格

for i in parentlst: headerrow = i.find('tr') if headerrow and 'Rank*' in str(headerrow): sports_table = i break ```

我们找到了正确的表格,接下来提取并清洗表格中的数据: ```python completerow = [] for row in sportstable.findall('tr'): cells = row.findall('td') if not cells: continue rank = cells[0].text.strip() page_name = cells[1].find('a').text sport = cells[2].find('a').text views = cells[3].text.strip()

complete_row.append([rank, page_name, sport, views])

```

最后,我们将清洗后的数据转换成 pandas DataFrame: python headers = ['Rank', 'Name', 'Sport', 'Views Mil'] df = pd.DataFrame(complete_row, columns=headers)

现在,你已经成功地将网页上的数据转换成了 pandas DataFrame,可以用于后续的机器学习项目。

    本文来源:图灵汇
责任编辑: : VicorPower
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
抓取何为机器网页项目数据学习
    下一篇