从网页抓取数据(本文讨论如何使用BeautifulSoup库从HTML页面中提取内容)
优采云 发布时间: 2022-01-14 14:04从网页抓取数据(本文讨论如何使用BeautifulSoup库从HTML页面中提取内容)
简介
本文讨论了如何使用 Beautiful Soup 库从 HTML 页面中提取内容。提取后,我们将使用 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
本文爬取了本网站的技术页面。如果您转到该页面,您将看到一个 文章 列表,其中收录标题、摘录和发布日期。我们的目标是创建一个收录该信息的文章列表。
技术页面的完整网址是:
https://notes.ayushsharma.in/technology
我们可以使用请求从这个页面获取 HTML 内容:
#!/usr/bin/python3
import requests
url = 'https://notes.ayushsharma.in/technology'
data = requests.get(url)
print(data.text)
可变数据将收录页面的 HTML 源代码。
从 HTML 中提取内容
为了从数据中提取我们的数据,我们需要确定哪些标签有我们需要的内容。
如果您浏览 HTML,您会在顶部附近找到此部分:
Using variables in Jekyll to define custom content
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.
Aug 2021
每篇文章 文章都会在整个页面中重复此操作。我们可以看到.card-title有文章标题,.card-text有摘录,.card-footer类下的小标签有发布日期。
让我们用 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。这就是Linux应该学习的方式