【问题标题】:Scraping a site with alert window authentification使用警报窗口身份验证抓取站点
【发布时间】:2015-09-04 15:10:46
【问题描述】:

我正在尝试制作一个 python 应用程序,它会从我大学的 LMS 中抓取一些数据,以检查是否有新文件,如果有,则将它们下载到我的本地目录。

然而,对页面的访问是由我的登录名和密码保护的,但该站点没有 html 登录表单之类的东西,它只是一个警报窗口类型的弹出窗口,我在其中输入了我的登录名/密码(就像你的登录名一样通常在登录路由器时这样做),我不知道如何继续。

在尝试抓取之前,有人可以帮助我或向我指出一些有关如何在此类站点上验证连接的资源吗?无论是机械化还是其他。

谢谢。

【问题讨论】:

  • 该警报窗口发布到某些内容。你的网络标签告诉你什么?
  • 这是 HTTP 基本身份验证。
  • 我尝试查看“网络”选项卡,但我是这方面的初学者,所以我不确定我是否正确查看。我在列表中找不到任何与身份验证相关的内容。你能帮我看看要找什么吗?谢谢。

标签: python web-scraping


【解决方案1】:

对于任何感兴趣的人:

我找到了一种使用beautifulsouprequestsrequests_ntlm 库的方法。

【讨论】:

  • 这应该是正确的答案。我确实花了几天时间试图弄清楚这一点。这个包太棒了,完美解决了我的问题!!!!!!!
【解决方案2】:

我认为这是一个 HTTP 基本授权。 试试能不能用

登录

http(s)://(username):(password)@(url) 在浏览器的地址栏中。

如果是这样的话, 在settings.py中,使用这个来启用对应的中间件:

DOWNLOADER_MIDDLEWARE = [ 'scrapy.contrib.downloadermiddleware.httpauth.HttpAuthMiddleware']

并在你的蜘蛛中使用这样的中间件:

class TheSpider(scrapy.Spider):

http_user = 'username'
http_pass = 'password'

def crawl(self, response):
    pass

# do teh magicz!

它在文档中---有关详细信息,请参阅here

【讨论】:

  • 我在浏览器中试过了,它只是说不可用。如果我尝试使用 curl,我可以看到 Authorization 标头,但响应为 401。
  • HTTP/1.1 401 未经授权
  • 401 表示“未授权”。
  • 是的,我知道,但是用户名和密码没问题。 (抱歉响应格式,我不确定如何在 cmets 中格式化非内联代码)
  • 你可以试试curl (url) -v --ntlm --negotiate -u (username):(password) 吗?
【解决方案3】:

Near 发布的答案可能是最好的选择。我一直在到处寻找一段时间,但一直无法让正常的“http://user:pass@url”为我工作。使用 requests_ntlm 库是我能够在我的特定项目中使用的唯一方法,因此如果您遇到 HTTP 身份验证问题,我强烈建议您检查一下。

【讨论】:

    猜你喜欢
    • 2019-05-15
    • 2018-07-15
    • 2021-10-31
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多