Как использовать сканер Python для автоматической загрузки изображений Baidu?

Python Байду рептилия регулярное выражение

Гитхаб:GitHub.com/молоко курдлинг/узнать…


Шаги, чтобы сделать краулер

Создание краулера обычно делится на следующие этапы:

  • Анализ требований
  • Анализируйте исходный код веб-страницы и сотрудничайте с инструментами разработчика
  • Напишите регулярные выражения или выражения XPath
  • Официально напишите код сканера Python

Предварительный просмотр эффекта

Эффект операции следующий:

Папка для хранения изображений:

анализ спроса

Наш краулер должен выполнять как минимум две функции: одна — поиск картинок, а другая — автоматическая загрузка.

Поиск изображений: проще всего представить результат сканирования изображений Baidu, давайте перейдем к изображениям Baidu, чтобы увидеть:

Просто выполните поиск по нескольким ключевым словам, и вы увидите, что было найдено много картинок:

Анализировать веб-страницы

Щелкните правой кнопкой мыши, чтобы просмотреть исходный код:

После открытия исходного кода трудно найти кучу исходного кода, чтобы найти нужные нам ресурсы.

В это время необходимо использовать инструменты разработчика! Возвращаемся на предыдущую страницу и вызываем инструменты разработчика.Что нам нужно использовать, так это то, что находится в верхнем левом углу: (следим мышью).

Затем выберите место, где вы хотите увидеть исходный код, вы можете обнаружить, что область кода ниже автоматически располагается в соответствующей позиции. Как показано ниже:

Мы скопировали этот адрес, потом только сейчас поискали в исходниках и нашли его расположение, а тут опять путаемся, столько адресов у этой картинки, какой из них использовать? Мы видим, что есть thumbURL, middleURL, hoverURL, objURL

Путем анализа мы можем узнать, что первые две версии — это сокращенные версии, hoverURL — это версия, отображаемая после перемещения мыши, а objURL должен быть тем, что нам нужно.Вы можете открыть эти URL по отдельности и обнаружить, что одна из objURL является самой большой и яснейший.

Адрес изображения найден, а затем мы анализируем исходный код. Посмотрите, все ли objURL являются изображениями.

Выяснилось, что все картинки заканчиваются на формат .jpg.

Пишите регулярные выражения

pic_url = re.findall('"objURL":"(.*?)",',html,re.S)

Написать код сканера

Здесь мы используем 2 пакета, один обычный, а другой — пакет запросов.

#-*- coding:utf-8 -*-
import re
import requests

Скопируйте ссылку Baidu Image Search, передайте запросы, а затем напишите регулярное выражение

url = 'https://image.baidu.com/search/index?tn=baiduimage&ie=utf-8&word=%E6%A0%97%E5%B1%B1%E6%9C%AA%E6%9D%A5%E5%A4%B4%E5%83%8F&ct=201326592&ic=0&lm=-1&width=&height=&v=index'

html = requests.get(url).text
pic_url = re.findall('"objURL":"(.*?)",',html,re.S)

Поскольку изображений много, нам нужно зациклиться. Мы распечатываем результаты для просмотра, а затем используем запросы для получения URL-адреса. Поскольку некоторые изображения не могут открыть URL-адрес, добавлено 10-секундное управление тайм-аутом.

pic_url = re.findall('"objURL":"(.*?)",',html,re.S)
i = 1
for each in pic_url:
    print each
    try:
        pic= requests.get(each, timeout=10)
    except requests.exceptions.ConnectionError:
        print('【错误】当前图片无法下载')
        continue

Следующим шагом является сохранение картинок, мы заранее создали каталог изображений, поместили туда все картинки и назвали их цифрами.

        dir = '../images/' + keyword + '_' + str(i) + '.jpg'
        fp = open(dir, 'wb')
        fp.write(pic.content)
        fp.close()
        i += 1

полный код

# -*- coding:utf-8 -*-
import re
import requests


def dowmloadPic(html, keyword):
    pic_url = re.findall('"objURL":"(.*?)",', html, re.S)
    i = 1
    print('找到关键词:' + keyword + '的图片,现在开始下载图片...')
    for each in pic_url:
        print('正在下载第' + str(i) + '张图片,图片地址:' + str(each))
        try:
            pic = requests.get(each, timeout=10)
        except requests.exceptions.ConnectionError:
            print('【错误】当前图片无法下载')
            continue

        dir = '../images/' + keyword + '_' + str(i) + '.jpg'
        fp = open(dir, 'wb')
        fp.write(pic.content)
        fp.close()
        i += 1


if __name__ == '__main__':
    word = input("Input key word: ")
    url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + '&ct=201326592&v=flip'
    result = requests.get(url)
    dowmloadPic(result.text, word)

Мы увидели, что некоторые картинки не отображались, а когда открыли URL, то обнаружили, что их действительно нет.

Поскольку некоторые изображения Baidu кэшируются на сервере Baidu, мы все еще можем видеть их на Baidu, но срок действия ссылки истек.

Суммировать

наслаждайтесь нашим первым сканером загрузки изображений! Конечно, он может не только качать картинки с Baidu, но и рисовать совки по тыкве.

Полный код выложен на GithutGitHub.com/свертывание молока/Baidu…