跳转到主要内容

一个与autologin一起使用的Scrapy中间件

项目描述

PyPI Version Build Status Code Coverage

这是一个Scrapy中间件,使用autologin http-api来维护scrapy爬虫的登录状态。

自动登录中间件使用autologin在登录状态下发送所有请求。它使用autologin获取cookies,检测登出并尝试在未来避免它们。假设爬虫有一个单独的授权域。自动登录中间件还将autologin_active放入request.meta中,只有在我们登录时(如果域被跳过或登录失败则为False)才为True。如果通过splash(并且设置了SPLASH_URL)发送请求,自动登录中间件将其传递给autologin,并且此splash实例也用于获取登录cookies。

安装

它适用于python 2.7和python 3,并至少需要scrapy 1.1。使用pip安装

pip install autologin-middleware

配置

  1. 将自动登录中间件包含到项目设置中并指定autologin url

    AUTOLOGIN_URL = 'http://127.0.0.1:8089'
    AUTOLOGIN_ENABLED = True
    DOWNLOADER_MIDDLEWARES['autologin_middleware.AutologinMiddleware'] = 605
  2. 还需要支持cookies。目前有几个选项

  • scrapy cookie 中间件(COOKIES_ENABLED = True),但自动登录中间件需要访问 cookies,因此您需要启用自定义 cookie 中间件

    DOWNLOADER_MIDDLEWARES = {
        'autologin_middleware.AutologinMiddleware': 605,
        'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': None,
        'autologin_middleware.ExposeCookiesMiddleware': 700,
    }
  • scrapy-splash cookie 中间件(scrapy_splash.SplashCookiesMiddleware

  • 任何其他从 request.cookies 获取 cookies 并设置 response.cookiejar,如 scrapy-splash 中间件,或将其暴露在 response.flags 中,如 ExposeCookiesMiddleware

  1. 可选但强烈推荐:避免注销 - 请参阅下面的可选设置和“避免注销”部分。这之所以重要,是因为注销检测不够稳健,在某些网站上,旧的 cookies 仍然有效,因此您将使用多个会话等。如果您从不注销,就可以避免所有这些问题。

有一些可选设置

  • AUTOLOGIN_COOKIES:手动登录后传递认证 cookies(格式为 name=value; name2=value2)。

  • AUTOLOGIN_LOGOUT_URL:传递要避免的 URL 子串。

  • AUTOLOGIN_CHECK_LOGOUT:设置为 False 以禁用自动注销检测:它记住在登录期间获得的 cookies,并在每个响应上检查它们是否已消失。对于在登录时设置大量 cookies 的网站,这可能是一个选项来禁用它。如果您禁用它,您必须依靠使用 link_looks_like_logout(见下文)避免注销链接,或设置自定义 AUTOLOGIN_LOGOUT_URL

  • AUTOLOGIN_USERNAMEAUTOLOGIN_PASSWORDAUTOLOGIN_LOGIN_URLAUTOLOGIN_EXTRA_JS 将传递给自动登录并覆盖存储凭据的值。《span class="docutils literal">AUTOLOGIN_LOGIN_URL 是一个相对 URL,如果它与起始 URL 相同,则可以省略。《span class="docutils literal">AUTOLOGIN_EXTRA_JS 仅在您想使用自动登录的 extra_js 功能时才需要。

也可以通过 request.meta 中相应的下划线键来按请求覆盖一些设置: autologin_usernameautologin_passwordautologin_extra_jsautologin_login_urlautologin_logout_url

自动登录中间件将以下设置传递给自动登录: SPLASH_URLUSER_AGENTHTTP_PROXYHTTPS_PROXY,因此它们用于自动登录请求。

避免注销

还有一个名为 autologin_middleware.link_looks_like_logout 的实用工具,用于检查链接是否看起来像注销链接:您可以在蜘蛛中使用它来避免注销链接。注销默认由自动登录中间件处理(除非 AUTOLOGIN_CHECK_LOGOUTFalse),但避免注销链接有两个好处

  • 不浪费时间去重试已经注销的请求

  • 在某些情况下,注销 URL 可能是唯一的,蜘蛛将不断注销(例如,/logout?sid=UNIQUE_ID)。

API

没有特殊的 API:自动登录中间件只是确保在登录状态下执行所有请求。如上所述的“配置”部分中提到,您可以在 reqeuest.meta 中按请求覆盖一些设置。

如果我们在处理此请求时向自动登录发送了请求,则自动登录响应将可用在 response.meta['autologin_response'] 中。您可能想使用自动登录响应的 "status" 字段来进行一些记录。

中间件也始终将"autologin_active"放入response.meta中,只有在登录成功的情况下True才为真(如果跳过域名或登录失败则为False)。

此外,您可以在request.meta中将skip_autologin键设置为True,以完全禁用此请求的中间件。

与Splash的使用

自动登录中间件通过scrapy-splash支持splash,但正确设置一切可能比较棘手。

首先,您需要指定以下设置(有关更多详细信息,请参阅scrapy-splash文档)

SPLASH_URL = 'http://127.0.0.1:8050'
SPIDER_MIDDLEWARES = {
    'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
DOWNLOADER_MIDDLEWARES = {
    'autologin_middleware.AutologinMiddleware': 605,
    'scrapy_splash.SplashCookiesMiddleware': 723,
    'scrapy_splash.SplashMiddleware': 725,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}

其次,您需要向splash发送请求并传递cookies,使用splash:init_cookies(splash.args.cookies),并使用splash:get_cookies()将它们返回到cookies字段。如果您已经使用了一个splash脚本(execute端点),请相应地修改您的脚本。但如果您只想使用splash进行爬取,可以使用autologin_middleware.splash.splash_request而不是scrapy.Request。它有一个最小的lua脚本,传递cookies并返回html,因此您不需要在您的蜘蛛中做任何其他更改。

开发

您需要启动autologin-http-api(来自autologin),以及splash(最简单的选项是运行docker run -p 8050:8050 scrapinghub/splash)。

使用tox运行测试

tox

当使用Docker在OS X和Windows上运行Splash时,它将在非默认地址上启动,因此在运行测试时需要指定它,例如

SPLASH_URL=http://192.168.99.100:8050 tox

许可

许可证是MIT。

项目详情


下载文件

为您的平台下载文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

autologin-middleware-0.1.6.tar.gz (8.4 kB 查看散列)

上传时间

由以下机构支持