6

美しいスープでhtmlツリーをトラバースするのを手伝ってくれる人はいますか?

TldHTML出力を解析して、各値を収集した後、python/djangoという名前のテーブルに挿入しようとしています

<div class="rc" data-hveid="53">
<h3 class="r">
<a href="https://billing.anapp.com/" onmousedown="return rwt(this,'','','','2','AFQjCNGqpb38ftdxRdYvKwOsUv5EOJAlpQ','m3fly0i1VLOK9NJkV55hAQ','0CDYQFjAB','','',event)">Billing: Portal Home</a>
</h3>

hrefの属性の値のみを解析する<a>ため、この部分のみ:

https://billing.anapp.com/

の:

<a href="https://billing.anapp.com/" onmousedown="return rwt(this,'','','','2','AFQjCNGqpb38ftdxRdYvKwOsUv5EOJAlpQ','m3fly0i1VLOK9NJkV55hAQ','0CDYQFjAB','','',event)">Billing: Portal Home</a>

私は現在持っています:

for url in urls:
    mb.open(url)
    beautifulSoupObj = BeautifulSoup(mb.response().read())
    beautifulSoupObj.find_all('h3',attrs={'class': 'r'})

問題は上記にあり、要素find_allまで十分に離れていません。<a>

どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1

14
from bs4 import BeautifulSoup

html = """
<div class="rc" data-hveid="53">
<h3 class="r">
<a href="https://billing.anapp.com/" onmousedown="return rwt(this,'','','','2','AFQjCNGqpb38ftdxRdYvKwOsUv5EOJAlpQ','m3fly0i1VLOK9NJkV55hAQ','0CDYQFjAB','','',event)">Billing: Portal Home</a>
</h3>
"""

bs = BeautifulSoup(html)
elms = bs.select("h3.r a")
for i in elms:
    print(i.attrs["href"])

プリント:

https://billing.anapp.com/

h3.r aCSSセレクターです

cssセレクター(私はそれらが好きです)、xpath、または要素内で見つけることができます。セレクターはクラスを持つh3.r aすべてを探し、それらの中から要素を取得します。指定されたクラスの tr に属し、もちろんテーブル内にある td の内部で指定された ID を見つけるような、より複雑な例になる可能性があります。h3ra#an_id table tr.the_tr_class td.the_td_class

これでも同じ結果が得られます。のリストをfind_all返します。1 行で実行できるかどうかわからない再帰フィールドがあります。簡単でクリーンなため、個人的には css セレクターを好みます。bs4.element.Tagfind_all

for elm in  bs.find_all('h3',attrs={'class': 'r'}):
    for a_elm in elm.find_all("a"):
        print(a_elm.attrs["href"])
于 2013-11-14T16:43:19.153 に答える