2016-05-30 50 views
1

私はウェブサイト上でbeautifulsoup4ウェブスクラップコードをテストしようとしています。ほとんどのことをやったことがありますが、その場所のために1つの属性情報は私が達成するのには少し難解です。beautifulsoup webscrapping pythonでタグrelを取得

span class="callseller-description-icon"> 
<a id="phone-lead" class="callseller-description-link" rel="0501365082" href="#">Show Phone Number</a> 

私はおそらく私のミスで何

try: 
     phone=soup.find('a',{'id':'phone-lead'}) 
     for a in phone: 
      phone_result= str(a.get_text('rel').strip().encode("utf-8")) 
     print "Phone information:", phone_result 
    except StandardError as e: 
     phone_result="Error was {0}".format(e) 
     print phone_result 

その大丈夫であれば必ずこれをしようとしたがいない午前:

コードは次のようになります。あなたはすべてのaタグをしたい場合は、私が取得mの誤差が

NavigableString object has no attribute get_text 
+0

あなたはどんな出力を得ていますか?あなたは '#phone-lead'がjavascriptによって入力されていないと確信していますか? – HyderA

+0

'NavigableString'オブジェクトの属性に 'get_text'属性がありません。 – Panetta

+0

'.find()'は1つの要素を返します。なぜそれを反復していますか? – HyderA

答えて

2

findある電話番号

を持ってrel情報を得ることがちょっと難しいfind_allメソッドを使用し、要素ではないリストを返します。また、rel属性を取得するには、.get()メソッドまたは辞書ルックアップを使用する必要があります。 rel=Trueを追加して、「rel」属性のある「a」タグだけを取得することもできます。

デモ:

>>> for a in soup.find_all('a', {'id':'phone-lead', 'rel': True}): 
...  print(a['rel']) 
... 
['0501365082'] 

をあなたがリストを使用することができ、すべての "相対" のリストを取得するには:find_allを使用してfind()

>>> soup.find('a', {'id': 'phone-lead', 'rel': True}).get('rel') 
['0501365082'] 
  • を使用して

    • 共同憂鬱

      >>> [rel for rel in a['rel'] for a in soup.find_all('a', {'id':'phone-lead', 'rel': True})] 
      ['0501365082'] 
      
  • +0

    その特定のタグには6つ以上の結果があるようです。それをコンマで連結することはできますか?データベースのフィールドに保存する必要があるからです。 – Panetta

    +0

    @Panettaは['str.join'](https://docs.python.org/3.5/library/stdtypes.html?highlight=str.join#str.join ) – styvane

    関連する問題