【发布时间】:2018-05-05 10:48:16
【问题描述】:
我正在尝试抓取雅虎的一张股票表。我想打印出每一行的表值(有效)。:
from bs4 import BeautifulSoup as bsoup
import urllib2
import re
url = "https://finance.yahoo.com/screener/predefined/undervalued_growth_stocks"
table_page = urllib2.urlopen(url)
soup = bsoup(table_page,'html.parser')
table = soup.find('table')
table_rows = table.find_all('tr')
for tr in table_rows:
td = tr.find_all('td')
tdrow = [i.text for i in td]
print tdrow
这工作正常,并产生(对于每一行),这个:
[u'AMAT', u'Applied Materials, Inc.', u'58.71', u'+1.09', u'+1.89%', u'7.364M', u'10.282M', u'62.614B', u'20.87', u'']
[u'PK', u'Park Hotels & Resorts Inc.', u'29.01', u'+0.34', u'+1.19%', u'628,369', u'1.216M', u'6.233B', u'2.49', u'']
我想做的是选择第一个子/元素(股票代码,在“AMAT”上方),以便我可以传递它。
如果我使用
print tdrow[0]
它会产生错误
IndexError: 列表索引超出范围
如果我从“print tdrow[0]”中删除缩进,它可以工作(我可以指定 [0] 并获取“PK”,[1] 并获取“Applied Materials Inc.”,但它仅适用于最后一个row - 我想对每一行使用 [0](在“for tr in table_row”循环中)。
我错过了什么?
【问题讨论】:
标签: python beautifulsoup children