Как можно исправить скрипт на Python для парсинга, который перестал вытягивать информацию?

Как написать скрипт для загрузки фотографий из указанной ссылки на сервис и сохранения их в папку на локальном компьютере?
  • 1 февраля 2024 г. 9:29
Ответы на вопрос 2
Чтобы исправить скрипт на Python для парсинга, который перестал вытягивать информацию, необходимо выполнить следующие шаги:

1. Проверьте доступность исходной веб-страницы.
2. Удостоверьтесь, что структура страницы не изменилась — это может потребовать обновления селекторов (например, CSS или XPath) в вашем скрипте.
3. Убедитесь, что ваш парсер использует актуальные заголовки HTTP (например, `User-Agent`) и соответствует противодействиям против парсинга, если они есть на сайте (например, капча, проверки на JavaScript и т.д.).
4. Обновите библиотеки и зависимости, если это необходимо (например, `requests`, `beautifulsoup4`, `lxml`, `selenium`).
   
Что касается написания скрипта для загрузки фотографий из указанной ссылки и сохранения их в папку на локальном компьютере, ниже представлен примерный алгоритм в виде кода на Python с использованием библиотеки `requests`:

```python
import os
import requests
from urllib.parse import urljoin

# Предположим, что у вас есть функция, которая находит все ссылки на фотографии:
def find_image_urls(url):
    # Тут должен быть ваш код для получения всех ссылок на изображения
    return list_of_image_urls

def download_images(url, folder):
    # Создать директорию, если её нет
    if not os.path.exists(folder):
        os.makedirs(folder)

    # Получить ссылки на фотографии
    image_urls = find_image_urls(url)

    for img_url in image_urls:
        # Получить содержимое изображения
        response = requests.get(img_url)
        if response.status_code == 200:
            # Извлечение имени файла из URL
            img_name = img_url.split("/")[-1]
            img_path = os.path.join(folder, img_name)
            # Сохранение изображения в файл
            with open(img_path, 'wb') as img_file:
                img_file.write(response.content)
            print(f"Сохранено изображение: {img_name}")
        else:
            print(f"Не удалось загрузить изображение с URL: {img_url}")

# Пример использования
url = 'http://example.com/photos' # URL страницы со ссылками на фотографии
folder = 'downloaded_photos'
download_images(url, folder)
```

Прежде чем использовать данный скрипт, следует реализовать функцию `find_image_urls`, которая будет анализировать HTML-страницу и возвращать список ссылок на изображения. Это можно сделать с помощью библиотеки для парсинга HTML, такой как `BeautifulSoup`.

Обратите внимание, что перед началом парсинга веб-сайта следует ознакомиться с его `robots.txt`, а также проконсультироваться с правилами и политикой использования контента, чтобы исключить возможное нарушение авторских прав или условий использования веб-сайта.
Такой вариант не подойдёт? Рендерится через Chromium. 

from requests_html import HTMLSession

def download(url):
    session = HTMLSession()
    resp = session.get(url)
    resp.html.render()

    if resp.status_code == 200:
        list_of_img = resp.html.find('img')
        d = list_of_img[0].attrs
        image_url = d['srcset'].split(',')[-1].split(' ')[0]
        image_name = image_url.split('/')[-1]
        image = session.get(image_url).content
        with open(image_name, 'wb') as file:
            file.write(image)
    else:
        print(f"[ERROR] Не удалось загрузить изображение:\n{url}")

    session.close()

download('https://scrolller.com/i-dragged-my-brother-out-at-1am-to-see-the-aogsmn8ihx')
Похожие вопросы