2016-12-31 4 views
1

私は休暇中のHTMLからテキストを取り出す特定の方法を作成しようとしています。BeautifulSoup4 soup.find( 'tag'、text = re.compile( 'my text'))は時々動作します

</table> 
<table border="0" cellpadding="0" cellspacing="0"> 
<tr> 
<td>Close Date:</td> 
<td> June 19, 2008</td> 

私の質問は、なぜ何かのようである:私はそれが何も返さない、より具体的な何かをしようとすると、

<td>Close Date:</td> 

しかし:

soup.find('td', text=re.compile('Close')) 

戻ります。

​​3210

私は間違ったテキストを拾うことなく、複数のWebページを介して実行できるように、できる限りのスクリプトがなどの特定したいと思います。

+0

は '(soup.findありません'td'、text = re.compile( 'Close \ s + Date:')) '作業しますか?これは 'Close'と' Date'の間の1つ以上の空白にマッチします。これは実際にスペースが非破壊スペースである場合に役立ちます(http://stackoverflow.com/q/1357078/190597) (すなわち ' ') – unutbu

+0

@unutbu '\ s'は'   'にマッチするとは思わない。 – DyZ

+0

はい!それはうまくいった!大いに義務付けられる –

答えて

1

CloseDateの間に改行されないスペースがある可能性があります。その場合、あなたは1-または-以上空白一致する\s+を使用することができます。たとえば

print(soup.find('td', text=re.compile('Close\s+Date:'))) 

を、

import re 
import bs4 as bs 

content = '''\ 
<table border="0" cellpadding="0" cellspacing="0"> 
<tr> 
<td>Close&nbsp;Date:</td> 
<td> June 19, 2008</td> 
''' 

soup = bs.BeautifulSoup(content, 'lxml') 
print(soup.find('td', text=re.compile('Close\s+Date:'))) 

利回り

<td>Close Date:</td> 
関連する問題