Python:对网站的请求在任何情况下都没有提供我需要的 html
Python: request to website doesn't gives the html I need in any cases
根据我的问题 我对网站 finance.yahoo.com 上的请求还有一些疑问。
我的请求没有 User-Agent 请求给了我 html 我想从网站收集一些数据的代码。
以 'ALB' 作为参数的调用工作正常,我得到请求的数据:
import bs4 as bs
import requests
def yahoo_summary_stats(stock):
response = requests.get(f"https://finance.yahoo.com/quote/{stock}")
#response = requests.get(f"https://finance.yahoo.com/quote/{stock}", headers={'User-Agent': 'Custom user agent'})
soup = bs.BeautifulSoup(response.text, 'lxml')
table = soup.find('p', {'class': 'D(ib) Va(t)'})
sector = table.findAll('span')[1].text
industry = table.findAll('span')[3].text
print(f"{stock}: {sector}, {industry}")
return sector, industry
web.yahoo_summary_stats('ALB')
输出:
ALB: Basic Materials, Specialty Chemicals
调用 yahoo_summary_stats('AEE')
无法以这种方式工作,因此我需要激活 headers 才能成功请求站点。
但是现在使用参数headers={'User-Agent': 'Custom user agent'}
代码不起作用,他无法找到带有 class 'D(ib) Va(t)'
.
的段落 p
我该如何解决这个问题?
此页面使用 JavaScript
显示信息但 requests
,BeautifulSoup
不能 运行 JavaScript
.
但在没有 JavaScript 的情况下在 Web 浏览器中检查页面 我在子页面 Profile
上看到此信息。
"https://finance.yahoo.com/quote/{stock}/profile?p={stock}"
代码可以从该页面获取 stock
两者的代码。但它需要 User-Agent
来自真正的浏览器(或者至少是短版本 'Mozilla/5.0'
import bs4 as bs
import requests
def yahoo_summary_stats(stock):
url = f"https://finance.yahoo.com/quote/{stock}/profile?p={stock}"
headers = {'User-Agent': 'Mozilla/5.0'}
print('url:', url)
response = requests.get(url, headers=headers)
soup = bs.BeautifulSoup(response.text, 'lxml')
table = soup.find('p', {'class': 'D(ib) Va(t)'})
sector = table.findAll('span')[1].text
industry = table.findAll('span')[3].text
print(f"{stock}: {sector}, {industry}")
return sector, industry
# --- main ---
result = yahoo_summary_stats('ALB')
print('result:', result)
result = yahoo_summary_stats('AEE')
print('result:', result)
结果:
url: https://finance.yahoo.com/quote/ALB/profile?p=ALB
ALB: Basic Materials, Specialty Chemicals
result: ('Basic Materials', 'Specialty Chemicals')
url: https://finance.yahoo.com/quote/AEE/profile?p=AEE
AEE: Utilities, Utilities—Regulated Electric
result: ('Utilities', 'Utilities—Regulated Electric')
我觉得你取错了URL
response = requests.get(f"https://finance.yahoo.com/quote/{stock}/profile?p={stock}", headers={'User-Agent': 'Custom user agent'})
改成上面的URL连同user-agent
就可以解决了。
根据我的问题
我的请求没有 User-Agent 请求给了我 html 我想从网站收集一些数据的代码。
以 'ALB' 作为参数的调用工作正常,我得到请求的数据:
import bs4 as bs
import requests
def yahoo_summary_stats(stock):
response = requests.get(f"https://finance.yahoo.com/quote/{stock}")
#response = requests.get(f"https://finance.yahoo.com/quote/{stock}", headers={'User-Agent': 'Custom user agent'})
soup = bs.BeautifulSoup(response.text, 'lxml')
table = soup.find('p', {'class': 'D(ib) Va(t)'})
sector = table.findAll('span')[1].text
industry = table.findAll('span')[3].text
print(f"{stock}: {sector}, {industry}")
return sector, industry
web.yahoo_summary_stats('ALB')
输出:
ALB: Basic Materials, Specialty Chemicals
调用 yahoo_summary_stats('AEE')
无法以这种方式工作,因此我需要激活 headers 才能成功请求站点。
但是现在使用参数headers={'User-Agent': 'Custom user agent'}
代码不起作用,他无法找到带有 class 'D(ib) Va(t)'
.
我该如何解决这个问题?
此页面使用 JavaScript
显示信息但 requests
,BeautifulSoup
不能 运行 JavaScript
.
但在没有 JavaScript 的情况下在 Web 浏览器中检查页面 我在子页面 Profile
上看到此信息。
"https://finance.yahoo.com/quote/{stock}/profile?p={stock}"
代码可以从该页面获取 stock
两者的代码。但它需要 User-Agent
来自真正的浏览器(或者至少是短版本 'Mozilla/5.0'
import bs4 as bs
import requests
def yahoo_summary_stats(stock):
url = f"https://finance.yahoo.com/quote/{stock}/profile?p={stock}"
headers = {'User-Agent': 'Mozilla/5.0'}
print('url:', url)
response = requests.get(url, headers=headers)
soup = bs.BeautifulSoup(response.text, 'lxml')
table = soup.find('p', {'class': 'D(ib) Va(t)'})
sector = table.findAll('span')[1].text
industry = table.findAll('span')[3].text
print(f"{stock}: {sector}, {industry}")
return sector, industry
# --- main ---
result = yahoo_summary_stats('ALB')
print('result:', result)
result = yahoo_summary_stats('AEE')
print('result:', result)
结果:
url: https://finance.yahoo.com/quote/ALB/profile?p=ALB
ALB: Basic Materials, Specialty Chemicals
result: ('Basic Materials', 'Specialty Chemicals')
url: https://finance.yahoo.com/quote/AEE/profile?p=AEE
AEE: Utilities, Utilities—Regulated Electric
result: ('Utilities', 'Utilities—Regulated Electric')
我觉得你取错了URL
response = requests.get(f"https://finance.yahoo.com/quote/{stock}/profile?p={stock}", headers={'User-Agent': 'Custom user agent'})
改成上面的URL连同user-agent
就可以解决了。