2016-08-25 4 views
3

が、どんなに私がしようとするもの、それは動作しません(文字列=なし)PythonでBeautifulSoupのタグの後に文字列が見つかりませんか?私はそれの文字列を取得したいこのHTMLで

 <a href="/analyze/default/index/49398962/1/34925733" target="_blank"> 
     <img alt="" class="ajax-tooltip shadow radius lazy" data-id="acctInfo:34925733_1" data-original="/upload/profileIconId/default.jpg" src="/images/common/transbg.png"/> 
     Jue VioIe Grace 
     </a> 

ページにこれらのいくつかはありませんし、私はこれを試してみました:

print([a.string for a in soup.findAll('td', class_='tou')]) 

出力はまったくありません。

編集:ここでは、ページ全体のHTMLで、これが役に立てば幸い、単に明確にするために、私は上記のようなすべてのインスタンスを検索し、その文字列

http://pastebin.com/4mvcMsJu

+0

"文字列"を出力にしましたか? 'Jue VioIe Grace'?他に何か? – John1024

+0

「soup.find_all( 'td'、class _ = 'tou') 'が何も見つからなかった場合、出力は「None」 – edsheeran

答えて

3

のようなものを出力するsoup.findAll(text=True)を呼び出すことができ、テキストTDの子であるアンカーの内側にされています

明らか
print([td.a.text for td in soup.find_all('td', class_='tou')]) 

ありクラスTOUまたはあなたなしでリストを取得することはないとのTDです:

In [10]: html = """<td class='tou'> 
      <a href="/analyze/default/index/49398962/1/34925733" target="_blank"> 
     <img alt="" class="ajax-tooltip shadow radius lazy" data-id="acctInfo:34925733_1" data-original="/upload/profileIconId/default.jpg" src="/images/common/transbg.png"/> 
     Jue VioIe Grace 
     </a> 
     </td>""" 

In [11]: soup = BeautifulSoup(html,"html.parser") 

In [12]: [a.string for a in soup.find_all('td', class_='tou')] 
Out[12]: [None] 

In [13]: [td.a.text for td in soup.find_all('td', class_='tou')] 
Out[13]: [u'\n\n  Jue VioIe Grace\n  '] 

また、TD上の.text呼び出すことができます。

In [14]: [td.text for td in soup.find_all('td', class_='tou')] 
Out[14]: [u'\n\n\n  Jue VioIe Grace\n  \n'] 

しかし、それは多分あなたが望むよりも多くなるだろう。ペーストビンからあなたの完全なHTML使用して

:この場合

In [18]: import requests 

In [19]: soup = BeautifulSoup(requests.get("http://pastebin.com/raw/4mvcMsJu").content,"html.parser") 

In [20]: [td.a.text.strip() for td in soup.find_all('td', class_='tou')] 
Out[20]: 
[u'KElTHMCBRlEF', 
u'game 5 loser', 
u'Cris', 
u'interestingstare', 
u'ApoIlo Price', 
u'Zary', 
u'Adrian Ma', 
u'Liquid Inori', 
u'focus plz', 
u'Shiphtur', 
u'Cody Sun', 
u'ApoIIo Price', 
u'Pobelter', 
u'Jue VioIe Grace', 
u'Valkrin', 
u'Piggy Kitten', 
u'1 and 17', 
u'BLOCK IT', 
u'JiaQQ1035716423', 
u'Twitchtv Flaresz'] 

td.text.strip()はあなたに同じ出力できます:

In [23]: [td.text.strip() for td in soup.find_all('td', class_='tou')] 
Out[23]: 
[u'KElTHMCBRlEF', 
u'game 5 loser', 
u'Cris', 
u'interestingstare', 
u'ApoIlo Price', 
u'Zary', 
u'Adrian Ma', 
u'Liquid Inori', 
u'focus plz', 
u'Shiphtur', 
u'Cody Sun', 
u'ApoIIo Price', 
u'Pobelter', 
u'Jue VioIe Grace', 
u'Valkrin', 
u'Piggy Kitten', 
u'1 and 17', 
u'BLOCK IT', 
u'JiaQQ1035716423', 
u'Twitchtv Flaresz'] 

をしかし、あなたは違いがあることを理解すべきです。また、我々はアンカーにタグテキストに検索を制限したい場合は.string vs .text

+0

@ John1024です。ループは決して起こらないので、そこには何もないだろう。 –

+0

OPは「なし」ではなく「なし」と書いた。この質問には多少のあいまいさがあります。我々はOPが明確になるのを待たなければならない。 – John1024

+1

@ John1024、htmlはちょうど –

0

まあを抽出する必要があり、あなたのsoup変数の場合そのコードのhtml部分をオフにして、その中にの部分がないので、出力はNoneとなります。の要素はclass=touでありません。今

、あなたがそのテキストを取得したい場合は、多分あなたはあなたが親TDからを選択し、の.text を呼び出す必要が['\n', '\n Jue VioIe Grace\n ']

2
>>> from bs4 import BeautifulSoup 
>>> soup = BeautifulSoup(open('input.html'), 'lxml') 
>>> [tag.text.strip() for tag in soup] 
[u'Jue VioIe Grace'] 

の違い:あなたのサンプル入力にはtdタグが存在しないことを

>>> [tag.text.strip() for tag in soup.findAll('a')] 
[u'Jue VioIe Grace'] 

注意をし、何のタグがありませんアトリビュートclass_='tou'

関連する問題