如何在python中检索网页,包括任何图像

时间:2011-09-05 20:58:25

标签: python urllib

我正在尝试检索网页的来源,包括任何图片。目前我有这个:

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,因为我希望脚本在所有系统上运行。出于这个原因,我也不能使用任何第三方模块。

非常感谢任何帮助!感谢

2 个答案:

答案 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。