2016-05-22 29 views
2

我已經颳了一個論壇頁面,我已將所有帖子保存在名爲post_list的列表中。但它似乎的,我不能再往前走,找到文章作者:刮<span>使用BeautifulSoup的標記文本沒有文字屬性

以下是我在運行命令的,但不嘗試查找的文本得到:

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屬性和測試其他一些問題的,我有發現,但他們沒有工作。

+0

,因爲它不是'.text'但'.string',根據文檔? – spectras

+0

不,它也沒有.string屬性... – senaps

+0

@spectras BS元素中都有'text'和'string'。問題是,'findAll()'以ResultSet'的形式返回多個元素,它沒有'text'或'string' – har07

回答

3

正如錯誤信息清楚地表明,這是因爲findAll()返回ResultSet它沒有屬性text。你需要通過結果來迭代,或使用列表理解:

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

如果總是在每個post(從你的第一個代碼段的輸出判斷)只有一個span元素,那麼你應該能夠使用find()代替findAll()

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

謝謝這實際上可行... – senaps

+0

@senaps沒問題,歡迎您! – har07

相關問題