Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
vp-webdev
7 лет назад

Парсинг средствами Python, библиотека BeautifulSoup

Была поставлена задача - спарсить товарные позиции с одного сайта. Задачу решил выполнить на языке Python 3.




Почему выбор пал именно Python 3? Вопрос выбора языка программирования, по-большому счёту, это дело вкуса. Знаю, что python используется в Яндекс, в Гугл, в Инстаграм и в других крупных проектах. Одним из плюсов данного языка является лёгкость изучения и небольшой объём кода.
Для парсинга нам понадобятся 3 модуля: requests, BeautifulSoup и json.
requests служит для HTTP-запросов. BeautifulSoup - модуль, с помощью которого будет производиться парсинг. Модуль JSON - формирует json объект из словаря, мне так удобно хранить данные.
В первую очередь, мы собрали ссылки на продукты и сохранили в json файл.
Не забываем подключить библиотеки:

import requests
from bs4 import BeautifulSoup
import json

Получаем html-код и передаём его в переменную:

r = requests.get(url).text

Записываем в переменную объект BeautifulSoup, то есть дерево синтаксического разбора этой страницы, полученной с помощью встроенного lxml:

soup = BeautifulSoup(html, 'lxml')

Присваиваем переменной название файла:

filename = 'hyundai_links_products.json'

Открываем файл:

wfile = open(filename, mode='w', encoding='UTF-8')

С помощью soup получаем "лист" с ссылками товаров:

prod_block = soup.find('div', class_='product-list')

Создаём словарь:

links = []

Проходим циклом полученные данные, получаем href каждой ссылки и добавляем в словарь:

for block in prod_block.find_all('div', class_='tov'):
    links.append(block.find('div', class_='image').find('a').get('href'))

Записываем полученные данные в json формате в файл и закрываем его:

json.dump(links, wfile, indent=4, ensure_ascii=False)
wfile.close()

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

Код целиком можно посмотреть тут: https://pastebin.com/XPZuXXVx

Если вам интересен данный язык программирования - много постов на эту тему есть у @pythono, который, кстати, является одним из авторов данного сообщества.

Данный пост подготовлен автором @zheev

350
455.477 GOLOS
На Golos с August 2017
Комментарии (2)
Сортировать по:
Сначала старые