以下命令正确地从HTML页面中提取表格:
[tr.findAll('td') for tr in table.findAll('tr',{'class': "js-file-line"})]
[[<td class="blob-num js-line-number" data-line-number="1" id="L1"></td>],
[<td class="blob-num js-line-number" data-line-number="2" id="L2"></td>,
<td>Arsenal</td>,
<td>38</td>,
<td>26</td>,
<td>9</td>,
<td>3</td>,
<td>79</td>,
<td>36</td>,
<td>87</td>],
[<td class="blob-num js-line-number" data-line-number="3" id="L3"></td>,
<td>Liverpool</td>,
etc.
我想修改命令以提取每个td的内容。 但由于.text返回错误,我无法从每一行中提取文本: 我使用以下命令:
[tr.findAll('td').text[1:] for tr in table.findAll('tr',{'class': "js-file-line"})][1:]
其中[1:]用于跳过标题(并且它们工作正常。经过测试)。问题是.text导致以下错误:
ResultSet object has no attribute 'text'.
You're probably treating a list of items like a single item.
Did you call find_all() when you meant to call find()?
我实际上正在使用findAll,根据我的理解,它等同于find_All。
很抱歉,如果这是一个非常基本的问题......
答案 0 :(得分:1)
find_All
方法返回一个ResultSet
对象,该对象基本上是Tag
个对象的列表。
text
是Tag
属性,因此您应该再使用一个列表推导。
txt = [
[td.text for td in tr.find_all('td')][1:]
for tr in table.find_all('tr', {'class': "js-file-line"})
][1:]
或者,如果行仅包含“td”标记,则可以使用strings
生成器。
txt = [list(tr.strings)[1:] for tr in table.find_all('tr', {'class': "js-file-line"})][1:]