python-3.x - 我无法使用 bs4 提取帖子的 instagram 主题标签
问题描述
我想使用 BeautifoulSoup4 从特定帖子(给定 url)中提取主题标签。首先,我使用请求获取页面,并尝试使用 find_all() 来获取每个主题标签,但似乎存在隐藏问题。
这是代码:
import requests
from bs4 import BeautifulSoup as bs
URL = 'https://www.instagram.com/p/CBz7-X6AOqK/?utm_source=ig_web_copy_link'
r = requests.get(URL)
soup = bs(r.content,'html.parser')
items = soup.find_all('a',attrs={'class':' xil3i'})
print(items)
这段代码的结果只是一个空列表。有人可以帮我解决这个问题吗?
解决方案
看起来您尝试抓取的页面需要javascript
. 这意味着当您发送GET
请求时,网页的某些元素不存在。
您可以确定您正在抓取的网页是否需要javascript
填充所需信息的一种方法是将 html 保存到文件中:
URL = 'https://www.instagram.com/p/CBz7-X6AOqK/?utm_source=ig_web_copy_link'
r = requests.get(URL)
with open('dump.html', 'w+') as file:
file.write(r.text)
然后将该文件打开到网络浏览器中
如果您打开的文件没有您想要抓取的信息,那么它很可能是使用javascript
.
为了解决这个问题,您可以javascript
使用
- 一个网络驱动程序(如selenium),模拟用户在网络浏览器中访问这些页面
- requests-HTML,这是一个稍微新的包,允许您在页面上呈现 javascript,并具有许多其他对网页抓取有用的很棒的功能
有一大群人使用 selenium,这使得调试比使用 requests-HTML 更容易,但是如果您不想了解像 selenium 这样的新模块,requests-HTML 与 requests 非常相似,不应该选择它很难
推荐阅读
- db2 - 云上的 DB2:: 错误: HWCSEC0009E: 调用状态 RESTful api 失败
- python - 装饰器改变对象的状态
- java - 如何在 AndroidStudioProject 的 Java 应用程序中使用 kotlinOptions?
- pandas - 在 Join 函数中进行迭代
- ios - 列表小部件未显示在从 testflight 下载的应用程序中。但是当我在 iPhone Xr 测试设备中运行时它就在那里
- mysql - 使用带空格的 System() 调用的 Ruby MySQL 备份
- python - 使用 keras ResNet50 模型进行二进制分类的输出层
- jquery - Jquery - 预加载器无法正常工作的 CSS 延迟
- discord.py - 使用其 id 向特定服务器发送消息 - discord.py
- azure - 我是否需要单独的应用程序 ID 才能与每个客户的 Azure Active Directory 集成?