使用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 Responseimport 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