首页 > 解决方案 > 为什么我在使用 BeautifulSoup.find_all 函数时添加了 '/' 字符?

问题描述

我试图从这样的 HTML 页面中查找图像标签:

<img src="../img/gifts/img1.jpg">

<img src="../img/gifts/img1.jpg">

ETC....

但是当我使用 Web Scraping 2 中的这段代码时 - 作者:Ryan Mitchell

from bs4 import BeautifulSoup
import re

html = urlopen('http://www.pythonscraping.com/pages/page3.html')
bs = BeautifulSoup(html,'html.parser')
images = bs.find_all('img',{'src':re.compile('\.\.\/img\/gifts/img.*\.jpg')})

我收到的标签列表如下所示:

[<img src="../img/gifts/img1.jpg"/>,
 <img src="../img/gifts/img2.jpg"/>,
 <img src="../img/gifts/img3.jpg"/>,
 <img src="../img/gifts/img4.jpg"/>,
 <img src="../img/gifts/img6.jpg"/>]

我看到每个标签的末尾都有一个额外的'/'字符?有人可以为我解释一下吗?非常感谢

标签: pythonhtmlbeautifulsoup

解决方案


在 HTML 中,没有结束标签的标签以/>. 这在大多数 HTML 版本中是可选的,除了 XHTML 是强制性的,这是一种很好的做法。Beautifulsoup API 会自动添加这个来美化解析后的 DOM。


推荐阅读