2017-10-05 124 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标记等)? –