无法从标签中提取文字Beautifulsoup

时间:2017-10-12 08:01:54

标签: beautifulsoup text-extraction

以下命令正确地从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。

很抱歉,如果这是一个非常基本的问题......

1 个答案:

答案 0 :(得分: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:]