1

私はひもを持っています、

data = 'very <strong class="keyword">Awesome</strong> <strong class="keyword">Book</strong> discount'

リストの出力を次のように取得したい

ans = ['very','<strong class="keyword">Awesome</strong>','<strong class="keyword">Book</strong>','discount']

だから私は単語の位置を知ることができ、また単語はタグで発生しました。私はBeautifulSoupを使用して単語を抽出しましたが、withという単語はありません。しかし、私は位置を見つける必要があります。私が試したコード。

from bs4 import BeautifulSoup as BS
data = 'very <strong class="keyword">Awesome</strong> <strong class="keyword">Book</strong>'
soup = BS(data)
to_extract = soup.findAll('strong')
[comment.extract() for comment in to_extract]
soup = str(soup)
notInStrongWords = []
for t in to_extract:
    t_soup = BS('{0}'.format(t))
    t_tag = t_soup.strong
    matchWords.append(t_tag.string)
soup = re.sub("[^A-Za-z0-9\\-\\.\\(\\)\\\\\/\\&': ]+",' ', soup)
soup = re.findall('[(][^)]*[)]|\S+', soup)
InStrongWords = []
InStrongWords = [x for x in soup]

前もって感謝します。

4

3 に答える 3

1

試してみてください(Python2.xの場合-Python3はユニコードが異なります):

from bs4 import BeautifulSoup as BS
data = 'very <strong class="keyword">Awesome</strong> <strong class="keyword">Book</strong>'
soup = BS(data)
pTag = soup.p
list = [ unicode(child) for child in pTag.children ]
print list

戻り値:

[u'very ', u'<strong class="keyword">Awesome</strong>', u' ', u'<strong class="keyword">Book</strong>']

基本的に、子要素を繰り返し処理して、Unicode文字列に戻します。スペースを除外することもできますが、これは技術的にはHTMLに存在します。

どの子が「強い」かを確認する必要がある場合は、次のようにすることができます。

import bs4

data = 'very <strong class="keyword">Awesome</strong> <strong class="keyword">Book</strong>'
soup = bs4.BeautifulSoup(data)

list = [ (child.name if isinstance(child, bs4.Tag) else None, unicode(child)) for child in soup.children ]
print list

これはタプルのリストを返します。各タプルは(タグの名前またはタグがない場合はNone、HTML)です。

[(None, u'very '), (u'strong', u'<strong class="keyword">Awesome</strong>'), (None, u' '), (u'strong', u'<strong class="keyword">Book</strong>')]
于 2012-07-24T02:14:44.410 に答える
1

Andrew Alcokの回答に基づいて、Ansrewに感謝します。

まあ言ってみれば、

data = ['very <strong class="keyword">Awesome</strong> <strong class="keyword">Book</strong>','<strong class="keyword">Awesome</strong> <strong class="keyword">Book</strong> discount']

python2.xとBeautifulSoup4の場合

from bs4 import BeautifulSoup as BS
for d in data:
    soup = BS(d)
    soupPTag = soup.p
    if soupPTag:
        soupList = [unicode(child) for child in soupPTag.children if child!=" "]
        print soupList
    else:
        soupBodyTag = soup.body
        soupList = [unicode(child) for child in soupBodyTag.children if child!=" "]
        print soupList

これは必要な答えを与えるでしょう。

于 2012-07-24T19:38:22.960 に答える
0

re.finditer(の代わりにre.findall)とを取得できる一致オブジェクトを提供します。start()end()

于 2012-07-23T21:46:43.363 に答える