2017-10-08 56 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。ここで

は働くあなたのコードの修正版です:私は soup.prettify()をコメントアウトしまし

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'] 

を、あなたはそれをアンコメントし、それが何をするか見ることができます - それはであなたのページのソースコードを示しますうまく整理された方法。それはNoneを返し find()は何かを見つけることができない場合は、 -

+0

素晴らしいです!私はあなたのコードから多くのことを学びました。 Cheers @EvanNowak – West

0

エラーの原因が..です美しいスープのドキュメントから

綴りが間違っているとして、それは間違いなくあなたが欲しいcentreタグを見つけることができません...最初のレベルはすでにタグ要素を返しているよう

はまた、あなたが低いレベルからdataを削除したいしようとしていますオブジェクト..私はまだレベル3の後に巻き込まいlevel2= level1.find('table',attrs = {'id':'hnmain'})

は..私は、戻り値をgreppedとtbodyはどこにも表示されませんでした...そうツリーが実際に がオフに逸れところ私はわかりません。

+0

訂正していただきありがとうございます。私もレベル3を超えることはできませんでした。問題はソースコードには表示されませんが、検査要素のみに問題があると思います。 – West

関連する問題