re.compile在使用beautifulsoup时不遵守文本的情况

时间:2014-06-26 18:05:47

标签: python regex beautifulsoup

我正在使用beautifulsoup并且正在循环浏览一系列li个对象,导致我出现问题的两个对象是以下两个:

<li><span class="prefix">Teams</span>6</li>
<li><span class="prefix">New teams</span>4</li>

我根据.find进行匹配,如下所示:

if newdetail.find(text=re.compile("Teams")):

但由于某种原因,re.compile正在注册此if语句下的每个li对象,我想让它区分大小写,以便它只能找到以下内容:

<li><span class="prefix">Teams</span> 6</li>

有人对如何解决这个问题有任何想法吗?

1 个答案:

答案 0 :(得分:0)

  

问题是我解析的html总是没有相同的html部分

我不确定您是否表示您所需的信息并不总是在列表和跨度中,或者是什么,但这里是我如何解析您的数据并提取我想要的总数。

from bs4 import BeautifulSoup

page_filename = "tester.html"
html_file = open(page_filename, 'r').read()

soup = BeautifulSoup(html_file)

lists = soup.find_all('li')

for item in lists:
    span = item.find('span')
    if "Teams" in span.string:
        span.replaceWith('')
        print item.text

如果Teams和Total总是在一条线上,但不一定在列表或跨度中,或者它们在行内不一致地以相同的方式关联,那么您将无法获得所需的内容。理想情况下,您将确定可以找到Team和Total的所有模式,使用BS4的内置方法查找匹配项,并在需要时使用正则表达式完成剩下的工作。