2

只是关于一些抓取身份验证的问题。使用BeautifulSoup

#importing the requests lib  
import requests
from bs4 import BeautifulSoup

#specifying the page
page = requests.get("http://localhost:8080/login?from=%2F")
#parsing through the api
soup = BeautifulSoup(page.content, 'html.parser')
print(soup.prettify())

从这里的输出,我认为很重要:

 <table>
   <tr>
    <td>
     User:
    </td>
    <td>
     <input autocapitalize="off" autocorrect="off" id="j_username" name="j_username" type="text"/>
    </td>
   </tr>
   <tr>
    <td>
     Password:
    </td>
    <td>
     <input name="j_password" type="password"/>
    </td>
   </tr>
   <tr>
    <td align="right">
     <input id="remember_me" name="remember_me" type="checkbox"/>
    </td>
    <td>
     <label for="remember_me">
      Remember me on this computer
     </label>
    </td>
   </tr>
  </table>

这可以很好地抓取网站,但需要登录。在这里,我正在使用该mechanicalsoup库:

import mechanicalsoup

browser = mechanicalsoup.StatefulBrowser()
browser.open("http://localhost:8080/login?from=%2F")
browser.get_url()
browser.get_current_page()
browser.get_current_page().find_all('form')
browser["j_username"] = "admin"
browser ["j_password"] = "password"
browser.launch_browser()

但是它仍然不允许我登录。

有没有人使用过 python 3 的抓取工具,可以让他们抓取具有身份验证的网站?

4

2 回答 2

3

我看到你正在使用请求。登录站点的语法如下:

import requests
page = requests.get("http://localhost:8080/login?from=%2F", auth=
('username', 'password'))

希望这可以帮助!您可以在此处阅读有关身份验证的更多信息:http: //docs.python-requests.org/en/master/user/authentication/

于 2017-11-22T19:51:36.613 回答
1

使用 MechanicalSoup,您首先需要指定要填写并提交的表单。如果您只有一种表格,请使用:

browser.select_form()

然后,填写表格后,您需要提交:

browser.submit_selected()

您可以阅读(新编写的)MechanicalSoup 教程或查看使用 MechanicalSoup 登录 GitHub等示例。

于 2017-11-22T19:00:17.407 回答