python - bs4 可用于获取标签内的数据
问题描述
我正在尝试使用网络抓取来获取我的位置。所以我决定使用 nordvpn(赞助商 XD)网站来查找我的位置。我打开了开发工具,发现列出位置的部分有 class = js-ipdata-location
inside span 选项卡。
问题是当我解析它时,我只是将 span 标签作为输出。并...
作为标签之间的文本。
这是我的代码 -
ip_req = requests.get('https://nordvpn.com/what-is-my-ip/', headers = header)
bs_obj = BeautifulSoup(ip_req.text, 'lxml')
loc = bs_obj.find('span', class_ = 'js-ipdata-location')
print(loc)
我得到的输出为 - <span class="js-ipdata-location">…</span>
。我需要标签之间的文本,在这种情况下是不可见的。
我什至试过做print(loc.text)
,但我只是得到...
输出。
请帮我找到我的位置。
谢谢
解决方案
您在页面上看到的数据是从外部 URL 动态加载的。您可以使用此脚本打印数据:
import json
import requests
url = 'https://nordvpn.com/wp-admin/admin-ajax.php?action=get_user_info_data'
data = requests.get(url).json()
# uncomment to print all data:
# print(json.dumps(data, indent=4))
print(data['city'], data['region'], data['country'])
打印(在我的情况下):
Bratislava Bratislava Slovakia
推荐阅读
- loops - 扑; 如何制作一个在特定条件下停止的定期计时器?
- ios - firebase_auth 0.18.3 升级破坏了我的项目
- asp.net-core - ASP.NET Core Blazor Web 应用程序发布问题
- oop - 座位类应该与这个 Uml 图中的哪些类使用哪个连接?
- .net - 使用 powershell 更快地获取/设置像素
- python - 莫尔斯翻译器的python文本在中途中断
- node.js - 我在 prod 而不是 localhost 上收到连接错误
- azure - 是否有任何 azure DevOps rest API 可以通过提供 build-id 获取列表(如果发布及其环境状态)?
- java - System.out.println() 没有被执行
- spring-boot - 如何在由 Cloud Native Buildpacks (CNB) 构建的 Docker 容器中将标志传递给 java 进程