Найти - Пользователи
Полная версия: Помощь в разборе кода
Начало » Python для новичков » Помощь в разборе кода
1 2
anpy
Не могу решить проблему. Как спарсить текст из класса «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()
FishHook
anpy
В средствах разработки Firefox не смог найти нужный запрос для парсинга
А вот это разве не оно?

anpy
Да, похоже оно.
Спасибо
anpy
Пытаюсь создать 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)
ZiG
А сами на сайт
 https://www.wildberries.ru/content/cardpromo
заходили?

К СОЖАЛЕНИЮ, ЗАПРОШЕННАЯ ВАМИ СТРАНИЦА НЕ СУЩЕСТВУЕТ
anpy
В средствах разработки Firefox POST запрос на адрес https://www.wildberries.ru/content/cardpromo
ответ 200
JOHN_16
вы смешали заголовки и тело запроса.
JOHN_16
Я посмотрел скриншот и понял что вы вообще не то делаете. Там нет никакого json. Там данные формы
anpy
Что то я совсем потерялся.
Если не json, то почему средства разработки показывают тип json?
Как мне выйти на конкретный запрос, который выдаст ответ аналогичный как указано в средствах разработки? Мне нужно спарсить цену 1169 с этой страницы


JOHN_16
Вы действительно сильно потерялись. Сейчас вы путаете запрос и ответ. На первом скриншоте Вы показали запрос, он действительно пост, но посылается он как Content-type: application/x-www-form-urlencoded, но в приведенном вами коде вы пытаетесь отправить эти данные как JSON.
На втором Вашем скриншоте вы показываете ответ сервера, тип данных которого вполне может отличаться от таковых в запросе.
anpy
Как мне выйти на конкретный запрос, который выдаст ответ аналогичный как указано в средствах разработки? Мне нужно спарсить цену 1169
1) вам надо сформировать нормальный запрос, более правильным путем было бы использовать requests.Session что бы пройти авторизацию и потом уже слать запрос на адрес который надо, правильно указав данные (в вашем случае в коде надо было не json=payload, а просто data=payload и то при условии что вы сми данные сформируете корректно)
2) полученный ответ интерпретируете как json (response_data = r.json() ) и возьмете нужные данные которые Вам надо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB