【问题标题】:Node missing data when scraping with Beautiful Soup [duplicate]使用 Beautiful Soup 抓取时节点丢失数据 [重复]
【发布时间】:2020-07-10 08:39:47
【问题描述】:

我正在编写一个网络爬虫来提取财务数据和分析师建议。我有一个问题,当我从页面源代码中提取数据时,节点中的数据似乎丢失/不正确,我得到 0.00 美元,但正确的值为 884.23 美元

下面是示例代码:

import requests as rq
from bs4 import BeautifulSoup as bs

sym='cmg'
url='https://www.nasdaq.com/market-activity/stocks/{}/analyst-research'.format(sym)
page_response = rq.get(url, timeout=5)
page=bs(page_response.content, 'html.parser')
sr=page.find('div', attrs={'class':'analyst-target-price__price'})

print(sr.text)
Out[546]: '$0.00'

在撰写此问题时,从网站上的 html 代码来看,该值应为 884.23 美元。

就像我在上面所说的,我认为问题是当我获得页面响应/内容时网站没有完全呈现。有没有人可以解决这个问题?

【问题讨论】:

标签: python web-scraping beautifulsoup


【解决方案1】:

您尝试抓取的值是由 Javascript 生成的,因此它不在页面的源代码中。 您可以通过发送 js 发出的相同请求来获得相同的值:

import requests as rq

sym            = 'cmg'
url            = 'https://api.nasdaq.com/api/analyst/{}/targetprice'.format(sym)
page_response  = rq.get(url).json()
priceTarget    = page_response['data']['consensusOverview']['priceTarget']
lowPriceTarget = page_response['data']['consensusOverview']['lowPriceTarget']
highPriceTarget = page_response['data']['consensusOverview']['highPriceTarget']

print('priceTarget',priceTarget)
print('lowPriceTarget ',lowPriceTarget )
print('highPriceTarget ',highPriceTarget )

输出:

priceTarget 884.23
lowPriceTarget  550.0
highPriceTarget  1050.0

【讨论】:

  • 你试图抓取的值是由 Javascript 生成的你能分享相关的 HTML,我在页面中找不到它。
  • @AMC 看看答案。如果您查看页面的源代码,您将不会在那里找到该值,这就是我的意思是它是由 JS 通过 AJAX 调用生成的。
  • 如果你查看了页面的源代码,你不会在那里找到值,这就是我的意思是它是由 JS 通过 AJAX 调用生成的。 抱歉,如果我的评论不清楚,我的意思是我什至无法在我的浏览器中找到类 'analyst-target-price__price' 的 div。事实证明,我需要向下滚动页面才能加载它。
  • @AMC 滚动加载的任何东西都是由 JS 生成的。
  • @AhmedSoliman 非常感谢!完美地解决了。您是如何找到 js 发出的请求的 url 的(抱歉,对 webscrapping 和 html 有点陌生)
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多