1

私は最近美しいスープ 4 を使用しており、これのいくつかの基本を理解するのに苦労しています (何らかの理由で bs3.x でまったく問題ありませんでした)。たとえば、次のような簡単なことから始めましょう。

data=soup.find_all('h2')

次のような結果が得られます。

<h2><a href=\"/accurate-data/210-0023.prd?pageLevel=&amp;skuId=210-0023\">more-accurate-data</a></h2>

これは問題ありません。しかし、上記の文字列を正規表現したい場合は、行に沿って何かを使用します(上記が「temp」に保存されていると仮定します):

t=str(re.compile(r"""<h2><a href=\\"/accurate(.*?)\\">""").search(str(temp)).group(1))

私は得る:

AttributeError: 'NoneType' object has no attribute 'group'

これは奇妙だと思います-なぜなら、Pythonインタープリターで行うと、次のようなものだからです:

k=r"""<h2><a href=\"/accurate-data/210-0023.prd?pageLevel=&amp;skuId=210-0023\">more-accurate-data</a></h2>"""

上記の正規表現を使用すると、すべて正常に動作します。bs4 によって生成された「タグ」タイプが正規表現できないように見えるのはなぜだろうと思っています。今、私は何かばかげたことをしているのかもしれないし、bs3.x と bs4 の間で気づいていない何かが変わったのかもしれません。これに関する助けをいただければ幸いです。ありがとう。

4

1 に答える 1

2

repr文字列のを確認する必要があります。

>>> a=r"""<h2><a href=\"/accurate-data/210-0023.prd?pageLevel=&amp;skuId=210-0023\">more-accurate-data</a></h2>"""
>>> print repr(a)
'<h2><a href=\\"/accurate-data/210-0023.prd?pageLevel=&amp;skuId=210-0023\\">more-accurate-data</a></h2>'

そして、正規表現はこの表現で機能します:

>>> regex = re.compile(r"""<h2><a href=\\"/accurate(.*?)\\">""")
>>> regex.match(a)
<_sre.SRE_Match object at 0x20fbf30>

問題は、reprを印刷しなかったため、美しいスープの結果が異なることです。repr正規表現を処理するときは、このようなことを避けるために、関連する文字列を確認することをお勧めします。

于 2012-10-23T05:46:05.453 に答える