gpt4 book ai didi

python - 使用 Python 从 HTML 页面中提取图像

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:53 30 4
gpt4 key购买 nike

下面是我的代码。它试图在 html 的图像标签中获取图像的 src。

import re
for text in open('site.html'):
matches = re.findall(r'\ssrc="([^"]+)"', text)
matches = ' '.join(matches)
print(matches)

问题是当我输入类似的东西时:

<img src="asdfasdf">

它可以工作,但是当我放入一个完整的 HTML 页面时,它什么也没有返回。为什么要这样做?我该如何解决?

Site.html 只是标准格式的网站 html 代码。我希望它忽略所有内容,只打印图像的源代码。如果您想查看 site.html 中的内容,请转到基本 HTML 网页并复制所有源代码。

最佳答案

既然可以轻松使用 BeautifulSoup 之类的东西来解析 HTML,为什么还要使用正则表达式来解析 HTML? :

>>> from bs4 import BeautifulSoup as BS
>>> html = """This is some text
... <img src="asdasdasd">
... <i> More HTML <b> foo </b> bar </i>
... """
>>> soup = BS(html)
>>> for imgtag in soup.find_all('img'):
... print(imgtag['src'])
...
asdasdasd

您的代码不起作用的原因是因为 text 是文件的一行。因此,您只能在每次迭代中找到一行的匹配项。虽然这可能有效,但请考虑最后一行是否没有图像标签。 matches 会是一个空列表,join 会变成''。您正在覆盖变量 matches 每一行。

您想对整个 HTML 调用 findall:

import re
with open('site.html') as html:
content = html.read()
matches = re.findall(r'\ssrc="([^"]+)"', content)
matches = ' '.join(matches)

print(matches)

在这里使用 with 语句更像 pythonic。这也意味着您不必在之后调用 file.close(),因为 with 语句会处理它。

关于python - 使用 Python 从 HTML 页面中提取图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18294711/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com