如何从公司的Intranet抓取数据?

时间:2019-08-15 20:06:24

标签: python web-scraping

背景: 对于我公司的任何内部网站,如果我不使用公司的网络,则需要使用VPN登录。要登录,我需要我的用户名和密码。 我要抓取的网页不仅需要我的用户名和密码,而且还需要其他登录权限。

问题陈述: 我已经具有查看此网页的权限(可以使用我的用户名和密码查看该网页),但是我在下面尝试的代码仍然返回错误:

POST_LOGIN_URL = 'https://login.com'
REQUEST_URL = 'https://webpageIneedtoscrape.com'
payload = {
    'username': 'user',
    'pass': 'password'
}
with requests.Session() as session:
    post = session.post(POST_LOGIN_URL, data=payload)
    r = session.get(REQUEST_URL)
    print(r.text)

这给了我

SSLError: HTTPSConnectionPool(host='https://webpageIneedtoscrape.com', port=443): Max retries exceeded with url:  (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])")))

然后,我尝试仅使用以下代码刮取Intranet网站的主页:

import requests
from requests_ntlm import HttpNtlmAuth

r = requests.get("https://login.com\\username",auth=HttpNtlmAuth('username','password'))

它返回此错误:

ProxyError: HTTPSConnectionPool(host='login.com%5cusername', port=443): Max retries exceeded with url: / (Caused by ProxyError('Cannot connect to proxy.', RemoteDisconnected('Remote end closed connection without response')))

我很困惑现在是否可以抓取Intranet。我在网上搜索,看到一些有关证书的答案,但我不知道它是什么。 我是Web废料的新手,我想知道这个问题是否可以自己解决,还是需要其他文件(例如证书)?

我也很感谢任何可以帮助我诊断问题的建议。

1 个答案:

答案 0 :(得分:0)

尝试将其添加到您的请求中:

r = session.get(REQUEST_URL, verify = False)

如错误所示,您无法通过证书验证。或者,您可以尝试:

r = session.get('https://google.com', verify='/path/to/certfile')

ref-https://2.python-requests.org/en/master/user/advanced/#ssl-cert-verification