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

以下是我的代码.它试图在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网页并复制所有源代码.

解决方法:

为什么使用正则表达式解析HTML时,可以使用BeautifulSoup之类的东西轻松地执行此操作:

>>> 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

您的代码无法工作的原因是因为文本是文件的一行.因此,您只在每次迭代中找到一条线的匹配项.虽然这可能有效,但请考虑最后一行是否没有图像标记.匹配将是一个空列表,并且join将使其成为”.您将覆盖变量匹配每一行.

你想在整个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 – 使用BeautifulSoup提取特定的dl和dd列表元素


下一篇:如何解压缩zip文件的特定目录中的所有文件?