2

多くの HTML ページで文字列「USB 2 ポート」を見つけようとしています。問題は、文字列の前に大量の空白があることです。場合によっては 4、20、または 50 個の空白文字があります。

以下は、文字列の前に単一の空白文字を使用して機能します。

soup.find(text=' USB 2 ports')

USB の前の 1 つのスペースに注意してください。

find()Beautiful Soup'sに、先行するすべての空白を無視して文字列を検索するように指示するにはどうすればよいですか?

4

1 に答える 1

3

前後の空白に関係なく、テキストを検索する正規表現を定義できます。

import re
pattern = re.compile(r'\s*%s\s*' % 'USB 2 ports')
result = soup.find(text=pattern)

例えば:

>>> soup = BeautifulSoup("""
... <html>
...   <body>
...     <ul>
...       <li>
...         USB 2 ports
...       </li>
...       <li>
...         Firewire ports
...       </li>
...       <li>
...         HDMI ports
...       </li>
...     </ul>
...   </body>
... </html>
... """)
>>> import re
>>> pattern = re.compile(r'\s*%s\s*' % 'USB 2 ports')
>>> soup.find(text=pattern)
u'\n        USB 2 ports\n      '

編集soup.find():何が起こっているのかをより明確にすることを期待して、変数に結果を明示的に割り当てるように上記のコードを変更しました。明確にするために、最初はサンプルコードの後に​​私の回答のコードをモデル化しましたが、そのコードが実際に何をするかについて多少混乱している可能性があると思います。

于 2013-08-21T20:13:13.557 に答える