以下是我的代码.它试图在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语句处理它.