python - BeautifulSoup 抓取投资网站;AttributeError:表格问题
问题描述
我花了大约几个小时来解决一个可能很简单的任务,但无法弄清楚:我试图从以下包含表格的站点中抓取数据。
但是,如果我尝试从表中提取数据,则会收到 AttributeErrorcontainers.findAll('td')
我搜索了几个网站,但它似乎对除我以外的所有人都有效.. 有人知道吗?
import requests
from bs4 import BeautifulSoup as soup
from urllib.request import urlopen as uReq
#OpenURL
url = requests.get('https://www.investing.com/equities/apple-computer-inc-balance-sheet',headers={'User-Agent': 'Mozilla/5.0'})
#DETERMINE FORMAT
content_page = soup(url.content,'html.parser')
containers = content_page.findAll('table', {'class':'genTbl reportTbl'})
containers.findAll('td') ## This doesnt work for some reason..
## also tried .find('td') & ('tr') etc.
然后应该使用 for 循环提取数据,但无论如何,由于上述方法不起作用,我被困在这里..
A=[]
for row in containers.findAll("tr"):
cells = row.findAll('td')
states=row.findAll('th') #To store second column data
if len(cells)==6: #Only extract table body not heading
A.append(cells[0].find(text=True))
或者
data = []
rows = table.find_all('tr')
for row in rows:
cols = row.find_all('td')
cols = [ele.text.strip() for ele in cols]
data.append([ele for ele in cols if ele])
解决方案
如果你想要 'td' 的全部文本,请使用:containers = content_page.findAll('table', {'class':'genTbl reportTbl'})
for i in cointainers:
a= i.findAll('td')
print(a)
如果你只是想要'td'的文本然后使用:
for i in containers:
for td in i.findAll('td'):
print(td.text)
推荐阅读
- javascript - 踢命令 | 不和谐.js
- python - 如何获取 os.scandir() 列出的文件索引?
- c++ - winapi中的WS_TABSTOP关于子窗口的编辑控件
- python - 为什么 Python 中的这段代码不能识别字符串中的数字?
- windows - 将 SetDIBitsToDevice 与 RGB 数组一起使用。它比 BitBlt 快吗?
- opengl - 使用OpenGL绘制未填充的圆圈
- android - 如何在android中获得旋转视图或布局的矩形
- mysql - 如何在 SQL 中的某些情况下根据日期进行过滤?
- firebase - Query 快照转换为 List 后 Flutter-Order 发生变化。但我希望列表中的顺序与查询快照相同。有人有什么主意吗?
- python - 无限循环熊猫?