Эта статья была написана членами сообщества Tuque.Кан Руо Звездное небоЭто написано, добро пожаловать в сообщество Tuque, вместе создавайте замечательные бесплатные технические руководства и способствуйте развитию индустрии программирования.
Если вы считаете, что мы хорошо поработали, помнитеНравится + Подписаться + КомментарийSanlian🥰🥰🥰, поощряйте нас писать лучшие уроки💪
слово публикации
Это серия туториалов, основанных на реальных боевых действиях, начинается с простейшей программы-краулера, учит людей ловить рыбу, подробно разбирает идею построения программы и полностью показывает, как шаг за шагом отлаживается краулер до финала. завершение. Делитесь различными знаниями и навыками о сканерах, стремясь помочь всем понять сканеры, разработать сканеры, использовать сканеры и, наконец,наслаждайся рептилиейДайте нам различные удобные в работе и жизни.
Предварительные знания
- Базовые знания программирования на питоне
- Здесь мы используем Python3 в качестве среды разработки.
- В то же время иметь базовые знания в области упаковки
- Базовые знания веб-программирования
- Предварительное понимание протокола HTTP
Это простейшая компьютерная программа
Если говорить о рептилиях, то о них все более или менее слышали и считают это глубоким или интересным. Для младшего программиста, который пишет код четыре или пять лет, поисковые программы — самые простые и интересные программы в компьютерных программах.Пока вы можете путешествовать по Интернету, у вас есть талант писать поисковые программы..
Почему рептилии черви? Поскольку разум жука относительно прост, программа-краулер также ++ «одно сухожилие» ++ и не требует секретных математических знаний и не требует разработки различных алгоритмов. Нам нужно использовать только «большой народный язык», который может понять компьютер.
Основная процедура разработки краулеров
Обобщите роль всех поисковых программ в одном предложении: Моделируйте действия людей в Интернете по поиску, загрузке и хранению данных. Далее я будумужская фигураВозьмите этот веб-сайт в качестве примера, чтобы поделиться процедурами.
шаг 1. Откройте целевой URL
Chrome настоятельно рекомендуется здесь
Сначала откройте этот URL:Woohoo.Man Figure.Цао Цао/Водяной Монстр Изображение/,Вы увидите следующий интерфейс
.Теперь мы просто открываем эту страницу вручную в браузере, а затем используем код, чтобы программа также открывала эту страницу. Это необходимо для анализа того, как браузер открывает эту страницу, см. простую блок-схему.
В питоне вы можете использовать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-файл в браузере следующим образом.
Чем это отличается от того, что вы видите в браузере?
На этот раз я покажу несравненное сокровище — консоль отладки Chrome (нажмите F12), чтобы проанализировать ее для вас.
На самом деле страницы, которые мы видим в браузере, представляют собой не просто HTML-страницы, а css, js, html и различные медиа-ресурсы, объединенные вместе, и страница, наконец, отображается браузером. этот процесс.
Когда мы используем программу для запроса к серверу, мы получаем только HTML-страницу, поэтому программа и страница, которую мы видим, очень разные. Но не имеет значения, что HTML является основой, вам просто нужно следовать подсказкам, чтобы поймать другие.
Шаг 2: найти целевой ресурс
Открыв этот сайт, все феи могут взять то, что им нужно.Хотите испытать счастье Сяо Ясюань? Цель — небольшое количество свежего мяса; вы жаждете такого тела, как у Пэн Юяня? Этот мускулистый парень - твоя вещь. Кроме того, у южнокорейского оппа, европейских и американских спортсменов тоже все есть.
Люди — продвинутые существа, и их глаза будут автоматически фокусироваться на цели, но рептилии — это «ребро», они не могут фокусироваться автоматически, и мы должны помочь им указать путь.
Друзья, которые писали интерфейсные страницы, знают, что стили CSS используют различные селекторы для привязки к соответствующим узлам, поэтому мы также можем использовать селекторы CSS для выбора элементов, которые мы хотим извлечь из информации. Артефакт селектора CSS был подготовлен в Chrome для создания селекторов для нужных нам элементов.
Конкретный процесс выглядит следующим образом: третий шаг — ценить младших братьев~
Шаг 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()
Теперь давайте посмотрим на эффект
четвероногий
Пока что небольшой краулер был завершен всего десятью строками кода, не правда ли, это очень просто? Собственно, основная идея краулера и состоит в этих четырех шагах, так называемый комплексный краулер постоянно развивается на основе этих четырех шагов. Конечной целью краулера является получение различных ресурсов (текста или изображений), и все операции ориентированы на ресурсы.
- открытый ресурс
- Найдите ресурсы
- Разбирать ресурсы
- Скачать ресурсы
больше младший брат
Выполнив описанные выше шаги, мы можем получить только одного младшего брата. Джимей сказал, что я могу загрузить его напрямую, щелкнув правой кнопкой мыши. Зачем писать краулер? Далее мы обновим волну селекторов, поместим младших братьев в массив и соберем их всех в чашу.
перестроить код
Чтобы упростить написание кода в будущем, сначала следует выполнить простой рефакторинг, чтобы сделать код более понятным.
- Добавить функцию входа
- Инкапсулирует операции над изображениями
Рефакторинговый код выглядит следующим образом:
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, указывает конкретный подэлемент, поэтому выбирается только один младший брат, затем нам нужно проанализировать общий селектор и поставить вонючего брата. Они подаются в горшок.
Держите мышку и кликайте по платформе отладки, смотрите слой за слоем на уровне элементов 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()
Не удалось загрузить изображения
Видно, что все ссылки на картинку получены, но при скачивании картинки произошли какие-то аварии, и на запрос картинки не ответили. В чем проблема? Получите все подключения к изображению, докажите, что код не является неправильным, поместите ссылку на изображение в браузер и откройте его в обычном режиме, докажите, что подключение не является неправильным, тогда это может быть проблема с сетью сейчас.
- медленный интернет
- Отток
- Другие сайты с мерами против лазания
- ...
На данный момент факторов много.Сначала используем самый простой метод решения проблемы,отключение и повторное подключение. Перезапустите WIFI ноутбука, снова подключитесь к сети, а затем запустите программу.
Пришел сюрприз, вонючих братьев благополучно поставили на склад.
Конечно, этот метод не является серебряной пулей. Нам нужно больше навыков для улучшения «актерских навыков» программы-краулера.Чем более человекоподобным будет вести себя наша программа-краулер, тем выше будет наша вероятность успеха в добыче ресурсов.
Увидев это, вы должны войти в дверь мира рептилий. Если в этом мире есть музыкальная тема, то это должна быть «Актер» Сюэ Чжицяня. В следующем уроке вы отточите свои «актерские навыки» и получите больше младшие братья снова и снова.
Если вы считаете, что мы хорошо поработали, помнитеНравится + Подписаться + КомментарийSanlian🥰🥰🥰, поощряйте нас писать лучшие уроки💪
Хотите узнать больше интересных практических технических руководств? ПриходитьСообщество ТукеМагазин вокруг.