
本文将围绕以下问题展开:在使用Beautiful Soup抓取网页内容时遇到的NameError问题,并提供更高级的数据提取技巧。我们将深入探讨如何正确解析动态加载的内容,特别是那些存储在<script>标签中的数据,并提供清晰的代码示例和注意事项,助您高效地从网页中提取所需信息。
初学者在使用Beautiful Soup提取网页内容时,经常会遇到NameError,这通常是因为变量的作用域问题或者没有正确找到目标元素。例如,在提供的代码中,text变量可能没有被赋值就直接在print(text)中使用了,这会导致NameError。此外,更重要的是,要认识到有些网页的内容并不是直接以HTML标签的形式呈现,而是通过JavaScript动态加载,存储在<script>标签中。
针对这种情况,我们需要采取不同的策略。
当目标数据存储在<script>标签中时,直接使用find_all等Beautiful Soup方法可能无法奏效。我们需要先提取<script>标签中的内容,然后使用正则表达式和JSON解析等方法来提取所需数据。
以下是一个示例,展示了如何从Habr网站提取文章标题和摘要:
import re
import json
import requests
from bs4 import BeautifulSoup
URL = "https://habr.com/ru/hubs/gamedev/articles/" # 目标网址
page = requests.get(URL).text
# 使用正则表达式提取 window.__INITIAL_STATE__ 变量的内容
data = re.search(r"window\.__INITIAL_STATE__=(.*}});", page).group(1)
# 将提取的字符串解析为JSON对象
data = json.loads(data)
# 遍历文章列表,提取标题和摘要
for a in sorted(
data["articlesList"]["articlesList"].values(),
key=lambda k: k["timePublished"],
reverse=True,
):
print(a["titleHtml"])
# 使用Beautiful Soup解析HTML格式的摘要文本
print(BeautifulSoup(a["leadData"]["textHtml"], "html.parser").text)
# 我们只需要第一篇文章的信息
break代码解释:
注意事项:
使用Beautiful Soup提取网页内容是一项常见的任务,但需要掌握一些技巧才能应对各种情况。当遇到NameError时,首先要检查变量的作用域和是否正确赋值。当目标数据存储在<script>标签中时,需要使用正则表达式和JSON解析等方法来提取数据。 掌握这些技巧,可以帮助你更高效地从网页中提取所需信息。
以上就是使用Beautiful Soup提取网页内容:进阶技巧与常见问题解决方案的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号