2017-10-08 31 views
2

嗨,這是我的代碼來檢索ycombinator網站中的第一個主題。當我運行我得到的代碼 -我收到AttributeError:'NoneType'對象沒有屬性'find'

AttributeError: 'NoneType' object has no attribute 'find'for the line 
level2= data.level1.find('table',attrs = {'id':'hnmain'}) 

這些主題嵌套在各種標籤深處,這就是爲什麼我進行如下。我只是在做這個練習,所以我知道這可能不是編寫第一天的最佳方式,而我只是想知道如何克服這個錯誤。

import requests 
from bs4 import BeautifulSoup 
response1= requests.get('https://news.ycombinator.com/') 
response = response1.text 

data = BeautifulSoup(response,"html.parser") 

level1= data.body.find('centre') 
level2= data.level1.find('table',attrs = {'id':'hnmain'}) 
level3= data.level2.find('tbody') 
level4= data.level3.find('tr') 
level5= data.level4.find('td') 
level6= data.level5.find('table.itemlist') 
level7= data.level6.find('tbody') 
level8= data.level7.find('tr#15426209.athing') 
level9= data.level8.find('td.title') 
level10= data.level9.find('a.storylink') 
print(level10.text) 
+0

使用前檢查 – Silencer

回答

3

我想你會因爲data.body部分而出現錯誤。我從來沒有見過這樣做tbh。

這是你的代碼的修改版本的作品:

import requests 
from bs4 import BeautifulSoup 

r = requests.get('https://news.ycombinator.com') 

soup = BeautifulSoup(r.text, 'lxml') 

# print soup.prettify() 

stories = [] 

for a in soup.find_all('a', attrs={'class': 'storylink'}): 
    stories.append([a.text, a['href']]) 

print stories[0] 

[u'Using Binary Diffing to Discover Windows Kernel Memory Disclosure Bugs', 'https://googleprojectzero.blogspot.com/2017/10/using-binary-diffing-to-discover.html'] 

我註釋掉soup.prettify(),但你可以取消它,看看它做什麼 - 它表明你的頁面的源代碼很好的組織方式。

+0

真棒,有效!我從你的代碼中學到了很多東西。乾杯@EvanNowak – West

0

錯誤的來源是..

從美麗的湯文檔 - 如果find()無法找到任何東西,它返回None

這絕對找不到你想要的拼寫不正確,centre標籤..

而且你會想刪除從較低水平的第一級data已經返回標籤元素對象.. level2= level1.find('table',attrs = {'id':'hnmain'})

我仍然得到3級後趕上了..我grepped返回值和tbody沒有任何地方顯示出來..所以我不知道在哪裏的樹其實 突然轉向衝出。

+0

感謝您的糾正。是的,我也無法越過第3級。我認爲問題是tbody,因爲它不顯示在源代碼上,但只在檢查元素上顯示。 – West

相關問題