该命令的使用说明(美汤re.compile)

Explanation of the use of this command (Beautiful soup and re.compile)

我有以下命令,出于教学目的,我正在努力分解和解释它。

images = bs.find_all('img', {'src':re.compile('.jpg')})

这个函数的全部代码是:

def imagescrape():
    result_images=[]
    html = urlopen('https://en.wikipedia.org/wiki/Rembrandt')
    bs = BeautifulSoup(html, 'html.parser')
    images = bs.find_all('img', {'src':re.compile('.jpg')})
    for image in images:
        result_images.append("https:"+image['src']+'\n') #concatenation!
    return result_images

当然,我们知道images是存放命令结果的变量。 我也知道 bs.find_all 的结果(bs 是创建的对象,.find all 是用于查找 'img' 标签的所有实例的方法)。

find_all 方法有两个参数。一个是 'img' (这可能是任何字符串,如果错误请纠正我)。第二个参数似乎是 dictionary 在这里我有点迷路:

'src':re.compile('.jpg')}

通过研究,我了解到以下内容:

"src" 是字典中的关键字 以及下一部分:

re.compile('.jpg')}

是字典的值部分。

但是为什么要用字典呢?

此外,更重要的是,在这种特定情况下,re.compile('jpg')}实际上在做什么?返回的是什么?为什么在字典中使用它?我需要一个非常适合学生的初学者,请分解解释。

Beautifulsoup 在他们自己的文档中回答了这个问题: https://www.crummy.com/software/BeautifulSoup/bs4/doc/#a-regular-expression

归结为 find_all 使用的正则表达式

你不必使用字典。
可以使用以下选项之一。

images = bs.find_all('img', {'src':re.compile('.jpg')})
等效于以下内容,它使用命名参数。
images = bs.find_all('img', attrs={'src': re.compile('.jpg')})

images = bs.find_all('img', **{'src':re.compile('.jpg')})
与以下相同。
images = bs.find_all('img', src=re.compile('.jpg'))

表达式 re.compile('.jpg') returns 一个正则表达式对象,可以多次使用,也可以多次使用。这是正则表达式的模块化方法。
请记住,某些字符在正则表达式中具有更深的含义。在这种情况下,这涉及字符“.”。我认为你应该使用 '\.jpg'。否则,它将匹配任何后跟 jpg 的字符的含义。