首页 后端开发 Python教程 网络抓取和分析外语数据

网络抓取和分析外语数据

Dec 24, 2024 am 11:40 AM

最近我决定做一个快速的网页抓取和数据分析项目。因为我的大脑喜欢想出需要花费大量时间的大想法,所以我决定挑战自己,想出一些可以在几个小时内完成的简单事情。

这是我想到的:

由于我的本科学位最初是外语(法语和西班牙语),我认为网络抓取一些语言相关数据会很有趣。我想使用 BeautifulSoup 库,它可以解析静态 html,但无法处理需要 onclick 事件来显示整个数据集的动态网页(即,如果页面已分页,则单击下一页数据)。

我决定使用最常用语言的维基百科页面。

Web scraping and analysing foreign languages data

我想做以下事情:

  • 获取页面的 html 并输出到 .txt 文件
  • 使用beautiful soup解析html文件并提取表数据
  • 将表格写入 .csv 文件
  • 使用数据分析提出我想回答此数据集的 10 个问题
  • 使用 pandas 和 Jupyter Notebook 回答这些问题

我决定将项目分成这些步骤以分离关注点,但我也想避免通过重新运行脚本来发出多个不必要的请求以从维基百科获取 html。保存 html 文件,然后在单独的脚本中使用它意味着您不需要不断重新请求数据,因为您已经拥有了数据。

项目链接

此项目的 github 存储库的链接是:https://github.com/gabrielrowan/Foreign-Languages-Analysis

获取html

首先,我检索并输出 html。使用 C# 和 C 后,我总是对 Python 代码如此简短和简洁感到新奇?

url = 'https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers'

response = requests.get(url)
html = response.text

with open("languages_html.txt", "w", encoding="utf-8") as file:
    file.write(html)

登录后复制
登录后复制

解析 html

为了用 Beautiful soup 解析 html 并选择我感兴趣的表,我做了:

with open("languages_html.txt", "r", encoding="utf-8") as file:
    soup = BeautifulSoup(file, 'html.parser')

# get table
top_languages_table = soup.select_one('.wikitable.sortable.static-row-numbers')


登录后复制
登录后复制

然后,我获取了表标题文本来获取 pandas 数据框的列名称:

# get column names
columns = top_languages_table.find_all("th")
column_titles = [column.text.strip() for column in columns]

登录后复制
登录后复制

之后,我创建了数据框,设置列名称,检索每个表行并将每一行写入数据框:

# get table rows
table_data = top_languages_table.find_all("tr")

# define dataframe
df = pd.DataFrame(columns=column_titles)

# get table data
for row in table_data[1:]:
    row_data = row.find_all('td')
    row_data_txt = [row.text.strip() for row in row_data]
    print(row_data_txt)
    df.loc[len(df)] = row_data_txt 


登录后复制
登录后复制

注意 - 不使用 strip() 时,文本中有 n 个不需要的字符。

最后,我将数据帧写入 .csv。

分析数据

事先,我从数据中提出了我想回答的这些问题:

  1. 数据集中所有语言的母语总数是多少?
  2. 有多少种不同类型的语系?
  3. 每个语系的母语总数是多少?
  4. 最常用的 3 个语系是什么?
  5. 创建一个饼图,显示最常用的 3 个语系
  6. 最常见的语系-分支对是什么?
  7. 表中哪些语言属于汉藏语系?
  8. 显示所有罗曼语系和日耳曼语系语言的母语人士的条形图
  9. 前 5 种语言占母语使用者总数的百分比是多少?
  10. 哪个分支的母语使用者最多,哪个分支最少?

结果

虽然我不会通过代码来回答所有这些问题,但我会讨论涉及图表的两个问题。

显示所有罗曼语和日耳曼语母语的条形图

首先,我创建了一个数据框,仅包含分支名称为“Romance”或“Germanic”的行

url = 'https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers'

response = requests.get(url)
html = response.text

with open("languages_html.txt", "w", encoding="utf-8") as file:
    file.write(html)

登录后复制
登录后复制

然后我指定了图表的 x 轴、y 轴和条形颜色:

with open("languages_html.txt", "r", encoding="utf-8") as file:
    soup = BeautifulSoup(file, 'html.parser')

# get table
top_languages_table = soup.select_one('.wikitable.sortable.static-row-numbers')


登录后复制
登录后复制

这创建了:

Web scraping and analysing foreign languages data

创建一个饼图,显示 3 个最常用的语系

为了创建饼图,我检索了最常见的 3 个语系并将它们放入数据框中。

此代码组获取每个语系的母语人士总数,按降序排序,并提取前 3 个条目。

# get column names
columns = top_languages_table.find_all("th")
column_titles = [column.text.strip() for column in columns]

登录后复制
登录后复制

然后我将数据放入饼图中,指定“母语者”的 y 轴和图例,这为图表中显示的每个语言系列创建颜色编码标签。

# get table rows
table_data = top_languages_table.find_all("tr")

# define dataframe
df = pd.DataFrame(columns=column_titles)

# get table data
for row in table_data[1:]:
    row_data = row.find_all('td')
    row_data_txt = [row.text.strip() for row in row_data]
    print(row_data_txt)
    df.loc[len(df)] = row_data_txt 


登录后复制
登录后复制

Web scraping and analysing foreign languages data

其余问题的代码和回答可以在这里找到。我在笔记本中使用 Markdown 写下问题及其答案。

下次:

对于我的网络抓取和数据分析项目的下一次迭代,我想让事情变得更复杂:

  • 网络抓取动态页面,点击/滚动时会显示更多数据
  • 分析更大的数据集,可能需要在分析之前进行一些数据清理工作

Web scraping and analysing foreign languages data

最后的想法

尽管速度很快,但我很喜欢做这个项目。它提醒我,简短、可管理的项目对于让练习代表参与进来有多么有用?另外,从互联网提取数据并从中创建图表,即使数据集很小,也很有趣?

以上是网络抓取和分析外语数据的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何解决Linux终端中查看Python版本时遇到的权限问题? 如何解决Linux终端中查看Python版本时遇到的权限问题? Apr 01, 2025 pm 05:09 PM

Linux终端中查看Python版本时遇到权限问题的解决方法当你在Linux终端中尝试查看Python的版本时,输入python...

如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? 如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere进行中间人读取时如何避免被检测到当你使用FiddlerEverywhere...

在Python中如何高效地将一个DataFrame的整列复制到另一个结构不同的DataFrame中? 在Python中如何高效地将一个DataFrame的整列复制到另一个结构不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas库时,如何在两个结构不同的DataFrame之间进行整列复制是一个常见的问题。假设我们有两个Dat...

如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? 如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? Apr 02, 2025 am 07:18 AM

如何在10小时内教计算机小白编程基础?如果你只有10个小时来教计算机小白一些编程知识,你会选择教些什么�...

Uvicorn是如何在没有serve_forever()的情况下持续监听HTTP请求的? Uvicorn是如何在没有serve_forever()的情况下持续监听HTTP请求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持续监听HTTP请求的?Uvicorn是一个基于ASGI的轻量级Web服务器,其核心功能之一便是监听HTTP请求并进�...

在Linux终端中使用python --version命令时如何解决权限问题? 在Linux终端中使用python --version命令时如何解决权限问题? Apr 02, 2025 am 06:36 AM

Linux终端中使用python...

如何绕过Investing.com的反爬虫机制获取新闻数据? 如何绕过Investing.com的反爬虫机制获取新闻数据? Apr 02, 2025 am 07:03 AM

攻克Investing.com的反爬虫策略许多人尝试爬取Investing.com(https://cn.investing.com/news/latest-news)的新闻数据时,常常�...

See all articles