Извлеките URL-адрес фонового изображения веб-сайта из файла HTML, заданного в стиле Python - PullRequest
0 голосов
/ 13 июня 2019

Я кодирую клонер веб-сайта на python. Он хорошо работает для большинства файлов, но я нашел проблему с получением URL фоновых изображений, например

<div style="background-image: url(images/banner.jpg)" >

Сценарий обнаруживает фонизображение в качестве папки и предположим, что URL-адрес 'background_image: url (images / banner.jpg'. Как мне установить его, чтобы получить фактический URL.

Python 2,7

import urllib2
import sys
import socket
import os
import re

socket.setdefaulttimeout(15)

dataTypesToDownload = [".jpg", ".jpeg", ".png", ".gif", ".ico", ".css", ".js", ".html"]

url = 'http://example.com/'
pathbase = 'theme'

if "http://" not in url and "https://" not in url:
    url = "http://"+url

try:
    os.mkdir(pathbase)
except OSError:
    pass
file = open(pathbase + "/index.html", "w")
try:
    content = urllib2.urlopen(url).read()
except urllib2.URLError as e:
    print "An error occured: " + str(e.reason)
    exit()

resources = re.split("=\"|='", content)

first = False
for resource in resources:
    if first == False:
        first = True
        continue
    resource = re.split("\"|'", resource)[0]
    if any(s in resource for s in dataTypesToDownload):
        print "Downloading " + resource
        try:
            path = resource.split("/")

            if len(path) != 1:
                path.pop(len(path) - 1)
                trail = "./" + pathbase + "/"
                for folder in path:
                    trail += folder+"/"
                    try:
                        os.mkdir(trail)
                    except OSError:
                        pass    
        except IOError:
            pass
        try:
            if "?" in resource:
                download = open(pathbase + "/"+resource.split("?")[len(resource.split("?")) - 2], "w")
            else:
                download = open(pathbase + "/"+resource, "w")
            print url+"/"+resource
            dContent = urllib2.urlopen(url+"/"+resource).read()
        except urllib2.URLError as e:
            print "An error occured: " + str(e.reason)
            download.close()
            continue
        except IOError:
            pass
            continue
        download.write(dContent)
        download.close()
        print "Downloaded!"

file.write(content)
file.close()

Iожидайте, когда он встретит style="background-image: url(images/banner.jpg), он должен установить ресурс как images / banner.jpg. Но он устанавливает ресурс как background-image: url(images/images.jpg

...