1

PythonでBeautifulSoupを使用して、そのようなhtmlからhtmlを解析したいと思います

<p><b>Background</b><br />x0</p><p>x1</p>
<p><b>Innovation</b><br />x2</p><p>x3</p><p>x4</p>
<p><b>Activities</b><br />x5</p><p>x6</p>"

この結果に:

Background: x0, x1
Innovation: x2, x3, x4
Activities: x5, x6

以下のpythonスクリプトを使用するのにうんざりしています:

from bs4 import BeautifulSoup
htmltext = "<p><b>Background</b><br />x0</p><p>x1</p>
         <p><b>Innovation</b><br />x2</p><p>x3</p><p>x4</p>
         <p><b>Activities</b><br />x5</p><p>x6</p>"
html = BeautifulSoup(htmltext)
for n in html.find_all('b'):
    title_name = n.next_element
    title_content = n.nextSibling.nextSibling
    print title_name, title_content

ただし、これしか取得できません。

Background: x0
Innovation: x2
Activities: x5

コメントをお待ちしております。ご提案をお待ちしております。

4

3 に答える 3

2

あなたは要素<p><b>Innovation</b><br />x2</p><p>x3</p><p>x4</p>に行き、思考<b>を見つけます。それはすべて良いことです。しかし、場所を特定するには、まず要素階層で囲んでいる要素に移動し、そこから次の囲んでいる andを見つける必要があります。x2next_elementx3x4<p><p>x3x4

于 2013-08-23T18:01:45.730 に答える
1

私はbeautifulsoupにはかなり慣れていませんが、これは私にとってはうまくいっています:

import bs4
from bs4 import BeautifulSoup

htmls = """<p><b>Background</b><br />x0</p><p>x1</p>
           <p><b>Innovation</b><br />x2</p><p>x3</p><p>x4</p>
           <p><b>Activities</b><br />x5</p><p>x6</p>"""
html = BeautifulSoup(htmls)

for n in html.find_all('b'):
    title_name = n.next_element
    title_content = n.nextSibling.nextSibling

    results = [title_content]
    for f in n.parent.find_next_siblings():
        el = f.next_element
        if isinstance(el, bs4.element.Tag) and el.name == 'b':
            break
        results.append(el)

    print title_name, results

結果:

Background [u'x0', u'x1']
Innovation [u'x2', u'x3', u'x4']
Activities [u'x5', u'x6']

あなたの例では、キャプチャしようとしているタグに子がないisinstance(el, bs4.element.Tag) and el.name == 'b'ため、区切り文字として使用することにしました。<p>この部分は、解析している実際の Web ページによって多少異なるはずです。

于 2013-08-23T18:44:59.270 に答える