2016-12-16 63 views
0

無處不在,我仍然不知道它爲什麼會給出錯誤。這是一個YouTube教程,我的代碼是相同的,所以我不知道爲什麼它會在下面提到的行中引發這個'NavigableString'錯誤(我在Python 2.7和3.5中都試過)。BeautifulSoup +請求>> AttributeError:'NavigableString'對象沒有屬性'find_all'

import requests 
from bs4 import BeautifulSoup 


url= "https://example.com" 
r = requests.get(url) 

soup = BeautifulSoup(r.content) 

data = soup.find_all("div", {"class": "example"}) 

for item in data: 
    print item.contents[0].find_all("a", {"class": "ex"}) # Error line 

編輯:其他有用的信息

教程:在教程http://youtube.com/watch?v=3xQTJi2tqgk

示例代碼(時間:29:16):https://youtu.be/3xQTJi2tqgk?t=29m16s

網址教程:http://www.yellowpages.com/los-angeles-ca/coffe?g=los%20angles%2c%20ca&q=coffe

+0

'NavigableString'指內標籤的純文本從而可以沒有subelementes,所以它不需要'find_all'。 – furas

+0

更好的問題添加鏈接到教程和網址,我們看到如果你的代碼是真正相同的(如果它可以與當前頁面 - 也許在頁面上更改的東西)。 – furas

+0

https://www.youtube.com/watch?v=3xQTJi2tqgk – Keretto

回答

-1

A tag’s children are available in a list called .contents:

兒童包含標籤和NavigableString,在你的情況下,.contents[0]是NavigableString它不要沒有find_all方法

+0

所以我不應該使用'.contents [0]'? – Keretto

+0

發佈html代碼或網址 –

2

在你的「湯」你可能預期要得到的只是標籤,這就是爲什麼你在呼喚.contents 。如果你對某個不是標籤的內容調用.contents,那麼它會拋出一個錯誤,這正在發生在你身上。

期待湯裏的東西都是標籤就是問題所在。並非湯中的所有東西都是標籤,顯然來自您的錯誤。可能會有評論,或空行或隨機事件。當這些通過循環進入,你調用它們的內容時,它們沒有對應的屬性並拋出錯誤,因爲它們根本不是標籤,所以它們是NavigableStrings。

您應該首先將您的循環標記從NavigableStrings中分離出來。這樣做: import NavigableString。然後在你的循環使用,如果else語句,或者說這種效果(嘗試,但最後也將工作,如果語句語法適用於該條款)

if isinstance(object to test, NavigableString): 
    Do something in this situation 
else: 
    Things coming through here are tags, do something with this 
相關問題