2016-12-31 94 views
1

我想创建一个具体的方式,从遗留的HTML中拉出文本。BeautifulSoup4 soup.find('标记',text = re.compile('我的文本'))只有工作有时

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

我的问题是,为什么是这样的:

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

回报:

<td>Close Date:</td> 

然而,当我尝试做一些更具体的它没有返回。

​​3210

我想使脚本尽可能具体,以便我可以通过多个网页运行它,而不会出现错误的文本。

+0

是否'soup.find( 'td',text = re.compile('Close \ s + Date:'))'工作?这将在'Close'和'Date'之间匹配一个或多个空格 - 如果该空间实际上是一个[不间断空格](http://stackoverflow.com/q/1357078/190597) (即' ') – unutbu

+0

@unutbu我不相信'\ s'匹配' '。 – DyZ

+0

是的!这确实奏效!很多信息 –

回答

1

CloseDate之间可能存在非破坏性空间。在这种情况下,你可以使用\s+匹配1或更多的空格:

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> 
相关问题