CoderCastrov logo
CoderCastrov
Парсер

Как выполнять парсинг веб-страниц с помощью Python - Полное руководство

Как выполнять парсинг веб-страниц с помощью Python - Полное руководство
просмотров
6 мин чтение
#Парсер

Привет, ребята ^^ Сегодня мы будем учиться вместе очень интересному и важному навыку в мире науки о данных и бизнеса - парсингу веб-страниц.

Кстати, вы уже знаете, что такое парсинг? Если нет, то я расскажу немного.

Парсинг - это процесс извлечения и получения данных с веб-сайта, а затем сохранение их в формате Microsoft Excel, Google Sheets и других подобных приложений. (Ismi, 2021)

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

С помощью парсинга мы никогда не останемся без данных, потому что Интернет становится нашей базой данных ^^

Итак, чтобы не тянуть кота за хвост, давайте сразу приступим к изучению парсинга веб-страниц с помощью Python.


Mari Парсинг

Шаг 1: Установка и импорт библиотек

Первое, что нам нужно сделать, это установить библиотеку Beautiful Soup, которая позволит нам парсить информацию с веб-сайтов. Установка библиотеки достаточно проста, вам просто нужно перейти в командную строку и ввести следующую команду:

pip install bs4

После установки библиотеки Beautiful Soup (bs4) мы можем импортировать ее следующим образом:

import bs4
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

Здесь мы импортируем не только bs4, но и библиотеку urllib.request в качестве веб-клиента, который поможет нам получить что-то из интернета.

Шаг 2: Подключение к веб-странице

После того, как все готово, мы должны найти веб-сайт, с которого мы будем парсить информацию. В этом посте мы будем парсить веб-сайт goodreads.com, который является одним из моих любимых сайтов, посвященных каталогизации книг. Теперь, чтобы найти нужный нам веб-сайт, вы можете посмотреть здесь https://www.goodreads.com/list/show/83612.NY_Times_Fiction_Best_Sellers_2015

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

my_url = ‘https://www.goodreads.com/list/show/83612.NY_Times_Fiction_Best_Sellers_2015'
my_url

Затем нам нужно создать наш собственный веб-клиент и загрузить эту веб-страницу следующим образом:

uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()

Затем мы разберем HTML, который у нас есть, следующим образом:

page_soup = soup(page_html, “html.parser”)

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

page_soup.h1

И если все правильно, то мы получим следующий вывод:

Это заголовок веб-страницы, с которой мы связались. Если вы не верите, вы можете проверить его самостоятельно на веб-сайте ^^

Шаг 3: Преобразование данных из HTML

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

Примечание: для выполнения инспекции просто щелкните правой кнопкой мыши и выберите "Inspect"

Обратите внимание, что на этом этапе вам нужно найти правильный элемент для данных, которые мы собираемся искать. Здесь мы находим элемент <td width=”100%” valign=”top”>, потому что этот элемент содержит всю информацию, которую нам нужно, начиная с названия книги, автора, рейтинга и оценки.

Когда мы нашли элемент, который содержит нужную информацию, следующим шагом будет получить этот элемент следующим образом:

tds = page_soup.findAll(“td”, {“width”:”100%”,”valign”:”top”})

Примечание: На этом этапе вам просто нужно найти один элемент для первой книги, который содержит всю информацию, которую мы хотим спарсить, потому что на следующем шаге мы будем использовать цикл for, чтобы выполнить аналогичный парсинг для других книг.

Затем, чтобы убедиться, что элементы правильные, мы можем проверить их следующей командой:

len(tds)

И тогда мы получим следующий вывод:

Это соответствует количеству книг на этой странице, а именно 100 книг ^^

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

book1 = tds[0]
book1

И тогда мы получим следующий вывод:

Вы можете видеть, что HTML-код в выводе выглядит беспорядочным и нечитаемым. Поэтому нам нужно отформатировать его, скопировав весь этот HTML, а затем отформатировав его на веб-сайте https://beautifier.io/, и тогда он будет выглядеть следующим образом:

Затем скопируйте отформатированный HTML и вставьте его в ваш текстовый редактор, и тогда он будет выглядеть следующим образом:

Примечание: В этом посте я использую Sublime 3

Шаг 4: Создание парсера

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

Как вы можете видеть на изображении выше, название книги находится внутри тега <span>, и чтобы добраться до этого тега, нам нужно пройти через <a><span> (тег <td> не учитывается, так как он уже определен в начале переменной book1), поэтому мы можем получить данные следующим образом:

books = book1.a.select(“span”)
title = books[0].text
title

Затем для данных об авторе они находятся в следующем HTML:

`

Для данных об авторе мы не можем получить их таким же образом, как и раньше, потому что данные об авторе находятся глубже в HTML, но на этот раз мы будем использовать команду findAll, которая будет выглядеть следующим образом:

authors = book1.div.select(“a”)
author = authors[0].text
author

Затем для данных о рейтинге они находятся в следующем HTML:

Для данных о рейтинге мы также не можем получить их таким же образом, как и раньше, потому что данные о рейтинге находятся глубже в HTML, но на этот раз мы будем использовать команду findAll, которая будет выглядеть следующим образом:

ratings = book1.findAll(“span”,{“class”:”greyText smallText uitext”})
rating = ratings[0].text.strip().replace(“,”,”.”)
rating

Как вы можете видеть, в первой строке команды findAll мы указываем тег <span class=”greyText smallText uitext”>, а затем во второй строке мы указываем программе найти текст рейтинга.

И, наконец, для данных об оценке они находятся в следующем HTML:

Для данных об оценке мы также будем использовать команду findAll, которая будет выглядеть следующим образом:

scores = book1.findAll(“div”,{“style”:”margin-top: 5px”})
score = scores[0].span.a.text.strip().replace(“score:”,””).replace(“,”,”.”).replace(“ “,””)
score

В команде findAll мы также указываем тег <div style=“margin-top: 5px”>. Во второй строке мы указываем программе найти текст оценки и удалить слово "score" из наших данных.

ПОЛНЫЙ СИНТАКСИС

Ну, поскольку мы уже знаем и создали способ извлечения данных из первой книги, то затем мы будем выполнять цикл и импортировать все полученные данные в csv. Полный синтаксис будет выглядеть следующим образом:

import bs4
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soupmy_url = 'https://www.goodreads.com/list/show/83612.NY_Times_Fiction_Best_Sellers_2015'
my_url# открытие и подключение к веб-сайту
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()# разбор html
page_soup = soup(page_html, "html.parser")# получение продукта
tds = page_soup.findAll("td", {"width":"100%","valign":"top"})file = "databuku.csv"
header = "title,author,rating,score \n"
f = open(file, "w")
f.write(header)for td in tds :
books = td.a.select("span")
title = books[0].text
authors = td.div.select("a")
author = authors[0].text
ratings = td.findAll("span",{"class":"greyText smallText uitext"})
rating = ratings[0].text.strip().replace(",",".")
scores = td.findAll("div",{"style":"margin-top: 5px"})
score =
scores[0].span.a.text.strip().replace("score:","").replace(",",".").replace(" ","")print("book_name: "+ title)
print("author: "+ author)
print("rating: "+ rating)
print("goodreads_score: "+ score)f.write(title.replace(",","") + ", " + author + ", " + rating + ", " + score +"\n")f.close()

Если вы запустите все эти синтаксические конструкции, то на вашем компьютере появится файл databuku.csv, который содержит набор книг, авторов, оценок и рейтингов, которые вы собрали ранее.

Как, друзья, легко, не так ли? Хорошо, может быть, на этом пока все для этого поста.

Если у вас есть вопросы, вы можете задать их в комментариях.

Или вы можете связаться со мной по электронной почте: @gumelarmuhamad26@gmail.com

Спасибо

Ссылки:

Dojo, D. S. (Режиссер). (2017). Intro to Web Scraping with Python and Beautiful Soup [Motion Picture].

Ismi, T. (2021, 15 февраля). Web Scraping: Pengertian dan Apa Saja Manfaatnya Bagi Bisnis. Извлечено из glints: https://glints.com/id/lowongan/web-scraping-adalah/#.YNR0yegzbIU