使用Scrapy进行NTLM身份验证以进行网络抓取

我正在尝试从需要身份验证的网站上抓取数据。

我已经能够使用以下请求和HttpNtlmAuth成功登录:

s = requests.session()     

url = "https://website.com/things"

response = s.get(url, auth=HttpNtlmAuth('DOMAIN\\USERNAME','PASSWORD'))

我想探索Scrapy的功能,但是我无法成功进行身份验证。

我遇到了以下似乎可以使用的中间件,但我认为我没有正确实现它:

https://github.com/reimund/ntlm-middleware/blob/master/ntlmauth.py

在我的settings.py中

SPIDER_MIDDLEWARES = { 'test.ntlmauth.NtlmAuthMiddleware': 400, }

在我的spider课上

http_user = 'DOMAIN\\USER'

http_pass = 'PASS'

我一直无法使它正常工作。

如果任何人都能够通过NTLM身份验证成功从网站抓取,可以为我指明正确的方向,我将不胜感激。

回答:

我能够弄清楚发生了什么。

1:这被视为“ DOWNLOADER_MIDDLEWARE”,而不是“ SPIDER_MIDDLEWARE”。

DOWNLOADER_MIDDLEWARES = { 'test.ntlmauth.NTLM_Middleware': 400, }

2:我尝试使用的中间件需要进行重大修改。这对我有用:

from scrapy.http import Response

import requests

from requests_ntlm import HttpNtlmAuth

class NTLM_Middleware(object):

def process_request(self, request, spider):

url = request.url

pwd = getattr(spider, 'http_pass', '')

usr = getattr(spider, 'http_user', '')

s = requests.session()

response = s.get(url,auth=HttpNtlmAuth(usr,pwd))

return Response(url,response.status_code,{}, response.content)

在Spider中,你所需要做的就是设置以下变量:

http_user = 'DOMAIN\\USER'

http_pass = 'PASS'

以上是 使用Scrapy进行NTLM身份验证以进行网络抓取 的全部内容, 来源链接: utcz.com/qa/417709.html

回到顶部