• Как решить данную ошибку в telebot?

    @nishtiak2012
    #1. разметку меняешь на "HTML" (то есть parse_mode="HTML")
    #2. `{tag}` заменяешь на <code>{tag}</code>
    #3. кайфуешь;)
    Ответ написан
    Комментировать
  • Как получить последний элемент столбца?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    К соседнему ответу могу добавить.
    Если Id у вас формируется автоинкрементом, то можо ограничить выдачу select-запроса одним элементом и указать обратный порядок сортировки по нужному вам полю.
    Ответ написан
    Комментировать
  • Как заставить бота в телеграмм отправлять сообщения в закрытую группу?

    @AcTapD
    Нужно добавить этого бота в группу. Потом в методе отправки сообщений нужно прописывать ID группы. ID группы можно узнать с помощью https://api.telegram.org/bot"токен_бота_без_ковыче.... Там числовое значение и начинается с - .
    Ответ написан
    Комментировать
  • Как спарсить скидки с hoff.ru?

    tumbler
    @tumbler Куратор тега Python
    бекенд-разработчик на python
    Ошибка намекает, что Вы переменную id_ не определили, а код в функции files_writer - что не её одну. Похоже, тут проблема с базовыми знаниями python, которые стоит подтянуть с помощью обучающих материалов. А ответ на вопрос "как спарсить скидки" - выучить язык для начала.
    Ответ написан
    Комментировать
  • Как отправить текст с одного компьютера на другой через скрипты на Python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Либо настраивать маршрутизацию между хостами, либо заводить третью сетевую точку, до которой есть маршрутизация у обоих хостов.
    Ответ написан
    Комментировать
  • Парсинг на python. Как исправить работу пагинации?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Не ту ссылку используете. Нужно эту - "www.yoox.com/RU/shoponline?dept=clothingmen&gender=U&page={x}&season=X&clientabt=SmsMultiChannel_ON%2CSrRecommendations_ON%2CNewDelivery_ON%2CRecentlyViewed_ON%2CmyooxNew_ON"

    В коде ниже страницы парсятся по очереди и сразу результат заносится в файл. В файл записываются только результаты со скидками!
    Вот рабочий код, может кому пригодится:
    import requests
    from bs4 import BeautifulSoup
    from lxml import html
    import csv
    
    url = 'https://www.yoox.com/ru/%D0%B4%D0%BB%D1%8F%20%D0%BC%D1%83%D0%B6%D1%87%D0%B8%D0%BD/%D0%BE%D0%B4%D0%B5%D0%B6%D0%B4%D0%B0/shoponline#/dept=clothingmen&gender=U&page=1&season=X'
    
    headers = {'user-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0',
    			'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
    }
    
    def getClothes(url,page_id):
    	clothes = []
    	respones = requests.get(url,headers=headers)
    	soup = BeautifulSoup(respones.text,'lxml')
    
    	mainContent = soup.find('div',id=f'srpage{page_id}')
    	products = mainContent.find_all('div',class_='col-8-24')
    
    	for product in products:
    
    		brand = product.find('div',class_='itemContainer')['data-brand'] # Бренд
    		cod10 = product.find('div',class_='itemContainer')['data-current-cod10'] # Для формирования ссылки yoox.com/ru/{cod10}/item
    		category = product.find('div',class_='itemContainer')['data-category']	# Категория
    		oldPrice = product.find('span',class_='oldprice text-linethrough text-light') # Старая цена (может не быть)
    		newPrice = product.find('span',class_='newprice font-bold') # Новая цена (может не быть)
    		
    		if oldPrice is not None:
    			# Данный код выполняется только, если на товар есть скидка
    			sizes = product.find_all('div',class_='size text-light')
    			str_sizes = ''
    
    			for x in sizes:
    				str_sizes += x.text.strip().replace('\n',';')
    			clothes.append({'art':cod10,
    							'brand':brand,
    							'category':category,
    							'url':f'https://yoox.com/ru/{cod10}/item',
    							'oldPrice':oldPrice.text,
    							'newPrice':newPrice.text,
    							'sizes':str_sizes
    							})
    	return clothes
    
    
    def getLastPage(url):
    	respones = requests.get(url,headers=headers)
    	soup = BeautifulSoup(respones.text,'lxml')
    	id = soup.find_all('li', class_ = 'text-light')[2]
    	
    	return int(id.a['data-total-page']) + 1
    
    def writeCsvHeader():
    	with open('yoox_man_clothes.csv', 'a', newline='') as file:
    		a_pen = csv.writer(file)
    		a_pen.writerow(('Артикул', 'Ссылка', 'Размеры', 'Бренд', 'Категория', 'Старая цена', 'Новая цена'))	
    
    def files_writer(clothes):
    	with open('yoox_man_clothes.csv', 'a', newline='') as file:
    		a_pen = csv.writer(file)
    		for clothe in clothes:
    			a_pen.writerow((clothe['art'], clothe['url'], clothe['sizes'], clothe['brand'], clothe['category'], clothe['oldPrice'], clothe['newPrice']))
    
    
    if __name__ == '__main__':
    	writeCsvHeader() # Запись заголовка в csv файл
    	lastPage = getLastPage(url) # Получаем последнею страницу
    	for x in range(1,lastPage): # Вместо 1 и lastPage можно указать диапазон страниц. Не начинайте парсить с нулевой страницы!
    		print(f'Скачавается: {x} из {lastPage-1}')
    		url = f'https://www.yoox.com/RU/shoponline?dept=clothingmen&gender=U&page={x}&season=X&clientabt=SmsMultiChannel_ON%2CSrRecommendations_ON%2CNewDelivery_ON%2CRecentlyViewed_ON%2CmyooxNew_ON'
    		files_writer(getClothes(url,x)) # Парсим и одновременно заносим данные в csv

    5e4ffa5e16614949170016.png
    Ответ написан
    3 комментария