Python Image соскоб возвращая HTML - PullRequest
0 голосов
/ 19 октября 2018

Я написал скрипт на Python для извлечения URL-адресов изображений из некоторого Javacript и сохранения изображения, однако при открытии с Preview я получаю сообщение

Возможно, он поврежден или использует формат файлаэтот предварительный просмотр не распознает.

При более внимательном рассмотрении при открытии .jpeg в редакторе создается впечатление, что скрипт сохраняет HTML.Куда я здесь не так?Любая помощь будет принята с благодарностью.

from bs4 import BeautifulSoup
import urllib.request as request
import json

folder = r'./gallery'
URL = 'https://web.archive.org/web/20180324152250/http://www.awp.fr:80/project/poissy-galore-museum-visitors-center/'
response = request.urlopen(URL)
soup = BeautifulSoup(response, 'html.parser')

scriptCnt = soup.find('div', {'class': 'posts-wrapper'})
script = scriptCnt.find('script').text

json_str = script[str(script).find('var gallery_items = '):str(script).find(';')].replace('var gallery_items = ', '')
json_str = json.loads(json_str)
for item in json_str:
    print(item['large'])
    filename = item['large'].split('/')[-1]
    req =  request.Request(item['large'],
        headers = {
            'User-agent':
                'Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0'})
    resp = request.urlopen(req)
    with open(filename, "wb") as fd:
        fd.write(resp.read())

1 Ответ

0 голосов
/ 19 октября 2018

Кажется, что item['large'] не является ссылкой на изображение.Я запустил ваш код в блокноте, и когда я щелкнул ссылку, выведенную в блокноте, он отправил меня на другую веб-страницу.Так что вам нужно пойти немного глубже здесь.Вы можете изменить свой цикл, например, так:

for item in json_str:
    print(item['large'])

    r = request.urlopen(item['large'])
    s = BeautifulSoup(r, 'html.parser')

    filename = item['large'].split('/')[-1]
    req =  request.Request(s.find('iframe').get('src'),
        headers = {
            'User-agent':
                'Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0'})
    resp = request.urlopen(req)
    with open(filename, "wb") as fd:
        fd.write(resp.read())
...