Рубрики
Без рубрики

Игра с BawySoupsoup (пауки могут быть не так страшно в конце концов)

Скачка круто. Вы можете автоматизировать много вещей – царапайте работу, которые вы хотите, соскребайте статьи, C … с меткой соскабливания, Python, Beautifulsoup.

Скачка круто. Вы можете автоматизировать много вещей – 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)

Терминал:


Теперь, когда мы напечатали только один результат, мы видим, что он содержит

Тег с титулом, который мы хотим. Кроме того, мы видим, у нас есть

Тег с 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”