簡體   English   中英

帶有請求的Python Web抓取-登錄后

[英]Python web scraping with requests - after login

我在下面有一個python請求/佳湯代碼,可讓我成功登錄到url。 但是,登錄后,要獲取我需要的數據,通常必須手動進行以下操作:

1)點擊第一行中的“聲明”:

在此處輸入圖片說明

2)選擇日期,單擊“運行語句”:

在此處輸入圖片說明

3)查看數據:

在此處輸入圖片說明

這是我用來登錄到上面的步驟1的代碼:

import requests
from bs4 import BeautifulSoup

logurl = "https://login.flash.co.za/apex/f?p=pwfone:login"
posturl = 'https://login.flash.co.za/apex/wwv_flow.accept'

with requests.Session() as s:
    s.headers = {"User-Agent":"Mozilla/5.0"}
    res = s.get(logurl)
    soup = BeautifulSoup(res.text,"html.parser")

    arg_names =[]
    for name in  soup.select("[name='p_arg_names']"):
        arg_names.append(name['value'])

    values = {
        'p_flow_id': soup.select_one("[name='p_flow_id']")['value'],
        'p_flow_step_id': soup.select_one("[name='p_flow_step_id']")['value'],
        'p_instance': soup.select_one("[name='p_instance']")['value'],
        'p_page_submission_id': soup.select_one("[name='p_page_submission_id']")['value'],
        'p_request': 'LOGIN',
        'p_t01': 'solar',
        'p_arg_names': arg_names,
        'p_t02': 'password',
        'p_md5_checksum': soup.select_one("[name='p_md5_checksum']")['value'],
        'p_page_checksum': soup.select_one("[name='p_page_checksum']")['value']
    }
    s.headers.update({'Referer': logurl})
    r = s.post(posturl, data=values)
    print (r.content)

我的問題是(初學者),我如何跳過第1步和第2步,並簡單地使用選定的日期作為表單條目(下面的標題和表單信息)使用最終的URL更新和發布另一個標題? referral header是上面的第2步):

在此處輸入圖片說明 ]

編輯1:從csv文件下載的網絡請求:

在此處輸入圖片說明

使用Selenium WebDriver,它具有很多很好的功能來處理Web服務。

硒將是自動瀏覽器交互的最佳選擇。 它不僅可以用於從網站抓取數據,還可以與其他形式進行交互。 我強烈推薦它,因為我過去已經使用了很多。 如果您已經安裝了pip和python,請繼續輸入

點安裝硒

這將安裝硒,但您還需要安裝geckodriver(對於Firefox)或chromedriver(對於chrome),然后就可以啟動並運行了!

正如其他人所建議的那樣,Selenium是完成此類任務的好工具。 但是,我會嘗試建議一種用於此目的的requests ,因為這就是您在問題中所要的。

這種方法的成功真正取決於網頁的構建方式以及如何提供數據文件(如果您所針對的是視圖數據中的“另存為CSV”)。

如果登錄機制是基於Cookie的,則可以在請求中使用會話Cookies 當您提交登錄表單時,響應頭中將返回一個cookie。 您可以在隨后的任何頁面請求中將cookie添加到請求標頭中,以使您的登錄名正確。

另外,您應該在開發人員工具網絡窗格中檢查網絡請求“另存為CSV”操作。 如果可以看到請求的結構,則可以在經過身份驗證的會話中發出直接請求,並使用語句標識符和日期作為有效負載來獲取結果。

暫無
暫無

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

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