Как очистить данные с сайта, когда вам нужно войти? - PullRequest
0 голосов
/ 04 мая 2020

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

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

my_url = 'https://mijn.makelaarsland.nl/aanbod/kaart'
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()

#html parser
page_soup = soup(page_html, "html.parser")
page_soup.body.div

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

<div class="login-background"></div>

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

Здесь может быть некоторая полезная информация:

This is the log in URL:
LOGIN_URL = "https://mijn.makelaarsland.nl/inloggen"


content-type: application/x-www-form-urlencoded

Обзор сетевой страницы, когда я щелкаю правой кнопкой мыши на 'Проверить'

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Я должен был исправить проблему BeautifulSoup. Кроме того, я думаю, что мне нужно добавить _RequestVerificationToken.

import requests
from bs4 import BeautifulSoup

headers = {"user-agent" : "Mozilla/5.0 ... etc."
          }

login_data = {
    "MyAccount.Username": "myusername",
    "MyAccount.Password": "mypassword",
    "RembemberMe" : "false"
}


with requests.Session() as s:
    url = 'https://mijn.makelaarsland.nl/inloggen?ReturnUrl=%2faanbod%2fkaart'
    r = s.get(url, headers=headers)
    soup = BeautifulSoup(r.content, 'html.parser')
    login_data[_RequestVerificationToken] = soup.find('input', attrs={'name' : '_RequestVerificationToken'})['value']
    r = s.post(url, data=login_data, headers=headers)

    print(r.content)

Однако возвращается:

TypeError                                 Traceback (most recent call last)
<ipython-input-52-5509032e4ad3> in <module>
     16     r = s.get(url, headers=headers)
     17     soup = BeautifulSoup(r.content, 'html.parser')
---> 18     login_data[_RequestVerificationToken] = soup.find('input', attrs={'name' : '_RequestVerificationToken'})['value']
     19     r = s.post(url, data=login_data, headers=headers)
     20 

TypeError: 'NoneType' object is not subscriptable

Что я здесь не так делаю?

0 голосов
/ 04 мая 2020

Как я уже писал в своем комментарии, я предлагаю использовать пакет requests python. Этот пакет имеет отличную документацию, и вы можете найти много учебников в Интернете. Зайдите на веб-сайт в формате requests.Session(), перейдите на нужную страницу, а затем очистите с Beautifulsoup.

Вот пример кода, адаптированный с { ссылка }

import requests

# Fill in your details here to be posted to the login form.
payload = {
    "MyAccount.Username": "username",
    "MyAccount.Password": "password"
}

# Use 'with' to ensure the session context is closed after use.
with requests.Session() as s:
    p = s.post("https://mijn.makelaarsland.nl/inloggen", data=payload)
    # An authorized request.
    r = s.get("https://mijn.makelaarsland.nl/aanbod/kaart")
    print("status code:", r.status_code)
    page_soup = soup(r.text, "html.parser")
    page_soup.body.div
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...