【问题标题】:Unable to scrape two fields from a webpage using requests无法使用请求从网页中抓取两个字段
【发布时间】:2020-05-18 20:30:23
【问题描述】:

我正在尝试使用请求从 webpage 中抓取两个字段。我使用了准确的选择器来定位内容,但我无法获取它们,因为它们是动态生成的并且在页面源中不可用。但是,我使用选择器作为占位符。我知道如何使用 selenium 获取这两个字段,但我想知道如何使用请求获取它们。

我追求的领域:

我试过了:

import requests
from bs4 import BeautifulSoup

url = "https://www.namebase.io/domains/unite"

with requests.Session() as s:
    s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
    r = s.get(url)
    soup = BeautifulSoup(r.text,"lxml")
    total_bids = soup.select_one("[class='domain-highlights__container'] [class*='text_type_h4']").text
    highest_lockup = soup.select_one("[class='desktop-bid-card__right'] > [class*='text_type_h3']").text
    print(total_bids,highest_lockup)

如何使用请求获取这两个字段?

【问题讨论】:

    标签: python python-3.x web-scraping beautifulsoup python-requests


    【解决方案1】:

    数据是通过JavaScript加载的,但是你可以使用requests模块来获取Json数据。

    例如:

    import requests
    
    url = 'https://www.namebase.io/api/domains/get/unite'
    data = requests.get(url).json()
    
    # uncomment this to print all data:
    # import json
    # print(json.dumps(data, indent=4))
    
    no_bids = len(data['bids'])
    highest = float(data['highestStakeAmount'] / 1_000_000)
    
    print('No. bids', no_bids)
    print('Highest lockup', highest)
    

    打印:

    No. bids 6
    Highest lockup 5.0
    

    编辑(来自 Firefox 开发人员工具的屏幕截图,我在其中找到了 API URL):

    【讨论】:

    • 您如何找到该网址?使用开发者控制台?
    • @JQadrad 是的,使用 Firefox 开发人员工具,网络选项卡。
    • 我试图在 Chrome 中找到它,但我没有看到指向 API 的链接。无论如何,不​​想劫持这个问题。
    • @JQadrad 我添加了来自 Firefox 的屏幕截图以及我的答案的 URL。
    猜你喜欢
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多