【发布时间】:2016-11-05 12:06:40
【问题描述】:
我正在尝试编写代码,以使用 Python 及其 urllib2 和 BeautifulSoup 库从网站中提取数据。
我尝试遍历所需表的行,然后将“td”中指定的每一行中的数据存储到列表变量row_data中。事件虽然我可以打印整个列表,但我无法访问特定索引处的列表,并且解释器抛出“列表索引超出范围”错误。这是我的代码和输出。
import urllib2
from bs4 import BeautifulSoup
link = 'http://www.babycenter.in/a25008319/most-popular-indian-baby-names-of-2013'
page = urllib2.urlopen(link)
soup = BeautifulSoup(page)
right_table = soup.find('table', class_= 'contentTable colborders')
name=[]
meaning=[]
alternate=[]
for row in right_table.find_all("tr"):
row_datas = row.find_all("td")
print row_datas
print row_datas[0]
输出:
[]Traceback (most recent call last):
File "C:\Users\forcehandler\Documents\python\data_scrape.py", line 41, in <module>
print row_datas[0]
IndexError: list index out of range
[Finished in 1.6s]
我尝试了类似的代码来标记任何明显的错误,但无济于事。 代码:
i = [range(y,10) for y in range(5)]
for j in i:
print j
print j[0]
输出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0
[1, 2, 3, 4, 5, 6, 7, 8, 9]
1
[2, 3, 4, 5, 6, 7, 8, 9]
2
[3, 4, 5, 6, 7, 8, 9]
3
[4, 5, 6, 7, 8, 9]
4
我是编程新手,在其他任何地方都找不到帮助。提前致谢!
编辑:Traceback 之前的“[]”可能在复制粘贴时意外滑入输出。感谢您提供有用的答案/建议。
解决方案:我在使用数据之前没有检查数据的完整性。事实证明,第一行仅包含“th”值而没有“td”值,因此出现错误。
经验教训:始终在将数据投入使用之前对其进行测试。
附带说明:这是我在 StackOverflow 上的第一个问题,如此快速、高质量和有用的回答让我不知所措。
【问题讨论】:
-
print row_datas是否随时显示空列表? -
您的
print row_datas行在该回溯之前打印出[](您有[]Traceback,而不是Traceback,您可能想弄清楚为什么您似乎没有打印换行符)。列表为空,索引0处没有元素。 -
查看该表,52 行中只有 50 行包含
td元素;有两行带有th标题元素。
标签: python beautifulsoup urllib2