我想用我为雅虎财经股票页面编写的解析脚本向您展示这个随机问题。
import requests
from bs4 import BeautifulSoup
headers ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36'}
symbol = "AAPL"
symbol1 = 'UST.MI'
url_template = 'https://finance.yahoo.com/quote/'+symbol
url_template1 = 'https://finance.yahoo.com/quote/'+symbol1
r = requests.get(url_template, headers=headers)
r1 = requests.get(url_template1, headers=headers)
现在,正如你所想象的:
r =>
r1 =>
其他代码(即 GOOG)也给出响应 200。
问题似乎出在股票代码中有一个点时(即 UST.MI)。 另外,这个问题似乎是随机的(不是所有天,不是总是,但现在就像一周没有工作)。 有谁遇到过这个问题,或者知道如何处理吗?
非常感谢;-)
雅虎财经需要某些 HTTP 标头才能实现近乎可靠的行为。
为什么无需这些标头就可以访问某些符号(对我来说)是个谜。
但是,以下内容适用于您感兴趣的两种符号:
import requests
from bs4 import BeautifulSoup as BS
try:
import lxml
PARSER = "lxml"
except ModuleNotFoundError:
PARSER = "html.parser"
URL = "https://finance.yahoo.com/quote/"
with requests.Session() as session:
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.3",
"Accept-Language": "en-GB,en;q=0.9,en-US;q=0.8,pt;q=0.7",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
}
session.headers.update(headers)
for symbol in "GOOG", "UST.MI":
try:
with session.get(URL+symbol) as response:
response.raise_for_status()
soup = BS(response.text, PARSER)
except Exception as e:
print(e)