2017-10-12 128 views
1

提取文本以下命令正确地从一个HTML页面提取表:无法从标签Beautifulsoup

[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:我实际使用的findAll

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()? 

,从我的理解是相当于find_All。

很抱歉,如果这是太基本的问题...

回答

1

find_All方法返回一个ResultSet对象基本上是Tag对象的列表。
textTag属性,所以你应该使用一个更多的列表理解。

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:] 
+1

我需要考虑一下,因为对我来说有点神秘,但它很棒!谢谢。 – user3623123

+0

随时提问任何问题 –