【问题标题】:Using BeautifulSoup where authentication is required在需要身份验证的地方使用 BeautifulSoup
【发布时间】:2017-10-28 07:13:06
【问题描述】:

我正在使用 BeautifulSoup4 和 Python 请求为公司项目抓取 LAN 数据。由于网站有登录界面,我无权访问数据。登录界面是一个弹出窗口,不允许我在不登录的情况下访问页面源或检查页面元素。我得到的错误是这个-

访问错误:未经授权 访问此文档需要用户 ID

This is a screen-shot of the pop-up box(涂黑部分为敏感信息)。它根本没有关于 html 标签的信息,因此我无法通过 python 自动登录。

我尝试过 requests_ntlm、selenium、python 请求,甚至 ParseHub,但都没有成功。我已经在这个阶段卡了一个月了!请,任何帮助将不胜感激。

下面是我的初始代码:

import requests
from requests_ntlm import HttpNtlmAuth
from bs4 import BeautifulSoup
r = requests.get("www.amazon.in")
from urllib.request import Request, urlopen
req = Request('http://www.cmegroup.com/trading/products/#sortField=oi&sortAsc=false&venues=3&page=1&cleared=1&group=1', headers={'User-Agent': 'Mozilla/5.0'})
webpage = urlopen(req).read()
print r.content
r = requests.get("www.amazon.in",auth=HttpNtlmAuth('user_name','passwd'))
print r.content*

s_data = BeautifulSoup(r.content,"lxml")*
print s_data.content

错误: 文档错误:未经授权

访问错误:未经授权

访问此文档需要用户 ID

这是我在手动登录站点后 BeautifulSoup 尝试访问数据时遇到的错误。

【问题讨论】:

  • (unable-to-log-in-to-amazon-using-python) [stackoverflow.com/questions/36488023/…
  • 澄清:我提供的网站网址只是一个示例。我不能透露真实的,因为它是一个私人网站。
  • 单独使用urllibrequests 在需要登录的情况下没有多大帮助。使用requests.Session。如果您不熟悉它,请参阅docs.python-requests.org/en/master/user/advanced。此外,在浏览器中打开开发人员选项卡并研究网络窗口,以查看浏览器发送了哪些请求以及哪些查询字符串和标头。在某些情况下,单独使用 User-Agent 是不够的。您必须提供更多信息,以便我们进一步提供帮助。或许,考虑发布网络标签的内容,并用假的替换它们来掩盖敏感信息。
  • 另外,BeautifulSoup 与您面临的问题无关。因此,请考虑编辑您的帖子以使其更清晰。

标签: python web-scraping beautifulsoup lan intranet


【解决方案1】:

如果您在 Python 3.x 上使用 BeautifulSoup 和 requests,只需使用这个:

from bs4 import BeautifulSoup
import requests

r = requests.get('URL', auth=('USER_NAME', 'PASSWORD'))
soup = BeautifulSoup(r.content)

【讨论】:

    【解决方案2】:

    你考虑过使用机械吗?

    import mechanize
    from bs4 import BeautifulSoup
    import urllib2 
    import cookielib
    
    cook = cookielib.CookieJar()
    req = mechanize.Browser()
    req.set_cookiejar(cook)
    
    
    req.open("http://www.cmegroup.com/trading/products/#sortField=oi&sortAsc=false&venues=3&page=1&cleared=1&group=1")
    
    req.select_form(nr=0)
    req.form['username'] = 'username'
    req.form['password'] = 'password.'
    req.submit()
    
    print req.response().read()
    

    编辑

    如果您遇到 robots.txt 问题并且您有权规避此问题,请查看此答案以了解执行此操作的技术 https://stackoverflow.com/questions/13303449/urllib2-httperror-http-error-403-forbidden

    【讨论】:

    • 我试过了。我得到的错误是这个-mechanize._response.httperror_seek_wrapper: HTTP Error 403: request disallowed by robots.txt
    • 嗯,好吧,如果您打算将您的工作货币化,那么您在抓取该网站时会遇到问题。他们的 robots.txt 是如何读取的?
    • 我不会通过这个网站获利。它仅供组织间使用。我无权访问 robots.txt。
    猜你喜欢
    • 1970-01-01
    • 2014-01-31
    • 2021-10-10
    • 2023-01-23
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多