如何找到具有特定文本的HTML标记?美体

2024-09-30 18:34:50 发布

您现在位置:Python中文网/ 问答频道 /正文

来源如下:

<span class="new"> <a class="blog" href="http://whatever1.com" rel="nofollow">whatever1</a> do something at <a class="others" href="http://example1.com" rel="nofollow">example1</a></span>

<span class="new"> <a class="blog" href="http://whatever2.com" rel="nofollow">whatever2</a> do other things at <a class="others" href="http://example2.com" rel="nofollow">example2</a></span>

<span class="new"> <a class="blog" href="http://whatever3.com" rel="nofollow">whatever3</a> do something at <a class="others" href="http://example3.com" rel="nofollow">example3</a></span> 

我想找到所有包含do something at<span class="new">,下面是我的代码,我只是不知道它为什么不起作用:

^{pr2}$

什么也没找到。如果我删除text = re.compile('.*do something.*')以上所有的标记都可以找到,我知道我的regex模式应该有问题,那么正确的形式是什么?在


Tags: comhttpnewblogdosomethingatclass
3条回答

迭代html文件内容并打印匹配的行。这里我用列表l替换了文件内容:

>>> l = ['<span class="new"> <a class="blog" href="http://whatever1.com" rel="nofollow">whatever1</a> do something at <a class="others" href="http://example1.com" rel="nofollow">example1</a></span>', 

'<span class="new"> <a class="blog" href="http://whatever2.com" rel="nofollow">whatever2</a> do other things at <a class="others" href="http://example2.com" rel="nofollow">example2</a></span>',

'<span class="new"> <a class="blog" href="http://whatever3.com" rel="nofollow">whatever3</a> do something at <a class="others" href="http://example3.com" rel="nofollow">example3</a></span>' ]
>>> for i in range(len(l)):
    if re.search('<span class="new">.*do something.*', l[i]):
        print l[i]


<span class="new"> <a class="blog" href="http://whatever1.com" rel="nofollow">whatever1</a> do something at <a class="others" href="http://example1.com" rel="nofollow">example1</a></span>
<span class="new"> <a class="blog" href="http://whatever3.com" rel="nofollow">whatever3</a> do something at <a class="others" href="http://example3.com" rel="nofollow">example3</a></span>
>>> 

您可以尝试混合方法:

soup = bs4.BeautifulSoup(html, "lxml")
spans = soup.findAll("span", attrs = {"class": "new"})
regex = re.compile('.*do something at.*')
desired_tags = [span for span in spans if regex.match(span.text)]

这就是我通常查找文本的方式。

spans = soup.findAll("span", attrs = {"class": "new"})
for s in spans:
    if "do something" in str(s):

相关问题 更多 >