Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2020, 22:11   #1
Grim6
Новичок
Джуниор
 
Регистрация: 10.05.2020
Сообщений: 3
Вопрос Проблема с парсингом Avito

Код ниже, открывается файл excel, но пустой + не замечает кол. страниц ( всегда выдаёт из отсутствие ) По первом выполнении кода видел все. Хотя рабочий (работал на украинском сайта по авто после адаптирован на avito). Спасибо за помощ !

Код:
from bs4 import BeautifulSoup
import requests
import os
import csv

URL = 'https://www.avito.ru/rossiya/avtomobili/'
HEADERS = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 YaBrowser/20.3.2.242 Yowser/2.5 Safari/537.36', 'accept-language': 'ru',}
HOST = 'https://www.avito.ru'
FILE = 'car.csv'

def get_count_pages(html):
	soup = BeautifulSoup(html, 'html.parser')
	pagination = soup.find_all('span', class_='pagination-item-1WyVp')
	print(pagination)
	if pagination:
		return int(pagination[-2].get_text())
	else:
		return 1

def save_file(items, path):
	with open (path, 'w', newline='') as file:
		writer = csv.writer(file, delimiter=';')
		writer.writerow(['Марка', 'Цена', 'Ссылки'])
		for item in items:
			writer.writerow([item['title'], item['price'], item['link']])

def get_html(url, params = None):
	r = requests.get(url, headers = HEADERS, params = params)
	return r

def get_content(html):
	soup = BeautifulSoup(html, 'html.parser')
	items = soup.find_all('div', class_='item__line')
	cars = []
	for item in items:
		cars.append({
			'title':item.find('h3', class_='snippet-title').get_text(strip=True),
			'price':item.find('span', class_='snippet-price').get_text(),
			'link':HOST + item.find('a', class_='snippet-link').get('href'),
			})
	return cars

def parse ():
	html = get_html(URL)
	if html.status_code == 200:
		cars = []
		pages_count = get_count_pages(html.text)
		for page in range(1, pages_count + 1):
			print(f'Сейчас идёт парсинг {page} страницы из {pages_count}')
			html = get_html(URL, params={'p':page})
			cars.extend(get_content(html.text))
		save_file(cars, FILE)
		os.startfile(FILE)
	else:
		print('Error Status Code')
parse()
Grim6 вне форума Ответить с цитированием
Старый 11.05.2020, 03:42   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

После парочки запусков скрипта авито ограничил доступ. Просто так его не попарсишь.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 11.05.2020, 09:31   #3
Grim6
Новичок
Джуниор
 
Регистрация: 10.05.2020
Сообщений: 3
Хорошо

Спасибо, так и подумал, попробую через сессии.
Grim6 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с парсингом *stRong* PHP 2 06.01.2016 14:42
Проблема с парсингом UKRtortik Общие вопросы Delphi 8 22.03.2014 22:43
Проблема с парсингом RUKatya Общие вопросы Delphi 1 17.03.2014 17:13
проблема с парсингом Pein95 Общие вопросы Delphi 5 14.07.2011 20:11