BeautifulSoup如何查找包含特定子字符串的属性?这种操作是否可行?

16

我在我的BeautifulSoup代码中有一个调用find_all()的语句。目前这个语句可以获取到所有的图片,但是如果我只想获取那些src属性包含"placeholder"子字符串的图片,该怎么做呢?

for t in soup.find_all('img'):  # WHERE img.href.contains("placeholder")

你可能是指 src 属性,而不是 href 属性吧? - Martijn Pieters
1个回答

30

您可以在src关键字参数中传递一个函数:(点击此处查看函数)

for t in soup.find_all('img', src=lambda x: x and 'placeholder' in x):

或者,一个正则表达式

import re

for t in soup.find_all('img', src=re.compile(r'placeholder')):

或者,不使用find_all(),而是使用select()

for t in soup.select('img[src*=placeholder]'):

5
或者使用CSS选择器:soup.select('img[src*=placeholder]') - Martijn Pieters
@MartijnPieters,那是我也会这样做的,谢谢 :) 我会把它包含在答案中。 - alecxe
你们太棒了。如果有人能更详细地解释一下bs4中css选择器的工作原理,我会非常感激。与scrapy相比,我发现这有点令人困惑,在scrapy中,你可以从元素检查器中复制,但似乎在bs4中不起作用。 - Ivan Calderon
src 后面的撇号代表什么? - Happy John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接