打印 requests.get 未显示 HTML 输出

问题描述 投票:0回答:1

我正在尝试抓取一个简单的yahoofinance 页面,我的代码如下所示:

import requests
from bs4 import BeautifulSoup

url = "https://finance.yahoo.com/quote/AMZN"
headers={'USER-AGENT': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}
response = requests.get(url,headers=headers)
soup = BeautifulSoup(response.text,'lxml')
print(soup.prettify())

我期望打印一个 HTML 文档,但我得到的内容是这样开始的:

在调试时,我可以清楚地看到response.code是200,并且汤包含预期的HTML文档:

即使没有通过 BeautifulSoup,只使用:

url = "https://finance.yahoo.com/quote/AMZN"
headers={'USER-AGENT': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}
response = requests.get(url,headers=headers)
print(response.text)

我得到了相同的结果。

知道我做错了什么吗?

我期望一个 HTML 文档,但我得到的是随机数字和字母

beautifulsoup python-requests
1个回答
0
投票

我认为你的代码实际上运行良好。

如果您检查该页面的源代码,会发现有一个嵌入的 JavaScript,其中包含一个编码文本块作为

root.App.main.context.dispatcher.stores
的值。该块看起来非常像您在问题中显示的内容。该脚本中包含大约 1.5MB 的数据。

这意味着任何打印该页面源代码的尝试都会生成太多有用的输出,但这并不妨碍您使用 BeautifulSoup 在页面上执行查询:

>>> res = requests.get('https://finance.yahoo.com/quote/AMZN')
>>> soup = bs4.BeautifulSoup(res.text)
>>> x = soup.find('span', string='Previous Close')
>>> x.findParent().findNextSibling().text
'147.42'
© www.soinside.com 2019 - 2024. All rights reserved.