2016-12-16 18 views
0

どこにでも見えますが、なぜそれがエラーを出しているのかまだ分かりません。これはYouTubeのチュートリアルであり、私のコードは同じですので、下に述べた行にこの「NavigableString」エラーがスローされる理由はわかりません(Python 2.7と3.5の両方で試しました)。BeautifulSoup + Requests >> 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 

EDIT:他の有用な情報

チュートリアル:チュートリアルのhttp://youtube.com/watch?v=3xQTJi2tqgk

サンプルコード(時間:29:16):チュートリアルhttps://youtu.be/3xQTJi2tqgk?t=29m16s

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

+0

'NavigableString'は、タグ内のプレーンテキストを意味し、これを使用していることができますサブ要素があるので、 'find_all'は必要ありません。 – furas

+0

質問にお答えしましたが、チュートリアルとURLへのリンクを追加して、あなたのコードが本当に同一であるかどうかを確認します。 – 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]はドンはあなたが.contentsを呼び出している理由であるあなただけのタグを取得することを期待することができるあなたの「スープ」、でfind_all方法

+0

「.contents [0]」は使用しないでください。 – Keretto

+0

投稿HTMLコードまたはURL –

2

を持っていたNavigableStringです。タグではないもので.contentを呼び出した場合は、エラーが発生します。これはあなたに起こっています。

スープの中のすべてがタグであるという期待が問題です。スープの中のすべてがタグであるとは限りません。コメントや空白行やランダムなものがあります。これらがループを通過し、それらの.contentsを呼び出すと、対応する属性がなく、エラーをスローします。タグではないため、NavigableStringです。

まず、ループタグをNavigableStringから分離する必要があります。これを行う: 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 
関連する問題