Скачка круто. Вы можете автоматизировать много вещей – Scrape рабочие места, которые вы хотите, соскабливание изделий, создайте агрегаторы контента, отправьте тому, что вам нужно ваше электронное письмо, сохраните его в файл … Множество вариантов. Просто уважительно к веб-сайтам, которые вы соскабливаете и проверяете их политику в отношении соскабливания. Требования: Python, CountrySoup4, запросы.
URL мы будем использовать для образовательных целей. Сам Создатель говорит, что он может быть использован для практики ваших навыков соскоб: http://books.toscrape.com/
Установка
Создайте файл Python, где вы будете писать код для соскабливания – я буду назвать шахты Scraper.py. Как обычно, мы используем PIP для установки запросов и модулей BeautifulSoup4. Перейдите на свой терминал, где активирован VINV и введите: PIP Установка запросов BeautifulSoup4
Модуль запросов помогает нам отправлять запросы на веб-страницу и увидеть ответ. BeautifulSououp поможет нам с помощью данных соскабливания и фильтрации, которые мы хотим.
Давайте начнем
Во-первых, мы будем использовать модуль запросов для доступа к URL. scraper.py
import requests page = requests.get("http://books.toscrape.com/") print(page)
Когда мы запускаем скрипт, мы получим: <Ответ [200]>
Что говорит нам, что мы добрались до URL (код состояния 200). Теперь мы начнем использовать BeautifulSoup.
Редактировать Scraper.py
файл:
import requests from bs4 import BeautifulSoup page = requests.get("http://books.toscrape.com/") soup = BeautifulSoup(page.content, "html.parser") print(soup) print(soup.prettify())
Мы создали экземпляр супа. Далее мы хотим увидеть, на что мы смотрим и откуда мы собираем данные.
Для этого у нас есть два варианта (и решать вам выбрать, что лучше для вас лучше):
1. Печать экземпляра супа к терминалу
Когда мы распечатаем суп
Переменная, мы получим HTML-код страницы, который мы доступны. Я написал два варианта печати результатов ( Печать (суп)
и Печать (суп.Prettify ()
). Разница – если мы распечатаем суп
Сам, мы получим уродливый, загроможденный код. Если мы используем Prettify ()
мы будем чистыми HTML
код.
2. Используя devtools.
Я предпочитаю второй вариант. Когда мы открываем URL, мы хотим царапать в браузере, используйте щелчок правой кнопкой мыши и выберите Проверять
Отказ Devtools
будет появляться. Выберите Элементы
Опция и перезагрузить страницу. У вас будет HTML
Код страницы показан в Элементы
раздел. Это тип, который вы ищете: `
...
`
Теперь, если вы не использовали HTML
Раньше, делайте короткие исследования – это не сложно. Для Craping целей мы должны знать основы, такие как теги, IDS, классы и т. Д. Таким образом, мы можем схватить то, что нам нужно. В попрошайнике это займет больше времени, чтобы ознакомиться с HTML
сам. Но … Как и все остальное, это будет лучше с практикой.
Давайте соскребаемся
Здесь мы хотим сделать, – получить название книги, цена книги и проверить, доступна ли книга или нет.
Во-первых, мы хотим увидеть, какие HTML
Тег имеет содержание, которое мы хотим царапать. После исследования HTML
мы можем заметить <Статья>
ярлык. Быть более точным, <Статья>
Тег с Class = "product_pod"
Отказ Этот конкретный тег имеет все, что нам нужно – название, цена и наличие книги. Информация о каждой книге завернута в <Статья>
Теги с Class = "product_pod"
Отказ У нас есть наша цель – нам просто нужно иметь все из них в одной переменной для облегчения соскабливания. Давайте добавим следующую строку нашу Scraper.py
файл:
results = soup.find_all("article", class_="product_pod")
В нашем суп
Экземпляр мы ищем все <Статья>
Теги, которые имеют Class = "product_pod"
и мы храним их в Результаты
Переменная. Когда мы печатаем Результаты
Мы получим список подобной списке. Теперь давайте посмотрим, как один элемент Результаты
Похоже, мы можем знать, что делать. Добавьте следующее в свой файл и запустите скрипт:
result = results[0] print(result)
Терминал:
A Light in the ...
£51.77
In stock
Теперь, когда мы напечатали только один результат, мы видим, что он содержит Тег с титулом, который мы хотим. Кроме того, мы видим, у нас есть
Тег с
Class = "Price_color"
который содержит цену книги, и у нас есть Тег с
Class = "Доступность Insocock"
Что говорит нам, если книга на складе или нет. Теперь мы доступ к информации, которая нам нужна.
Давайте начнем извлекать данные из Результат
Переменная, которая содержит данные, связанные с одной книгой (чуть позже, мы сделаем это для всех книг со страницы, которую мы соскабливаем).
Название книги
В ваш файл Добавить:
title_element = result.find("h3")
Когда мы печатаем title_Element
Мы получим следующее:
Как мы видим, полное название в ярлык. Нам нужно получить доступ к самому названию, и мы делаем это, доступа к
Теги в
title_Element
и в поисках самого названия. Добавить в свой файл:
title = title_element.find("a")["title"]
Печать (название)
Теперь даст нам «свет на чердаке».
Мы решили название книги.
Цена
Мы увидели, что цена завернута в Тег с
Class = "Price_color"
. Добавить в свой файл следующее:
price_element = result.find("p", class_="price_color")
Когда мы распечатаем Price_Element
, мы получили:
£51.77
Теперь нам нужно получить текст из тега и очистить текст от любого расстояния. Добавьте следующую строку в свой файл:
price = price_element.text.strip()
Когда мы распечатаем цену, у нас будет красиво отформатированная строка – £ 51,77
Отказ
Наличие книги
Аналогично в цену книги мы получим наличие книги. Добавлять:
availability_element = result.find("p", class_="instock availability")
Что даст нам следующий результат:
In stock
Теперь мы убираем результат, добавив:
available = available_element.text.strip()
Что даст нам строку «в наличии». Хорошо, мы знаем, как получить название, цена и наличие книги.
Последний код
С Результаты
Переменная с самого начала – подобная списку переменная, мы можем пройти петлю и сделать это для каждой книги в цикле (для каждого результата в результате). Давайте немного изменим наш код, добавив A для цикла и печати информации для каждой книги в списке. Измените свой файл, чтобы выглядеть так:
import requests from bs4 import BeautifulSoup page = requests.get("http://books.toscrape.com/") soup = BeautifulSoup(page.content, "html.parser") results = soup.find_all("article", class_="product_pod") for result in results: # looping through results and storing the values to a separate variables. # the book title. title_element = result.find("h3") title = title_element.find("a")["title"] # the price of the book. price_element = result.find("p", class_="price_color") price = price_element.text.strip() # availability of the book available_element = result.find("p", class_="instock availability") available = available_element.text.strip() print(f"The book title is: {title}.") print(f"The book price: {price}.") print(f"The book is: {available}.\n")
Когда мы запускаем скрипт, мы получим следующие результаты в терминале:
The book title is: A Light in the Attic. The book price: £51.77. The book is: In stock. The book title is: Tipping the Velvet. The book price: £53.74. The book is: In stock. The book title is: Soumission. The book price: £50.10. The book is: In stock. ... ... ... The book title is: Libertarianism for Beginners. The book price: £51.33. The book is: In stock. The book title is: It's Only the Himalayas. The book price: £45.17. The book is: In stock.
Там есть. Скаивание сама не супер сложно, просто требует некоторой практики (как все остальное). Кроме того, это можно сделать по-разному в зависимости от того, что вам нужно, и что вы предпочитаете. Надеюсь, кто-то найдет этот пост полезным.
Оригинал: “https://dev.to/joks84/playing-with-beautifulsoup-spiders-might-not-be-so-scary-after-all-4o81”