Найти тему
Python 3

Парсер ссылок olx на Python

olx
olx

Сегодня Я покажу свой парсер. У меня был заказ, создать парсер, который будет собирать ссылки с сайта olx, на товары, авторы которых выкладывали только один товар на сайт.

Для этого мне потребуется библиотека request и bs4

Импортируем нужные модули

import os
import time
import requests
from bs4 import BeautifulSoup

Далее Мы создадим переменные которые будут хранить в себе ссылку на сайт, какую страницу мы будем обрабатывать и категорию товаров + создадим список в котором будут храниться ссылки в будущем.

url = "https://www.olx.ro/"
electronice = "electronice-si-electrocasnice/"
page = "?page="
number = 1
url_list = []

Создаем цикл, который будет перебирать страницы и собирать блоки которые хранят ссылку на товар. Всего 25 страниц у сайта olx, по этому Мы указываем это в цикле. Мы отправляем запрос на сайт, затем читаем ответ как html страницу и ищем нужный нам класс. В данном классе должны храниться блоки с нужными нам ссылками.

while number != 24:
response = requests.get(url + electronice + page + str(number))
soup = BeautifulSoup(response.text, 'lxml')
quotes = soup.find_all(class_='fixed offers breakword redesigned')
olx_url = quotes[0].find_all('a', class_='marginright5 link linkWithHash detailsLink')
url_list_page = 1

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

while url_list_page != 30:
try:
response2 = requests.get(olx_url[url_list_page]['href'])
soup2 = BeautifulSoup(response2.text, 'lxml')
quotes2 = soup2.find_all('div', class_='offerfooter')
olx_url2 = quotes2[0].find_all(class_='gallerywide clr normal')
except Exception as e:
url_list_page += 1
response2 = requests.get(olx_url[url_list_page]['href'])
soup2 = BeautifulSoup(response2.text, 'lxml')
quotes2 = soup2.find_all('div', class_='offerfooter')
olx_url2 = quotes2[0].find_all(class_='gallerywide clr normal')

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

if olx_url2 == []:
url_list.append(olx_url[url_list_page]['href'])
elif olx_url2 != []:
pass
os.system('cls')
print(f'Страница {number} из 25')
print(f'Блок {url_list_page} из 39')
url_list_page += 1
number += 1

После чего Мы все записываем в файл url_list.txt

with open('url_list.txt', 'w') as file:
for line in url_list:
file.write(line + '\n')
exit()

Ссылка на весь код, с подробными коментариями: КЛИК

Наука
7 млн интересуются