Ответы пользователя по тегу Парсинг
  • Как сохранить результат парсинга в питоне через Selenium в Excel?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Наиболее простой способ - это сохранять в csv файл, о потом импортировать в excel.
    Файлы CSV
    В csv вообще можно писать без всяких библиотек.
    Ответ написан
  • Как спарсить динамическую страницу?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Ну, для начала user-agent не обязателен, а Content-Type - обязателен, если планируете получить json. Также в post запросе в качестве параметра передаётся json, поэтому и нам его тоже нужно передать.
    import requests
    
    headers = {'Content-Type':'application/json;charset=utf-8'}
    url = 'https://www.vtb.ru/api/sitecore/coinsapi/filter'
    data = '{"query":"","newCollection":false,"Discounted":false,"GiftBox":false,"Order":"priceAsc","SearchGroups":false,"CoinList":"all","Favorites":[],"Groups":["8e67bb77202c40fa8ae0258d5bcb66f8","087e7eca08724e88aa1fbd0ebb0ebf70"],"Series":[],"Themes":[],"Metals":[],"PriceMin":"","PriceMax":"","Page":1,"ResultsOnPage":16}'
    
    response = requests.post(url,data=data,headers=headers)

    В json, который в data, можно менять различные параметры, такие как: номер страницы, количество монет на странице, минимальная и максимальная цена, и т.д.
    После этих манипуляций получаем "200 OK" и json с монетками.
    Ответ написан
    1 комментарий
  • Как спарсить номер телефона с авито без selenium и различных драйверов?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    1)Школьники всё равно в школу не ходят, наймите их за пару баксов, пусть кликают.
    2)Ещё как вариант, вручную перепечатывать номера с картинок.
    3)Ну если вы очень крутой программер, покопайтесь в js, там всего-то делов, отправить get запрос по адресу
    https://www.avito.ru/items/phone/id_объявления
    с параметрами:
    5eab4525a90fd705297405.png
    Половину я вам подсказал, за вами осталось узнать как генерируются pkey и searchHash.

    Добавлено:
    Вот код, параметры я скопировал из браузера. Если удастся понять как они(вернее как их значения) генерируется, то дело в шляпе):
    Внимание! В коде обнаружены костыли!)
    import requests
    import base64
    
    params = {	'pkey':'dfed69290bc453b834e2e0e2f16bf630',	# Осталось узнать, как генерируется это значение!
    			'vsrc':'r',
    			'searchHash':'ttv948zc8v4kg0oc4k0o8wok04w8ook'	# И это тоже!
    			}
    
    url = 'https://www.avito.ru/items/phone/1315030387'
    
    response = requests.get(url,params=params)
    
    with open("imageToSave.png", "wb") as fh:
        fh.write(base64.decodebytes(response.text[34:-2].encode()))

    На выходе получаем картинку с номером для объявления с id 1315030387. На Python распознать не проблема.
    Ответ написан
    8 комментариев
  • Как написать авторизацию на сайте, на python?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Лучше для начала через браузер авторизуйтесь и скопируйте cookies из браузера в библиотеку requests. Так будет проще для старта.
    Дальше можно будет использовать для авторизации selenium.
    Ответ написан
    2 комментария
  • Парсинг сайтов, как обойти защиту?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Рекомендую программу RSocks Proxy Checker Есть версии и под linux. Загружаете в неё список прокси, и указываете сайт для проверки 'ruru.hotmo.org '. По окончанию проверки, сортируете результаты по "200 OK" и сохраняете такие прокси. Только что проверил на python, работает.
    5ea5e26769948796051262.png
    Ответ написан
    1 комментарий
  • Как обойти блокировку сайта от парсинга?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Кто вам сказал, что там стоит блокировка?
    1) Некоторые данные подгружаются по xhr.
    2) Также данные на сайте обновляются по websocket.

    websockets.readthedocs.io
    PyPI websockets 8.1
    Ответ написан
    2 комментария
  • Как спарсить количество подписчиков в Инстаграме?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Ставить задержки и использовать прокси.
    Ответ написан
  • Как правильно парсить с python requests?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    1) 5-7 секунд - это много, поэтому это никакая не ddos атака. Многие коммерческие компании, которые парсят сайты(в том числе мвидео, озон и другие магазины) как раз парсят один товар в 5-7 секунд.
    2)
    Есть ли например такая возможность как один раз открыть сайт и постоянно считывать с него информацию, чтобы не устанавливать соединение каждые 5 секунд?
    Есть, если только сайт отдает информацию по websocket(не зашифрованному).
    3) Либо грузить страничку каждые 5-7 секунд, либо можно посмотреть в devtools, может сайт отдает информация через xhr запрос. В данном случае может быть проще парсить.
    Ответ написан
    Комментировать
  • При парсинге всё вписалось без пробелов?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    import requests
    from bs4 import BeautifulSoup
    
    url = 'https://koronavirusa.site/ru'
    page = requests.get(url)
    soup = BeautifulSoup(page.text, "html.parser")
    container = soup.find('div', class_='sppb-container-inner')
    data = container.find_all('div',class_='sppb-animated-number')
    
    infected = data[0].text
    died = data[1].text
    healed = data[2].text
    
    print(f'''Заражено: {infected}
    Умерло: {died}
    Выздоровело: {healed}''')

    Заражено: 1,990,746
    Умерло: 125,919
    Выздоровело: 466,997
    Ответ написан
    2 комментария
  • Можно ли как-то запарсить элемент из таблицы?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
  • Как запустить метод догрузки страницы?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    url = 'https://phys-ege.sdamgia.ru/test?filter=all&category_id=205'
    
    responce = requests.post(url,data={'ajax':'1','skip':'10'})

    Здесь нужно менять параметр skip. Если установить его в 0, загрузиться первые 5 блоков, 5 - следующие 5, и т.д. Если установить параметр в 10 - загрузится 1 блок, так как там их всего 11.
    Ответ написан
    Комментировать
  • Как получить полный html код страницы с помощью requests.get()?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Откройте инструменты разработчика и полистайте страницу вниз. Обратите внимание на url и параметр page:
    5e7b53b9d04da941287952.png
    Ответ написан
    6 комментариев
  • Как спарсить размер с сайта?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Попробуйте так:
    soup = BeautifulSoup(response.text,"lxml")
    		ul = soup.find('ul',id = 'sizes')
    		sizes = ul.find_all('li')
    		for size in sizes:
    			print(size.text.strip())

    Только что попробовал, печатает размеры. Пробовал куртки, в которых размеры и римскими цифрами и нашими. Работает одинаково.
    PS: Пробовал на куртках (детских и женских).
    Ответ написан
  • Как авторизироваться на сайте через Requests?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    1) anti-captcha.com
    2) Авторизоваться браузером, и скопировать cookies (имя - 'grailed_jwt', параметр будет длинная строка). Эти куки передать reqeuests'том. Если все верно, https://www.grailed.com/api/users/me возвращает json с информацией о пользователе.
    3) Selenium(можно использовать только для авторизации, дальше пользоваться requests'том)
    Ответ написан
  • Как парсить элементы сайта, генерируемые Angular JS?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Может я не правильно понял вопрос, но текст песни забирается requests'стом с genius.com буквально в одну-две строчки.
    5e53c5b28e69f864577165.png
    Ответ написан
    2 комментария
  • Парсинг на 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 комментария
  • Как вытащить табличные данные из html?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    На быструю руку склепал. Не факт что код правильный, но рабочий:
    Старый код:
    import requests
    from bs4 import BeautifulSoup
    
    url = 'https://coinmarketcap.com/'
    r = requests.get(url)
    
    soup = BeautifulSoup(r.text, 'lxml')
    all = soup.find_all('',class_='cmc-table-row')
    
    for x in all:
    	rank = x.find('td',class_='cmc-table__cell--sort-by__rank').text
    	name = x.find('td',class_='cmc-table__cell--sort-by__name').text
    	market_cap = x.find('td',class_='cmc-table__cell--sort-by__market-cap').text
    	price = x.find('td',class_='cmc-table__cell--sort-by__price').text
    	volume = x.find('td',class_='cmc-table__cell--sort-by__volume-24-h').text
    	circulating_supply = x.find('td',class_='cmc-table__cell--sort-by__circulating-supply').text
    	change = x.find('td',class_='cmc-table__cell--sort-by__percent-change-24-h').text
    	print(f'{rank} {name} {market_cap} {price} {volume} {circulating_supply} {change}')

    5e39a5a9404ac829063108.png

    UPDATE 22.10.20:
    import requests
    from bs4 import BeautifulSoup
    
    url = 'https://coinmarketcap.com/'
    r = requests.get(url)
    
    soup = BeautifulSoup(r.text, 'lxml')
    all = soup.find_all('',class_='cmc-table-row')
    
    for x in all:
      rank = x.find('td',class_='rc-table-cell table-col-rank rc-table-cell-fix-left').text
      name = x.find('a',class_='cmc-link').find('p').text
      market_cap = x.find('td',class_='rc-table-cell font_weight_500___2Lmmi').text
      price = x.find('td',class_='rc-table-cell font_weight_500___2Lmmi').text
      volume = x.find('div',class_='Box-sc-16r8icm-0 sc-1anvaoh-0 gxonsA').a.p.text
      circulating_supply = x.find('p',class_='Text-sc-1eb5slv-0 kqPMfR').text
      # change = x.find('td',class_='cmc-table__cell--sort-by__percent-change-24-h').text
      print(f'{rank} {name} {market_cap} {price} {volume} {circulating_supply}')
    Ответ написан
  • Как извлечь информацию сайта в удобную таблицу?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Таких инструментов не видел. Сам недавно делал похожую программу для тостера.
    3fe98b703e514b3f8b7eb1cf8901a9ff.png
    Программа скачивает страницу toster.ru/q/ID, потом парсит нужные данные и заносит в базу. Потом я открывал базу в программе для просмотра баз.
    ffcb5bec216e491f93f8cb051ed7a5e2.png
    Там и выборка нужных данных, и сортировка.
    Если я правильно понял, вам нужно скопировать товары с другого сайта к себе на сайт.
    Могу попробовать помочь,если дадите ссылку на сайт. Хотя ничего обещать не могу, так как с java script могут быть проблемы.
    Ответ написан