Выращивание рептилий - войдите в этот чудесный мир первым (настройка девушки)

задняя часть рептилия
Выращивание рептилий - войдите в этот чудесный мир первым (настройка девушки)

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

Если вы считаете, что мы хорошо поработали, помнитеНравится + Подписаться + КомментарийSanlian🥰🥰🥰, поощряйте нас писать лучшие уроки💪

слово публикации

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

Предварительные знания

  1. Базовые знания программирования на питоне
    1. Здесь мы используем Python3 в качестве среды разработки.
    2. В то же время иметь базовые знания в области упаковки
  2. Базовые знания веб-программирования
  3. Предварительное понимание протокола HTTP

Это простейшая компьютерная программа

Если говорить о рептилиях, то о них все более или менее слышали и считают это глубоким или интересным. Для младшего программиста, который пишет код четыре или пять лет, поисковые программы — самые простые и интересные программы в компьютерных программах.Пока вы можете путешествовать по Интернету, у вас есть талант писать поисковые программы..

Почему рептилии черви? Поскольку разум жука относительно прост, программа-краулер также ++ «одно сухожилие» ++ и не требует секретных математических знаний и не требует разработки различных алгоритмов. Нам нужно использовать только «большой народный язык», который может понять компьютер.

Основная процедура разработки краулеров

Обобщите роль всех поисковых программ в одном предложении: Моделируйте действия людей в Интернете по поиску, загрузке и хранению данных. Далее я будумужская фигураВозьмите этот веб-сайт в качестве примера, чтобы поделиться процедурами.

шаг 1. Откройте целевой URL

Chrome настоятельно рекомендуется здесь

Сначала откройте этот URL:Woohoo.Man Figure.Цао Цао/Водяной Монстр Изображение/,Вы увидите следующий интерфейс

3I7ph6.png
.

Теперь мы просто открываем эту страницу вручную в браузере, а затем используем код, чтобы программа также открывала эту страницу. Это необходимо для анализа того, как браузер открывает эту страницу, см. простую блок-схему.

3IHqeJ.png

В питоне вы можете использоватьrequestsЭтот инструментарий для отправки HTTP-запросов. Для того, чтобы понять, как выглядит страница, которую «видит» программа, нам нужно сохранить HTML-файл, полученный программой, в локалку, а затем открыть его браузером, и тогда мы сможем почувствовать то же самое, что и программа. Чтобы достичь царства «единства человека и машины».

Ручка и губка носика сняты, сразу создадим новуюindex.pyфайл, а затем пропишите в нем следующее:

import requests
url = "https://www.nanrentu.cc/sgtp/"
response = requests.get(url)
if response.status_code == 200:
    with open("result.html",'a',encoding="utf-8") as f:
        f.write(response.text)

Откройте написанный HTML-файл в браузере следующим образом.

3IqM36.png

3IqK9x.png

Чем это отличается от того, что вы видите в браузере?

На этот раз я покажу несравненное сокровище — консоль отладки Chrome (нажмите F12), чтобы проанализировать ее для вас.

3ILhFA.png

На самом деле страницы, которые мы видим в браузере, представляют собой не просто HTML-страницы, а css, js, html и различные медиа-ресурсы, объединенные вместе, и страница, наконец, отображается браузером. этот процесс.

Когда мы используем программу для запроса к серверу, мы получаем только HTML-страницу, поэтому программа и страница, которую мы видим, очень разные. Но не имеет значения, что HTML является основой, вам просто нужно следовать подсказкам, чтобы поймать другие.

Шаг 2: найти целевой ресурс

Открыв этот сайт, все феи могут взять то, что им нужно.Хотите испытать счастье Сяо Ясюань? Цель — небольшое количество свежего мяса; вы жаждете такого тела, как у Пэн Юяня? Этот мускулистый парень - твоя вещь. Кроме того, у южнокорейского оппа, европейских и американских спортсменов тоже все есть.

Люди — продвинутые существа, и их глаза будут автоматически фокусироваться на цели, но рептилии — это «ребро», они не могут фокусироваться автоматически, и мы должны помочь им указать путь.

Друзья, которые писали интерфейсные страницы, знают, что стили CSS используют различные селекторы для привязки к соответствующим узлам, поэтому мы также можем использовать селекторы CSS для выбора элементов, которые мы хотим извлечь из информации. Артефакт селектора CSS был подготовлен в Chrome для создания селекторов для нужных нам элементов.

Конкретный процесс выглядит следующим образом: третий шаг — ценить младших братьев~

3o8dJg.png

Шаг 3: Разберите страницу

На этот раз мы представим артефакт синтаксического анализа страницы.pyquery, эта библиотека инструментов может найти соответствующий элемент на HTML-странице с помощью скопированного нами селектора CSS и может легко извлекать различные атрибуты. Тогда давайте проанализируем этого младшего брата.

Сначала мы устанавливаемPyQueryЭтот пакет можно установить с помощью диспетчера пакетов pip, а затем изменить код следующим образом:

import requests
from pyquery import PyQuery as pq
url = "https://www.nanrentu.cc/sgtp/"
response = requests.get(url)
if response.status_code == 200:
    with open("result.html",'w',encoding="utf-8") as f:
        f.write(response.text)
    # 开始解析
    doc = pq(response.text)
    # 把复制的选择器粘贴进去
    # 选择对应的节点
    imgElement = doc('body > div:nth-child(5) > div > div > div:nth-child(2) > ul > li:nth-child(3) > a > img')
    # 提取属性,获取图片链接
    imgSrc = imgElement.attr('src')
    # 将图片链接输出在屏幕上
    print(imgSrc)

Шаг 4: цель хранения

Как может такой красивый младший брат позволить ему остаться в Интернете? поместите его на жесткий дискучебные материалыПапки самые безопасные. Далее кладем младшего брата в миску.

Процесс загрузки изображений фактически такой же, как и процесс сканирования HTML-страниц.requestsОтправьте запрос, чтобы получить поток данных и сохранить его локально.

import requests
from pyquery import PyQuery as pq
url = "https://www.nanrentu.cc/sgtp/"
response = requests.get(url)
if response.status_code == 200:
    with open("result.html",'w',encoding="utf-8") as f:
        f.write(response.text)
    doc = pq(response.text)
    imgElement = doc('body > div:nth-child(5) > div > div > div:nth-child(2) > ul > li:nth-child(3) > a > img')
    imgSrc = imgElement.attr('src')
    print(imgSrc)
    # 下载图片
    imgResponse = requests.get(imgSrc)
    if imgResponse.status_code == 200:
        # 填写文件路径 以二进制的形式写入文件
        with open('学习文件/boy.jpg', 'wb') as f:
            f.write(imgResponse.content)
            f.close()

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

3odp8K.png

четвероногий

Пока что небольшой краулер был завершен всего десятью строками кода, не правда ли, это очень просто? Собственно, основная идея краулера и состоит в этих четырех шагах, так называемый комплексный краулер постоянно развивается на основе этих четырех шагов. Конечной целью краулера является получение различных ресурсов (текста или изображений), и все операции ориентированы на ресурсы.

  1. открытый ресурс
  2. Найдите ресурсы
  3. Разбирать ресурсы
  4. Скачать ресурсы

больше младший брат

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

перестроить код

Чтобы упростить написание кода в будущем, сначала следует выполнить простой рефакторинг, чтобы сделать код более понятным.

  1. Добавить функцию входа
  2. Инкапсулирует операции над изображениями

Рефакторинговый код выглядит следующим образом:

import requests
from pyquery import PyQuery as pq

def saveImage(imgUrl,name):
    imgResponse = requests.get(imgUrl)
    fileName = "学习文件/%s.jpg" % name
    if imgResponse.status_code == 200:
        with open(fileName, 'wb') as f:
            f.write(imgResponse.content)
            f.close()

def main():
    baseUrl = "https://www.nanrentu.cc/sgtp/"
    response = requests.get(baseUrl)
    if response.status_code == 200:
        with open("result.html",'w',encoding="utf-8") as f:
            f.write(response.text)
        doc = pq(response.text)
        imgElement = doc('body > div:nth-child(5) > div > div > div:nth-child(2) > ul > li:nth-child(3) > a > img')
        imgSrc = imgElement.attr('src')
        print(imgSrc)
        saveImage(imgSrc,'boy')
        
if __name__ == "__main__":
    main()

Селектор обновлений

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

3oy7nK.png

Держите мышку и кликайте по платформе отладки, смотрите слой за слоем на уровне элементов HTML-файла и находите одинаковые повторяющиеся места — вот где наш прорыв.

Мы видим, что все изображения находятся в классе с именем h-piclist.<ul>тег, то мы можем написать следующий селектор.h-piclist > li > a > img. Это выбирает все элементы изображения на этой странице. Затем используйте цикл for, чтобы перебрать его.

import requests
from pyquery import PyQuery as pq

# 引入UUID为图片命名
import uuid

def saveImage(imgUrl,name):
    imgResponse = requests.get(imgUrl)
    fileName = "学习文件/%s.jpg" % name
    if imgResponse.status_code == 200:
        with open(fileName, 'wb') as f:
            f.write(imgResponse.content)
            f.close()

def main():
    baseUrl = "https://www.nanrentu.cc/sgtp/"
    response = requests.get(baseUrl)
    if response.status_code == 200:
        with open("result.html",'w',encoding="utf-8") as f:
            f.write(response.text)
        doc = pq(response.text)
        # 选则这一页中所有的目标图片元素
        imgElements = doc('.h-piclist > li > a > img').items()
        # 遍历这些图片元素
        for i in imgElements:
            imgSrc = i.attr('src')
            print(imgSrc)
            saveImage(imgSrc,uuid.uuid1().hex)

if __name__ == "__main__":
    main()

Не удалось загрузить изображения

3o2Ygs.png

Видно, что все ссылки на картинку получены, но при скачивании картинки произошли какие-то аварии, и на запрос картинки не ответили. В чем проблема? Получите все подключения к изображению, докажите, что код не является неправильным, поместите ссылку на изображение в браузер и откройте его в обычном режиме, докажите, что подключение не является неправильным, тогда это может быть проблема с сетью сейчас.

  1. медленный интернет
  2. Отток
  3. Другие сайты с мерами против лазания
  4. ...

На данный момент факторов много.Сначала используем самый простой метод решения проблемы,отключение и повторное подключение. Перезапустите WIFI ноутбука, снова подключитесь к сети, а затем запустите программу.

Пришел сюрприз, вонючих братьев благополучно поставили на склад.

3o2T8H.png

Конечно, этот метод не является серебряной пулей. Нам нужно больше навыков для улучшения «актерских навыков» программы-краулера.Чем более человекоподобным будет вести себя наша программа-краулер, тем выше будет наша вероятность успеха в добыче ресурсов.

Увидев это, вы должны войти в дверь мира рептилий. Если в этом мире есть музыкальная тема, то это должна быть «Актер» Сюэ Чжицяня. В следующем уроке вы отточите свои «актерские навыки» и получите больше младшие братья снова и снова.

Если вы считаете, что мы хорошо поработали, помнитеНравится + Подписаться + КомментарийSanlian🥰🥰🥰, поощряйте нас писать лучшие уроки💪

Хотите узнать больше интересных практических технических руководств? ПриходитьСообщество ТукеМагазин вокруг.