2011-02-07 9 views
2

をbeautifulsoup使用してどのように私はこすりすることができます考える

<a href="www.example.com/"></a> 

<table class="theclass"> 
<tr><td> 
<a href="www.example.com/two">two</a> 
</td></tr> 
<tr><td> 
<a href ="www.example.com/three">three</a> 
<span>blabla<span> 
</td></td> 
</table> 

それは内部のテーブルクラス=「クラス」とは?私は使用しようとしました

soup = util.mysoupopen(theexample) 
infoText = soup.findAll("table", {"class": "the class"}) 

しかし、私は発見ステートメントをさらに定義する方法を知りませんでした。私が試みた何か他のものは、findAll()の結果を配列に変換していました。その後、針が出現するパターンを探していましたが、一貫したパターンを見つけることができませんでした。 ありがとう

+0

は何をスクラップしたいですか?あなたは言った "どのように私はテーブルクラスの中にあるものだけをかき集めることができます="クラス "?あなたはリンクを意味しましたか? – karlcow

答えて

4

私はあなたの質問を理解しました。それは動作するはずのPythonコードです。クラス= "theclass"のすべてのテーブルを検索し、内部でリンクを見つけることを繰り返します。

>>> foo = """<a href="www.example.com/"></a> 
... <table class="theclass"> 
... <tr><td> 
... <a href="www.example.com/two">two</a> 
... </td></tr> 
... <tr><td> 
... <a href ="www.example.com/three">three</a> 
... <span>blabla<span> 
... </td></td> 
... </table> 
... """ 
>>> import BeautifulSoup as bs 
>>> soup = bs.BeautifulSoup(foo) 
>>> for table in soup.findAll('table', {'class':'theclass'}): 
...  links=table.findAll('a') 
... 
>>> print links 
[<a href="www.example.com/two">two</a>, <a href="www.example.com/three">three</a>] 
1

情報テキストは一覧です。あなたはそれを繰り返す必要があります。

>>>for info in infoText: 
>>> print info.tr.td.a 
<a href="www.example.com/two">two</a> 

次に、<table>要素にアクセスできます。ドキュメントのクラス "theclass"を持つテーブル要素が1つだけ必要であれば、soup.find("table", {"class": "the class"})はテーブルを直接与えます。

+0

私はこのエラーを受けて、私はそれがなぜであるかの手がかりがありません。 'トレースバック(最新の最後の呼び出し): ファイル" test.py "、行10、 印刷info.tr.td.a ファイル" /nfs/home/j/d/jdiaz/cs171/BeautifulSoup.py 」、__getattr__ レイズはAttributeError、中線402、 " '%s' はオブジェクトが属性 '%s' は" %(自己.__クラス__.__ name__、ATTR) はAttributeErrorがありません: 'NavigableString' オブジェクトが属性を持っていない「をtr'' –