Как получить веб-страницу в Python, включая любые изображения - PullRequest
8 голосов
/ 06 сентября 2011

Я пытаюсь получить источник веб-страницы, включая любые изображения.На данный момент у меня есть это:

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 ]

7 голосов
/ 06 сентября 2011

Не используйте regex, когда в 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)
3 голосов
/ 06 сентября 2011

Используйте BeautifulSoup для анализа возвращенного HTML и поиска ссылок на изображения.Вам также может понадобиться рекурсивно извлекать фреймы и фреймы.

...