2017-10-12 127 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

隨時提問任何問題 –