我试图刮掉tumblr档案,div类标签看起来像图片中给出的
课程以" 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。
答案 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'))