Форум сайта python.su
0
Не могу решить проблему. Как спарсить текст из класса «add-discount-text-price j-final-saving tooltipstered» Если я правильно понимаю, то это не статические данные, как бы Вы действовали в данном случае? При выполнении нижеуказанного кода отрабатывает только except:
Пробовал менять User-Agent на мобильный, но ответ тот-же. В средствах разработки Firefox не смог найти нужный запрос для парсинга (цена обновляется не по нажатию, а при загрузке страницы).
Извиняюсь за кривой код, только учусь (замечания приветствуются).
import requests from bs4 import BeautifulSoup import re def get_html(url): user_agent={"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"} r= requests.get(url, headers=user_agent) return r.text def get_data(html): #Получение html и его парсинг soup= BeautifulSoup(html,"lxml") try: price= soup.find("span", class_="add-discount-text-price j-final-saving tooltipstered").text #Ищем блок кода сайта где указана цена и забираем текст price1=re.findall(r"\d",(price)) # Ищем только цифры (получаем список вида [1,3,6]) price2=int("".join(price1).strip()) # Преобразуем список в строку, а затем в целое число except: price= soup.find('div', class_="add-discount-text").find("span", class_="add-discount-text-price j-final-saving").text price1=re.findall(r"\d",(price)) price2=int("".join(price1).strip()) else: price2=("Не удалось определить цену") print (price2) def main(): url = 'https://www.wildberries.ru/catalog/6799402/detail.aspx?targetUrl=GP' get_data(get_html(url)) if __name__ == '__main__': main()
Офлайн
568
anpyА вот это разве не оно?
В средствах разработки Firefox не смог найти нужный запрос для парсинга
Офлайн
0
Да, похоже оно.
Спасибо
Офлайн
0
Пытаюсь создать POST запрос, но видно что то делаю не так (или всё не так).
Получаю ответ 404
import requests import json url="https://www.wildberries.ru/content/cardpromo" payload = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0", "Accept": "*/*", "Accept-Language": "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "X-RequestVerificationToken": "CfDJ8Hyt7h5QkHpBl_eWRSZ-2nNaORxuC9Wok6viyAtpSSihJmUBKw_4puPE1petl8o6Mt3hSMe11fKwVcbOpn7wH907v4GwnqcUgoaX-aabvm2TTUvc1l-MhJw", "X-Requested-With": "XMLHttpRequest", "Pragma": "no-cache", "Cache-Control": "no-cache", "referrer": "https://www.wildberries.ru/catalog/6799402/detail.aspx?targetUrl=GP", "body": "cod1s=6799402&characteristicId=", "method": "POST", } r= requests.post(url, json=payload) print(r)
Отредактировано anpy (Авг. 15, 2019 17:01:33)
Офлайн
0
А сами на сайт
https://www.wildberries.ru/content/cardpromo
Офлайн
0
В средствах разработки Firefox POST запрос на адрес https://www.wildberries.ru/content/cardpromo
ответ 200
Прикреплённый файлы:
Снимок экрана.png (123,9 KБ)
Офлайн
221
вы смешали заголовки и тело запроса.
Офлайн
221
Я посмотрел скриншот и понял что вы вообще не то делаете. Там нет никакого json. Там данные формы
Офлайн
0
Что то я совсем потерялся.
Если не json, то почему средства разработки показывают тип json?
Как мне выйти на конкретный запрос, который выдаст ответ аналогичный как указано в средствах разработки? Мне нужно спарсить цену 1169 с этой страницы
Отредактировано anpy (Авг. 12, 2019 18:00:35)
Офлайн
221
Вы действительно сильно потерялись. Сейчас вы путаете запрос и ответ. На первом скриншоте Вы показали запрос, он действительно пост, но посылается он как Content-type: application/x-www-form-urlencoded, но в приведенном вами коде вы пытаетесь отправить эти данные как JSON.
На втором Вашем скриншоте вы показываете ответ сервера, тип данных которого вполне может отличаться от таковых в запросе.
anpy1) вам надо сформировать нормальный запрос, более правильным путем было бы использовать requests.Session что бы пройти авторизацию и потом уже слать запрос на адрес который надо, правильно указав данные (в вашем случае в коде надо было не json=payload, а просто data=payload и то при условии что вы сми данные сформируете корректно)
Как мне выйти на конкретный запрос, который выдаст ответ аналогичный как указано в средствах разработки? Мне нужно спарсить цену 1169
Офлайн