簡體   English   中英

使用登錄頁面在Python中進行Web爬取

[英]Web Scraping in Python with a Login Page

我正在使用此代碼嘗試進行一些Web抓取。 我正在嘗試使用請求和漂亮的湯來訪問我的學校成績,並且登錄時遇到很多麻煩。我只是遇到錯誤:

TypeError: 'NoneType' object has no attribute '__getitem__'

這是我正在使用的代碼:

import requests
from bs4 import BeautifulSoup

    headers = {
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}

login_data = {
    'name': 'my_username',
    'pass': 'my_password',
    'form_id': 'new_login_form',
    'op': 'Login'
}

with requests.Session() as s:
    url = 'https://irc.d125.org'
    r = s.get(url, headers=headers)
    soup = BeautifulSoup(r.content, 'html5lib')
    login_data['form_build_id'] = soup.find('input', attrs={'name': 'form_build_id'})['value']
    r = s.post(url, data=login_data, headers=headers)
    print(r.content)

任何幫助表示贊賞! 非常感謝!

當按下登錄按鈕時,站點將發送帶有登錄信息的xhr請求。 以下方法應該起作用,只需在提供的空白處替換您的用戶名和密碼即可。

import requests
from bs4 import BeautifulSoup

headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}

login_data = {
    "UserName": "REPLACE_USER",  # Enter Username
    "Password": "REPLACE_PASSWORD",  # Enter password
    "RememberMe": False,
}

with requests.Session() as s:
    url = 'https://irc.d125.org/Login'
    s.get(url, headers=headers)
    r = s.post(url, data=login_data)
    print(r.text)

在發布數據之前,您應該使用某種方式呈現網頁的javascript。 這樣做的一個好方法是將您的登錄腳本與Splash一起放入Scrapy蜘蛛中:

參見https://github.com/scrapy-plugins/scrapy-splash

您可以使用硒。 我也用它來從學校頁面獲得成績。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM