Скраппинг картинок

Python
Скраппинг картинок

Это 3-й день моего участия в ноябрьском испытании обновлений, узнайте подробности события:Вызов последнего обновления 2021 г.

Описание скрапа ?

Scrapy — это платформа приложений, написанная для сканирования данных веб-сайта и извлечения структурных данных.

Платформа Scrapy в основном состоит из пяти компонентов, а именно планировщика, загрузчика, паука, конвейера элементов и механизма Scrapy. Планировщик получает URL-адрес и инициирует запрос. Загрузчик загружает контент, обрабатывает бесполезные данные через движок и промежуточное программное обеспечение и отправляет их пауку. Мы извлекаем данные в соответствии с нашими собственными потребностями. Если запрос выполнен успешно, данные сохраняются в элементах и ​​хранятся в конвейере. Если это не удается, он повторно отправит URL-адрес планировщику.

Создать проект Scrapy ?

Сначала загрузите и установите scrapy:pip install Scrapy

Создайте скрап-проект:scrapy startproject movieScrapy, имя моего проекта — movieScrapy; создайте файл сканера под пауками:scrapy genspider spiderData 你要访问的网页域名 1.pngТак выглядит созданная структура каталоговimage.png

items.py эквивалентен классу инкапсуляции, используемому для инкапсуляции данных, которые должны быть переданы в конвейер; middlewares.py — промежуточное ПО, которое обычно не нужно писать; это файл конфигурации

Для начала изменим конфигурационный файл настроек

ROBOTSTXT_OBEY = FalseПо умолчанию стоит True, меняем на False, так как если соблюдать протокол robots, много чего не получим;CONCURRENT_REQUESTS = 32Максимальный одновременный запрос, по умолчанию 16, чем больше, тем лучше;DOWNLOAD_DELAY = 2Задержка загрузки может предотвратить блокировку IP-адреса, если количество посещений слишком велико;COOKIES_ENABLED = TrueПо умолчанию сохраняется файл cookie последнего посещения;DEFAULT_REQUEST_HEADERS = {}Заголовок запроса, который может писать User-Agent, Cookie, Referer;ITEM_PIPELINESВоронка проекта, приоритет 300, чем ниже приоритет, тем выше приоритет сканирования

Скиньте картинки ❤

Сегодняшняя задача - ползать по картинкам, спешить спешить! ! !

items.py

Определим нужные нам поля в items.py, чтобы упростить конвейерную передачу.

import scrapy
class MoviescrapyItem(scrapy.Item):
    # 图片名称
    name = scrapy.Field()
    # 图片地址
    url = scrapy.Field()

файл сканера.py

Полный код в каталоге файлов сканера, я буду использовать xxx вместо подробного URL-адреса.

class SpiderdataSpider(scrapy.Spider):
    name = 'spiderData'
    allowed_domains = ['x.com']
    start_urls = ['https://x.com/x/x/']

    def parse(self, response):
        articles = response.xpath("//div[@class='galleryWrapper']/section/section/section/section/article")
        for article in articles:
            url = article.xpath("./section/section/a/@href").extract()[0]
            yield scrapy.Request(url, callback=self.MainUrl)

    def MainUrl(self, response):
        data = response.text
        name = response.xpath("//div[@class='image_name']/text()").extract()[0]
        url = response.xpath("//section[@class='image-card']/section/figure/div[@class='unzoomed']/img/@src").extract()[0]
        url = "https:" + url
        item = MoviescrapyItem()
        item['name'] = name
        item['url'] = url
        yield item

name = 'spiderData'Файл запуска через это имяscrapy crawl spiderData;allowed_domains = ['x.com']Это не означает, что ссылки под этим доменным именем будут автоматически фильтроваться, имя и разрешенные_домены автоматически генерируются при создании файла; Ответ в функции разбора автоматически загрузил ресурс данных, доступ к которому можно получить черезresponse.textДля просмотра можно получить нужные данные в каталоге через xpath, гдеextract()[0]текст можно извлечь

yield scrapy.Request(url, callback=self.MainUrl)Мы непрерывно извлекаем ссылку на страницу сведений об изображении в цикле и передаемyieldинициировать запрос, а также функционироватьMainUrlВ качестве функции обратного вызова для извлечения необходимых данных из ответа.yieldДанные возвращаются в каждом цикле

item = MoviescrapyItem()Создавать полученные данные черезyieldк трубопроводу

pipelines.py

import urllib.request

class MoviescrapyPipeline:
    def __init__(self):
        pass

    def process_item(self, item, spider):
        name = item['name']
        urllib.request.urlretrieve(item['url'], "./Loadimg/" + name + '.jpg')
        return item

    def close_spider(self, spider):
        pass

__init__Функция выполняется в начале, мы можем использовать ее для подготовки открытия файла хранилища и некоторых настроек, таких как csvprocess_itemЭто для обработки данных, здесь мы сохраняем картинку, item — это значение, которое мы передали через yield передclose_spiderМы можем использовать, чтобы закрыть файл csv, как это

QQ图片20211104192718.png

Таким образом получается картинка ???