Соскоб в Интернете - я получаю ярлыки, но не значения - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь собрать некоторые значения с веб-сайта, но единственное, что я получаю, это ярлыки. Фактические значения переменных, которые я пытаюсь получить, пусты.

Я использую запросы и BeautifulSoup.


import requests
from bs4 import BeautifulSoup

request = requests.get("https://www.cofidis.pt/cofidis/cofidisredirect.aspx?Prazo=48&IDPartner=6708&Montante=10000&Seguro=0&IDOferta=20719&IDFinalidade=6&IDFinalidadeOption=100&DesignacaoFinalidade=Outros%20Projetos&origem=")
soup = BeautifulSoup(request.text, 'html.parser')    
text = soup.find(id="micro-simulador")
print(text.get_text())

Но я получаю только ярлыки:


Resumo do seu pedido

Outros Projetos

Montante

Prazo

Mensalidade

TAEG

Seguro

TAN

MTIC

...

Цель состоит в том, чтобы получить значения внутри "микро-симуладора", такие как TAEG = 11,0%.

Может кто-нибудь сказать мне, что не так?

Ответы [ 3 ]

1 голос
/ 23 мая 2019

, поскольку эти значения находятся внутри входных тегов, вы можете получить их следующим образом:

import requests
from bs4 import BeautifulSoup

request = requests.get("https://www.cofidis.pt/cofidis/cofidisredirect.aspx?Prazo=48&IDPartner=6708&Montante=10000&Seguro=0&IDOferta=20719&IDFinalidade=6&IDFinalidadeOption=100&DesignacaoFinalidade=Outros%20Projetos&origem=")
soup = BeautifulSoup(request.text, 'html.parser')    
text = soup.find(id="micro-simulador")
inputs = text.findAll('input')

for input_tag in inputs:
    print(input_tag.get('id'))
    print(input_tag.get('value'))
0 голосов
/ 23 мая 2019

Вы получаете полный ответ JSON через XHR. Что касается того, что именно вам нужно вытащить, будет зависеть от вас, так как я не понимаю неанглийские ярлыки.

import requests

url = 'https://www.cofidis.pt/Sim/wsGeralRest.svc/MontantePrazos/6708/6'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'           }

jsonData = requests.get(url, headers=headers).json()
0 голосов
/ 23 мая 2019

Как говорит chitown88 , существует запрос JSON, который вы можете проанализировать и достичь того же результата, см. Пример ниже:

import requests

ID_PARTNER = 6708
ID_FINALIDADE = 6
PRAZO = 48
MONTANTE = 10000


def parse_request():
    url = 'https://www.cofidis.pt/Sim/wsGeralRest.svc/MontantePrazos/%s/%s' % (ID_PARTNER, ID_FINALIDADE)
    response = requests.request('GET', url)
    if response.ok:
        content = response.json()['COF_GET_MontantePrazos_RestResult']

        for montante_prazo in content['MontantesPrazos']:
            if montante_prazo['MNT'] == MONTANTE:
                montante_prazo['PM'] = list(filter(lambda v: v['PRZ'] == PRAZO, montante_prazo['PM']))
                return montante_prazo


print(parse_request())

Выход:

{
  'PM': [
    {
      'PRZ': 48,
      'TAN': 8.9,
      'MES': 270.29,
      'IDO': 20719,
      'MSA': 254.64,
      'TAEG': 11.0,
      'IDE': 182587376,
      'MNS': 250.07,
      'DCM': 0.0,
      'ITO': 588,
      'PSA': 48,
      'MTI': 12243.36,
      'PRS': 48
    }
  ],
  'MNT': 10000.0,
  'DES': 'Crédito Pessoal',
  'IDP': 6708,
  'IDF': 6,
  'IDS': 1932
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...