python抓取网页数据(如何使用BeautifulSoup库从HTML页面中提取内容中执行?)
优采云 发布时间: 2022-03-30 01:12python抓取网页数据(如何使用BeautifulSoup库从HTML页面中提取内容中执行?)
今天我们将讨论如何使用 BeautifulSoup 库从 HTML 页面中提取内容。提取后,我们将使用 BeautifulSoup 将其转换为 Python 列表或字典!
什么是网页抓取?
简短的回答是:并非每个 网站 都有用于获取内容的 API。您可能想从您最喜欢的厨师那里获取食谱网站 或从旅游博客中获取照片。如果没有 API,提取 HTML 或抓取可能是获取该内容的唯一方法。我将向您展示如何在 Python 中执行此操作。
注意:并不是所有的网站都喜欢刮,有的网站可能会明示禁止。请与 网站 的所有者确认可抓取性。
如何在Python中抓取网站?
为了使网络抓取在 Python 中工作,我们将执行 3 个基本步骤:
使用 requests 库来提取 HTML 内容。分析 HTML 结构并识别收录我们内容的标签。使用 BeautifulSoup 提取标签并将数据放入 Python 列表中。安装库
让我们首先安装我们需要的库。从 网站 请求 HTML 内容。 BeautifulSoup 解析 HTML 并将其转换为 Python 对象。要为 Python 3 安装这些,请运行:
pip3 install requests beautifulsoup4
提取 HTML
在这个例子中,我会选择抓取网站的技术部分。如果您访问此页面,您将看到一个 文章 列表,其中收录标题、摘录和发布日期。我们的目标是创建一个收录该信息的文章列表。
技术页面的完整网址是:
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)
可变数据将收录页面的 HTML 源代码。
从 HTML 中提取内容
要从接收到的 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 > 小发布日期。
让我们使用 BeautifulSoup 提取这些。
Python:
以上代码将提取文章 并将它们放入my_data 变量中。我正在使用 pprint 来漂亮地打印输出,但您可以在自己的代码中跳过它。将上述代码保存在一个名为 fetch.py 的文件中并运行:
python3 fetch.py
如果一切顺利,你应该会看到:
Python:
[{'excerpt': "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.',
'pub_date': 'Aug 2021',
'title': 'Using variables in Jekyll to define custom content'},
{'excerpt': "In this article, I'll highlight some ideas for Jekyll "
'collections, blog category pages, responsive web-design, and '
'netlify.toml to make static website maintenance a breeze.',
'pub_date': 'Jul 2021',
'title': 'The evolution of ayushsharma.in: Jekyll, Bootstrap, Netlify, '
'static websites, and responsive design.'},
{'excerpt': "These are the top 5 lessons I've learned after 5 years of "
'Terraform-ing.',
'pub_date': 'Jul 2021',
'title': '5 key best practices for sane and usable Terraform setups'},
... (truncated)
就是这样!在 22 行代码中,我们用 Python 构建了一个网络爬虫。您可以在我的示例 repo 中找到源代码。
结论
使用 Python 列表中的 网站 内容,我们现在可以用它做一些很酷的事情。我们可以将其作为 JSON 返回到另一个应用程序,或者将其转换为具有自定义样式的 HTML。随意复制粘贴上面的代码并在您最喜欢的 网站 上进行试验。