Nov*_*mer 3 python image extract python-3.x
以下是我的代码.它试图在html中的图像标记内获取图像的src.
import re
for text in open('site.html'):
matches = re.findall(r'\ssrc="([^"]+)"', text)
matches = ' '.join(matches)
print(matches)
Run Code Online (Sandbox Code Playgroud)
问题是当我输入类似的东西:
<img src="asdfasdf">
Run Code Online (Sandbox Code Playgroud)
它可以工作但是当我放入一个完整的HTML页面时,它什么都不返回.为什么这样做?我该如何解决?
Site.html只是标准格式的网站的HTML代码.我希望它忽略一切,只打印图像的源代码.如果您想查看site.html内部的内容,请转到基本的HTML网页并复制所有源代码.
当您可以使用BeautifulSoup之类的东西轻松地执行此操作时,为什么要使用正则表达式来解析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
Run Code Online (Sandbox Code Playgroud)
您的代码无法工作的原因是因为text该文件的一行.因此,您只在每次迭代中找到一条线的匹配项.虽然这可能有效,但请考虑最后一行是否没有图像标记.matches将是一个空列表,并将join成为''.您将matches每行覆盖变量.
你想调用findall整个HTML:
import re
with open('site.html') as html:
content = html.read()
matches = re.findall(r'\ssrc="([^"]+)"', content)
matches = ' '.join(matches)
print(matches)
Run Code Online (Sandbox Code Playgroud)
with在这里使用一个声明更加pythonic.这也意味着你不必在file.close()事后打电话,因为with声明处理了这个问题.
| 归档时间: |
|
| 查看次数: |
8435 次 |
| 最近记录: |