【问题标题】:bs4 usable to get data inside <span> tagsbs4 可用于获取 <span> 标签内的数据
【发布时间】:2020-12-26 12:54:43
【问题描述】:

我正在尝试使用网络抓取来获取我的位置。所以我决定使用 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)

我得到的输出为 - &lt;span class="js-ipdata-location"&gt;…&lt;/span&gt;。我需要标签之间的文本,在这种情况下是不可见的。

我什至尝试过print(loc.text),但我只是得到...作为输出。

请帮我找到我的位置。

谢谢

【问题讨论】:

    标签: python web-scraping beautifulsoup ip


    【解决方案1】:

    您在页面上看到的数据是从外部 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
    

    【讨论】:

    • 非常感谢,能解释一下您是如何解决这个问题的吗?就像我确定.json() 不会与那里的每个网站一起工作。对我解决未来的问题会有帮助
    • 你能告诉你如何找到那个网址吗?
    • @default-303 我打开了 Firefox 开发者工具 -> 网络选项卡并观察到页面在哪里发出请求。其中一个 URL 是这个 Json 调用,其中包含必要的数据。
    猜你喜欢
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多