bs4 可用于获取 <span> 标签内的数据

bs4 usable to get data inside <span> tags

我正在尝试使用网络抓取获取我的位置。所以我决定使用 nordvpn(赞助商 XD)网站来查找我的位置。我打开开发工具,发现列出位置的部分在 span 选项卡内有 class = js-ipdata-location

问题是当我解析它时,我只是将 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