在Beautifulsoup的find_all中使用正则表达式

时间:2017-02-13 01:47:02

标签: python regex beautifulsoup

我试图刮掉tumblr档案,div类标签看起来像图片中给出的

  

enter image description here

课程以" post post -micro"开头,我尝试使用正则表达式但失败了

soup.find_all(class_=re.compile('^post post_micro') 

我尝试在find_all中使用函数

def func(x):                 
    if str(x).startswith('post_tumblelog'):
        return True

并将其用作:

soup.find_all(class_=func)

以上工作正常,我得到了我需要的东西。但我想知道如何使用正则表达式以及为什么在func(x),

str(x).startswith('post_tumblelog')
当类名以" post post_micro"开头时,

评估为True。

1 个答案:

答案 0 :(得分:3)

在BeautifulSoup 4中,您可以使用.select() method,因为它可以接受CSS属性选择器。在您的情况下,您将使用属性选择器[class^="post_tumblelog"],它将选择以字符串class开头的post_tumblelog属性。

soup.select('[class^="post_tumblelog"]')

或者,您也可以使用:

soup.find_all(class_=lambda x: x and x.startswith('post_tumblelog'))

作为旁注,看起来你错过了一个括号,以下是有效的:

soup.find_all(class_=re.compile('^post_tumblelog'))