使用 Beautiful Soup 在 Python 中抓取网页

为了让网络抓取在 Python 中工作,我们将执行三个基本步骤:

使用requests库提取 HTML 内容。

分析 HTML 结构并识别包含内容的标签。

使用 Beautiful Soup 提取标签并将数据放入 Python 列表中。

安装库

首先安装我们需要的库。requests库可以从网站获取 HTML 内容。Beautiful Soup 解析 HTML 并将其转换为 Python 对象。在Python 3中需要安装下面两个库:

[root@localhost ~]# pip3 install requests beautifulsoup4
提取html

本文抓取该网站的技术页面。如果你转到该页面,将看到带有标题、摘录和发布日期的文章列表。我们的目标是创建一个包含该信息的文章列表。

技术页面的完整 URL 是:

https://notes.ayushsharma.in/technology

我们可以使用requests从这个页面获取 HTML 内容:

#!/usr/bin/python3
import requests
url = 'https://notes.ayushsharma.in/technology'
data = requests.get(url)
print(data.text)

变量 data 将包含页面的 HTML 源代码。

从 HTML 中提取内容

为了从 data 中提取我们的数据,我们需要确定哪些标签具有我们需要的内容。

如果你浏览 HTML,会在顶部附近找到此部分:

<div>
<a href="https://www.linuxprobe.com/2021/08/using-variables-in-jekyll-to-define-custom-content">
<div>
<div>
<h5>Using variables in Jekyll to define custom content</h5>
<small>I recently discovered that Jekyll's config.yml can be used to define custom
variables for reusing content. I feel like I've been living under a rock all this time. But to err over and
over again is human.</small>
</div>
<div>
<small>Aug 2021</small>
</div>
</div>
</a>
</div>

这是在每篇文章的整个页面中重复的部分。我们可以看到 .card-title 有文章标题, .card-text 有摘录, .card-footer 类下面的small标签 有发布日期。

让我们使用 Beautiful Soup 提取这些内容。

#!/usr/bin/python3
import requests
from bs4 import BeautifulSoup
from pprint import pprint
url = 'https://notes.ayushsharma.in/technology'
data = requests.get(url)
my_data = []
html = BeautifulSoup(data.text, 'html.parser')
articles = html.select('a.post-card')
for article in articles:
title = article.select('.card-title')[0].get_text()
excerpt = article.select('.card-text')[0].get_text()
pub_date = article.select('.card-footer small')[0].get_text()
my_data.append({"title": title, "excerpt": excerpt, "pub_date": pub_date})
pprint(my_data)

上面的代码提取文章并将它们放入 my_data 变量中。我正在使用 pprint 来打印输出。

总结

我们可以将它作为 JSON 返回给另一个应用程序,或者使用自定义样式将其转换为 HTML。

本文原创地址:https://www.linuxprobe.com/bs4-python-web.html编辑:逄增宝,审核员:逄增宝

为您推荐一些与本文相关的文章:

  • 《新编ASP网站编程入门与提高》pdf电子书免费下载
  • 微软制定了让所有客户密码都成为历史的 2021 新计划
  • grep 命令的 12 个实例
  • 代号为 Kyria 的 Manjaro Linux 19.0 系统正式发布
  • 俄罗斯政府承诺全力保护卡巴斯基利益
  • MakuluLinux 发布新版
  • 《5G应用“扬帆”行动计划(2021-2023年)》征求意见稿发布
  • 5G时代企业重视的数据安全威胁
  • 在Mysql中的GROUP BY分组,如何取最新的一条记录?
  • Linux系统远程连接服务器命令行模式
以上是使用 Beautiful Soup 在 Python 中抓取网页的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>