2017-10-05 79 views
-1

我很新的蟒蛇,我試圖刮使用BeautifulSoup,這需要登錄的網頁。機械化不能登錄?

到目前爲止,我有

import mechanize 
import cookielib 
import requests 
from bs4 import BeautifulSoup 

# Browser 
br = mechanize.Browser() 

# Cookie Jar 
cj = cookielib.LWPCookieJar() 
br.set_cookiejar(cj) 

br.open('URL') 

#login form 
br.select_form(nr=2) 
br['email'] = 'EMAIL' 
br['pass'] = 'PASS' 
br.submit() 

soup = BeautifulSoup(br.response().read(), "lxml") 
with open("output1.html", "w") as file: 
    file.write(str(soup)) 

(用「網址」「EMAIL 「和」PASS「是網站,我的電子郵件和密碼。)

我在output1.html中獲得的頁面仍然是註銷頁面,而不是登錄後會看到的內容? 我該怎麼做才能使它登錄到詳細信息並在登錄後返回頁面上的內容?

乾杯的任何幫助!

+0

難道不是'br.form ['email']'而不是'''email']'? –

+0

這也行不通,我得到的結果仍然是沒有登錄的頁面。 –

回答

0

讓我建議另一種獲取所需頁面的方法。 這可能有點容易排除故障。

  1. 首先,您應該打開任何瀏覽器手動登錄開發人員工具頁面網絡。發送登錄憑證後,您將得到一條POST請求。打開請求,右側會顯示「表單數據」信息。

Chrome browser Developer tools screenshot

  • 使用此代碼發送登錄數據,並得到響應:
  • `

    from bs4 import BeautifulSoup 
    import requests 
    
    session = requests.Session() 
    
    url = "your url" 
    
    req = session.get(url) 
    soup = BeautifulSoup(req.text, "lxml") 
    
    # You can collect some useful data here (like csrf code or some token) 
    
    #fill in form data here 
    params = {'login': 'your login', 
          'password': 'your password'} 
    
    req = session.post(url) 
    

    我希望這個代碼將有幫助。

    +0

    不,我運行它時,所有的代碼只是第一頁。 –

    +0

    您是否發現POST請求中應包含哪些數據(csrf標記等)? –