2015-03-25 45 views
0

HTML文件可以从hereBeautifulSoup返回空使用find_all( “跨度”,文本= re.compile( “T”))

soup = BeautifulSoup(open(r"test.html"),from_encoding="ascii") 
In [43]:soup.find_all("span") 
Out[43]: 
    [<span style="position:absolute; border: gray 1px solid; left:0px; top:50px; width:648px; height:783px;"></span>, 
    <span style="font-family: LJOGFN+HelveticaNeueLTStd-Bd; font-size:7px">S 
    <br/></span>, 
    <span style="font-family: LJOGFN+HelveticaNeueLTStd-Bd; font-size:7px">T 
    <br/></span>, 
    <span style="font-family: LJOGFN+HelveticaNeueLTStd-Bd; font-size:8px">N 
    <br/></span>, 
    <span style="font-family: LJOGFN+HelveticaNeueLTStd-Bd; font-size:7px">E 
    <br/></span>, 
    <span style="font-family: LJOGFN+HelveticaNeueLTStd-Bd; font-size:7px">T 
    <br/></span>, 
    <span style="font-family: LJOGFN+HelveticaNeueLTStd-Bd; font-size:8px">N 
    <br/></span>] 

In [44]:soup.find_all("span", text = re.compile("T")) 
Out[44]:[] 

下载为什么它返回空列表?这与编码有关吗?

更新:下面的代码工作:

In [87]: 
def aa(tag): 
    return tag.name == "span" and re.match("T", tag.text) 
In [88]:soup.find_all(aa)[0] 

它是如何工作的这条路?

+0

你可以做这样的'[我为我(“跨度”) i.text =='N']' – 2015-03-25 07:56:30

+0

@AvinashRaj它不起作用,我只是更新了问题 – Sean 2015-03-25 15:16:20

回答

1

根据文档(http://www.crummy.com/software/BeautifulSoup/bs4/doc/#the-text-argument),您的代码应该工作。你应该提交一个错误报告。

编辑:它看起来像这个问题是由<span>元素中的<br>标签引起的。这绝对是一个错误。

要围绕这个工作,使用lambda,这样你就不需要定义一个函数:在s.findAll如果

soup.find_all(lambda tag: tag.name == "span" and re.match("T", tag.text)) 
相关问题