python - Python For 循环中的属性错误(返回无) - 雅虎财经
问题描述
我是编码新手,正在尝试使用 BeautifulSoup 抓取各种雅虎财务细节。
我有一个循环遍历多个股票代码的 for 循环。有时,它返回一个属性错误,无。它不会发生在特定的股票上。有时是第 5 只股票,有时是第 400 股……这会导致代码停止。
如何防止这种情况发生,我应该使用什么样的异常/错误处理?
我的代码如下。
import requests
from bs4 import BeautifulSoup
import pandas as pd
from pandas import ExcelWriter
df = pd.read_excel('ASX_Screen_Basic_Materials+Utilities+Energy+Industrials.xlsx')
n = 0
descriptions = []
names = []
sectors = []
industries = []
for index, row in df.iterrows():
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'}
url = 'https://finance.yahoo.com/quote/BHP.AX/profile?p=BHP.AX'
url = url.replace('BHP.AX',str(row['Ticker']))
r = requests.get(url, headers = headers)
soup = BeautifulSoup(r.text, 'html.parser')
description = soup.find('p',{'class': 'Mt(15px) Lh(1.6)'}).text
descriptions.append(description)
print(description)
name = soup.find('h3', {'class': 'Fz(m) Mb(10px)'}).text
names.append(name)
print(name)
sector = soup.find('p', {'class': 'D(ib) Va(t)'}).find_all('span')[1].text
sectors.append(sector)
print(sector)
industry = soup.find('p', {'class': 'D(ib) Va(t)'}).find_all('span')[3].text
industries.append(industry)
print(industry)
n = n+1
print(n)
descriptions_ouput = pd.DataFrame(descriptions)
print(descriptions_ouput)
writer = ExcelWriter('ASX_Screen_Basic_Materials+Utilities+Energy+Industrials_Descriptions_Export.xlsx')
descriptions_ouput.to_excel(writer)
writer.save()
names_ouput = pd.DataFrame(names)
print(names_ouput)
writer = ExcelWriter('ASX_Screen_Basic_Materials+Utilities+Energy+Industrials_Names_Export.xlsx')
names_ouput.to_excel(writer)
writer.save()
sectors_ouput = pd.DataFrame(sectors)
print(sectors_ouput)
writer = ExcelWriter('ASX_Screen_Basic_Materials+Utilities+Energy+Industrials_Sectors_Export.xlsx')
sectors_ouput.to_excel(writer)
writer.save()
industries_ouput = pd.DataFrame(industries)
print(industries_ouput)
writer = ExcelWriter('ASX_Screen_Basic_Materials+Utilities+Energy+Industrials_Industries_Export.xlsx')
industries_ouput.to_excel(writer)
writer.save()
解决方案
使用yfinance可能会更容易:
!pip install yfinance
import yfinance as yf
tickerData = yf.Ticker("BHP.AX")
tickerDf = tickerData.info
tickerDf
推荐阅读
- c++ - 我无法理解错误消息:加密数据
- jsf - 与搜索命令按钮一起使用的全局过滤器在 Spring 升级后不会更新数据表
- java - 将 Apache Http 转换为 OkHttp android?
- asp.net-mvc - .NET Core POST 请求在 Web API 中存在多对多关系的问题
- python - 输入训练图像之间的互信息和两个 logit 之间的差异
- microsoft-graph-api - beta/chats/:chatId/installedApps 返回 404
- cakephp - 使用 php7.4 创建 cakePHP 4 时出错
- python - 如何忽略错误并继续使用 Python、Selenium 进行抓取?
- java - 如果第一个测试断言失败,如何打破 Jmeter 测试周期?
- c# - 在 C# 中根据具有无限组合的两个参数定义要使用的函数