0

次のタグから内部テキスト24,000.00だけを抽出したい:

<span class="itm-price mrs  ">
     <span data-currency-iso="BDT">৳&lt;/span> 
     <span dir="ltr" data-price="24000">24,000.00</span> 
</span>

データを抽出したいページには、このような類似のタグがたくさんあります。

私はこれをやろうとしています:

    for price in soup.find_all('span', {'class': 'itm-price'}):
        item_price = price.get('data-price')
        print(item_price)

しかし、出力が来ています:None

Bs4 doc使用する必要があるhtml5data-*タグのことから学びました:

data_soup.find_all(attrs={"data-foo": "value"})
# [<div data-foo="value">foo!</div>]

私はここでは非常に初心者なので、この方法を使用して結果を出すことはまだできません。

4

3 に答える 3

2

必要なものに直接アクセスできるのに、周囲を探す必要<span>はありません。classまた、キーワード引数を使用することもできます (ただし、それが Python キーワードであることを考えると、属性でそれを試したくない理由は理解しています)。

このget_test()メソッドは、一致するタグのペアの間からコンテンツを抽出するため、非常に単純なプログラムになります。

# coding=utf-8
data = u"""\
<span class="itm-price mrs  ">
     <span data-currency-iso="BDT">৳&lt;/span>
     <span dir="ltr" data-price="24000">24,000.00</span>
</span>
"""

import bs4
soup = bs4.BeautifulSoup(data)
for price in soup.find_all('span', dir="ltr"):
    print(price.get_text())
于 2015-09-02T19:11:30.270 に答える
2

これを試すことができます

>>> import re
>>> from bs4 import BeautifulSoup
>>> html_doc = """
... <span class="itm-price mrs  ">
...      <span data-currency-iso="BDT">৳&lt;/span> 
...      <span dir="ltr" data-price="24000">24,000.00</span> 
... </span>
... <span class="itm-price mrs  ">
...      <span data-currency-iso="BDT">৳&lt;/span> 
...      <span dir="ltr" data-price="25000">25,000.00</span> 
... </span>
... <span class="itm-price mrs  ">
...     <span data-currency-iso="BDT">৳&lt;/span> 
...     <span dir="ltr" data-price="blabla">blabla</span> 
... </span>
... """
>>> soup = BeautifulSoup(html_doc, 'html.parser')
>>> soup.find("span", dir="ltr").attrs['data-price']

# You can loop over

>>> for price_span in soup.find_all("span", attrs={"dir": "ltr", "data-price": re.compile(r"\d+")}):
...     print(price_span.attrs.get("data-price", None))

# output
24000
25000
于 2015-09-02T18:23:48.527 に答える
0

find メソッドを使用します。

>>>from bs4 import BeautifulSoup
>>>url="""<span class="itm-price mrs  "><span data-currency-iso="BDT">৳&lt;/span><span dir="ltr" data-price="24000">24,000.00</span></span>"""
>>>soup.find("span",dir="ltr").string
'24,000.00'
于 2015-09-02T18:05:23.103 に答える