使用BeautifulSoup刮取<span>标记文本没有文本属性

时间:2016-05-22 11:31:25

标签: python web-scraping beautifulsoup

我已经删除了论坛页面,我已将所有帖子保存在名为post_list的列表中。但似乎我不能再进一步找到帖子作者了:

这是我在运行命令时得到的,而不是试图找到文本:

for post in post_list:
    print post.findAll("span" , {"itemprop" : "name"})

这给了我:

[<span class="hide" itemprop="name">00Amin</span>]
[<span class="hide" itemprop="name">arminheidari</span>]
[<span class="hide" itemprop="name">Zapad</span>]
[<span class="hide" itemprop="name">iMosi</span>]
[<span class="hide" itemprop="name">arminheidari</span>]
[<span class="hide" itemprop="name">alen</span>]
[<span class="hide" itemprop="name">mahdavi3d</span>]
[<span class="hide" itemprop="name">arminheidari</span>]
[<span class="hide" itemprop="name">alen</span>]
[<span class="hide" itemprop="name">rezatizi</span>]
[<span class="hide" itemprop="name">Trooper</span>]
[<span class="hide" itemprop="name">rasoolmr</span>]
[<span class="hide" itemprop="name">arminheidari</span>]
[<span class="hide" itemprop="name">iMosi</span>]
[<span class="hide" itemprop="name">anybody</span>]

但是,如果我使用.text尝试相同的代码:

for post in post_list:
    print post.findAll("span" , {"itemprop" : "name"}).text

我得到:

AttributeError: 'ResultSet' object has no attribute 'text'

如果我作弊并将for循环结果保存在变量(或列表)中,然后尝试从那里获取文本,我再次失败!

posts = []
for post in post_list:
     posts.append(post.findAll("span",  {"itemprop" : "name"}))

我没有错误,但我再也找不到任何.text属性

我已经搜索并测试了我发现的其他一些问题,但它们无效。

1 个答案:

答案 0 :(得分:3)

正如错误消息明确暗示的那样,那是因为findAll()返回ResultSet,其中没有属性text。您需要遍历结果,或使用列表解析:

for post in post_list:
    print [span.text for span in post.findAll("span" , {"itemprop" : "name"})]

如果每个span中始终只有一个post元素(根据您的第一个代码段的输出判断),那么您应该能够使用find()代替{{ 1}}:

findAll()