Я люблю массовую очистку, особенно в начале обучения, как кодировать. Это довольно просто, вы можете многое узнать о том, как обрабатывать данные, и вы получите немедленные результаты!
Но Я вижу много учебных пособий, которые становятся чрезмерно сложными и фокусируются в основном на рамках, называемом красивым супом. Это фантастическая и могущественная рамка, но большую часть времени – и особенно для новичка – Это полностью сверху. Давайте будем честными, мы не хотим индексировать полный веб -сайт, в большинстве случаев мы просто хотим загружать изображения или просить несколько значений.
Это можно сделать намного проще с одним волшебным словом, Регулярные выражения
Анкет
Хорошо, хорошо, я слышу тебя “что? Регулярные выражения и легко? Wtf? “
Да, ты не ошибаешься, регулярность не так просто. Лично мне было намного проще выучить коррекс, чем произвольная структура, в которой есть только один вариант использования.
Каковы регулярные выражения?
Концепция регулярных выражений произошла в 1950 -х годах. В теоретической информатике это последовательность символов, которые определяют шаблон поиска. ( Википедия )
Итак, как выглядит регулярное выражение?
Представьте, что у нас есть строка:
Привет, я Курцгеданке и www.kurzgedanke.de – мой сайт.
Теперь мы хотим получить веб -сайт с конкретным доменом. Мы можем предположить, что каждый вход выглядит как www.websitename.tdl
.
Одно решение, чтобы соответствовать этому с регулярными выражениями, может выглядеть так:
www\.(.*)\.([a-zA-Z]*)\s
www
Как вы могли бы подозревать, это точно соответствуетwww
\
соответствуетАнкет
послеwww
. Поскольку точка имеет функцию в корпорации, нам нужно избежать ее с помощью\
.(.*)
Анкет
соответствует любым отдельным символам. ЭтоA
Или вкладка, она соответствует этому. Кроме того, новички. С Asterisc мы сопоставляем ноль или более символов выражения перед ним. В этом случае ноль или более любого отдельного символа. Клаженки()
Поставляет матч в группу, к которой можно легко получить доступ.\.
Эта точка соответствует точке перед доменом верхнего уровня.([a-za-z]*)
Здесь у нас есть домен верхнего уровня, который снова помещается в группу с()
Анкет[]
используются, чтобы соответствовать одному персонажу. В этом случае персонаж между нижнимA
до нижней частиz
или капиталA
в столицуZ
. Чтобы получить более одного персонажа*
используется. [ Это забавно и классическая ошибка. Я не думал об этом полностью. URL -адрес, конечно, содержит черту-
И я пропустил это. ]\ s
соответствует белому пространству. В этом случае он используется для завершения регулярного выражения.
Честно говоря, я думаю, что есть более разумные способы сделать это, но я считаю, что это легко увидеть, что происходит, и не ошеломленной из 50 символов.
Чтобы изучить регулярные выражения, я использовал интерактивный учебник, как это: regexone.com Анкет Это не единственный, и вы можете посмотреть, если найдете тот, кто вам подходит.
Еще один замечательный совет – такие сайты, как regex101.com Анкет Вы можете вставить в него текст и написать непосредственно свою форму, пока вы можете видеть в режиме реального времени, какие детали сопоставлены. Я использую его каждый раз, когда пишу какую -то форму.
Давай напишем немного питона
Мы можем использовать эти знания для отказа от веб -сайтов. И, честно говоря… Я буду полагаться на модуль под названием Запросы: http для Humas Анкет Но с этим модулем так легко справиться и питонично – иногда у меня есть ощущение, что он более питонический, чем сам Python.
Наша цель состоит в том, чтобы отказаться от моего веб -сайта и получить каждую статью на звание моей целевой страницы, а также ссылку на него.
Упрощенная версия HTML выглядит так:
Итак, что мы ищем в этом HTML? Посмотрим, мы хотим названия и URL всех постов. У нас есть несколько статей с классом Пост-просмотр
Анкет А внизу у нас есть H2
Направляясь внутри div
называется Пост-просмотр Анкет
H2 содержит
a href который собирает ссылку. Может быть хорошо! Каждый
H2 имеет ту же структуру, и нам повезло, это единственный
H2 с этой структурой на всей этой стороне. Таким образом, мы можем предположить, как и выше, что каждый вход выглядит точно так:
На других веб -сайтах H2
или a href
иметь выделенный класс или удостоверение личности
Это еще лучше, потому что у нас будет постоянный шаблон, с которым можно было бы использовать.
Теперь позвольте нам написать нашу регуляцию для поиска.
Это просто представляет
тег и
(.*)<\/a><\/h2>
(.*)
Выбирает все после post/
до /">
и ставит это в группу.(.*)
соответствует названию сообщения<\/a> <\/h2>
Закрывает ярлык.
Теперь, когда мы написали регулярное выражение, давайте посмотрим на код Python.
import re import requests r = requests.get('https://kurzgedanke.de/') regex = r'(.*)<\/a><\/h2>' titleURL = re.findall(regex, r.text) for urlAndTitle in titleURL: print(f'Title:\t {urlAndTitle[1]}') print(f'URL:\t https://kurzgedanke.de/post/{urlAndTitle[0]}/') print('-------------------------------')
Импорт Re
импортировать модуль регулярного выражения из стандартной библиотекиЗапросы на импорт
импорт Модуль запросов от Кеннет Рейтц АнкетR.Get ('https://kurzgedanke.de/')
делает HTTP -запрос в Kurzgedanke.de и обеспечивает данные в объекте запросов.regex '...'
объявляет переменную с регулярным выражением как значение.r '...'
говорит Python, что эта строка является регулярным выражением.titleurl.findall (regex, r.text)
Мы используем модуль Regex, чтобы найти все совпадения с использованием наших переменных режима иR.Text
который содержит HTML нашего HTTP -запроса. После того, как все будет найдено, это будет список со всеми совпадениями, назначеннымиtitleurl
АнкетДля UrlandTitle в Titleurl:
Мы можем легко итерации по списку и получить доступ к различным совпадениям с помощью массива, потому что мы сгруппировали их в нашем регулярном выражении с()
Анкет
Когда вы запускаете сценарий, он должен выглядеть так:
Title: Headless ssh and Wifi on RaspberryPi URL: https://kurzgedanke.de/post/headless-ssh-and-wifi-on-raspberrypi/ ------------------------------- Title: How to Encrypt Files with AES URL: https://kurzgedanke.de/post/how-to-encrypt-files-with-aes/ ------------------------------- Title: Problems with Flask and PyCharm URL: https://kurzgedanke.de/post/problems-with-flask-and-pycharm/ ------------------------------- Title: Decentraland | How to Mine on a Mac URL: https://kurzgedanke.de/post/decentraland-hot-to-mine-on-a-mac/ ------------------------------- Title: Welcome URL: https://kurzgedanke.de/post/welcome/ -------------------------------
Я надеюсь, что вы нашли эту маленькую запись полезной и научились немного.
Если у вас есть какие -либо вопросы или замечания, пожалуйста, оставьте комментарий, свяжитесь со мной в Твиттере или напишите почту.
Вы можете прочитать этот пост на kurzgedanke.de .
Оригинал: “https://dev.to/kurzgedanke/beginner-web-scraping-in-mostly-pure-python-6d0”