我正在尝试检索网页的来源,包括任何图片。目前我有这个:
import urllib
page = urllib.urlretrieve('http://127.0.0.1/myurl.php', 'urlgot.php')
print urlgot.php
检索源很好,但我还需要下载任何链接的图像。
我以为我可以创建一个正则表达式,在下载的源代码中搜索img src或类似内容;但是,我想知道是否还有urllib函数可以检索图像?类似于wget命令:
wget -r --no-parent http://127.0.0.1/myurl.php
我不想使用os模块并运行wget,因为我希望脚本在所有系统上运行。出于这个原因,我也不能使用任何第三方模块。
非常感谢任何帮助!感谢
答案 0 :(得分:7)
当Python内置一个非常好的解析器时,不要使用正则表达式:
from urllib.request import urlretrieve # Py2: from urllib
from html.parser import HTMLParser # Py2: from HTMLParser
base_url = 'http://127.0.0.1/'
class ImgParser(HTMLParser):
def __init__(self, *args, **kwargs):
self.downloads = []
HTMLParser.__init__(self, *args, **kwargs)
def handle_starttag(self, tag, attrs):
if tag == 'img':
for attr in attrs:
if attr[0] == 'src':
self.downloads.append(attr[1])
parser = ImgParser()
with open('test.html') as f:
# instead you could feed it the original url obj directly
parser.feed(f.read())
for path in parser.downloads:
url = base_url + path
print(url)
urlretrieve(url, path)
答案 1 :(得分:3)
使用BeautifulSoup解析返回的HTML并搜索图像链接。您可能还需要递归获取帧和iframe。