一个用于查找登录链接、表单以及使用有效凭据自动登录网站的实用工具。
项目描述
Autologin是一个库,使网络爬虫更容易爬取需要登录的网站。提供凭据和URL或页面HTML源(通常是主页),它将尝试为您登录。返回Cookies供您的爬虫使用。
Autologin的目标是使网络爬虫更容易爬取需要身份验证的网站,而无需为每个网站重写登录代码。
Autologin可以作为库、命令行工具或服务使用。您可以使用Autologin而无需生成HTTP请求,因此可以直接将其放入您的爬虫中,无需担心影响速率限制。
如果您使用Scrapy进行爬取,请查看autologin-middleware,这是一个Scrapy中间件,它使用Autologin HTTP-api来维护Scrapy爬虫的登录状态。
Autologin适用于Python 2.7和3.3+。
功能
自动查找登录表单和字段
获取已认证的cookies
获取从您的蜘蛛提交的表单请求
提取登录页面的链接
作为库使用,无需或无需发送http请求
命令行客户端
网络服务
管理登录凭证的UI
验证码支持
快速入门
不喜欢阅读文档吗?
from autologin import AutoLogin url = 'https://reddit.com' username = 'foo' password = 'bar' al = AutoLogin() cookies = al.auth_cookies_from_url(url, username, password)
您现在有一个cookiejar,您可以在您的蜘蛛中使用它。不想使用cookiejar?
cookies.__dict__
您现在有一个字典。
安装
从PyPI安装最新版本
$ pip install -U autologin
或从GitHub获取最新更改的版本
$ pip install git+https://github.com/TeamHG-Memex/autologin.git
自动登录依赖于Formasaurus进行字段和表单分类,它有很多依赖项。这些包可能需要额外步骤安装,因此上述命令可能会失败。在这种情况下,手动逐个安装依赖项(遵循它们的安装说明)。
建议使用最新的
pip(使用pip install pip -U更新))。在Ubuntu上,需要以下包
$ apt-get install build-essential libssl-dev libffi-dev \ libxml2-dev libxslt1-dev \ python-dev # or python3-dev for python 3
登录请求
此方法提取登录表单(如果有的话),填写字段并返回一个字典,包含表单URL和arg,供您的蜘蛛提交。不发送http请求
>>> al.login_request(html_source, username, password, base_url=None) {'body': 'login=admin&password=secret', 'headers': {b'Content-Type': b'application/x-www-form-urlencoded'}, 'method': 'POST', 'url': '/login'}
相对表单操作将相对于
base_url。
命令行
$ autologin usage: autologin [-h] [--splash-url SPLASH_URL] [--http-proxy HTTP_PROXY] [--https-proxy HTTPS_PROXY] [--extra-js EXTRA_JS] [--show-in-browser] username password url
HTTP API
您可以使用以下方式启动自动登录HTTP API
$ autologin-http-api
并使用
/login-cookies端点。使用JSON体发送POST请求。支持以下参数
url(必需):我们想要登录的网站的URL
username(可选):如果没有提供,它将从中获取登录密钥链
password(可选):如果没有提供,它将从中获取登录密钥链
extra_js(可选,实验性)是一个字符串,包含一个额外的JS脚本,应在登录页面发起POST请求之前执行。例如,它可以用于接受cookie使用。只有当在settings中也提供了SPLASH_URL时,才支持此功能。
settings(可选) - 一个字典,用于覆盖Scrapy设置,有用的值在上文已描述。
如果未提供username和password,autologin将尝试在登录密钥链中找到它们。如果没有找到匹配的凭据(它们通过域匹配,而不是通过精确的URL匹配),则最终需要人工在密钥链UI中提供它们,或将域标记为“跳过”。
响应是包含以下字段的JSON
status,它可以取以下值
error状态表示发生了错误,error字段包含更多信息
skipped表示在密钥链UI中将域标记为“跳过”
pending表示密钥链UI中有一个项目(或它刚刚创建),尚未输入凭据
solved表示登录成功并获取了cookies
error - 错误的易读解释。
response - autologin收到的最后一个响应(在某些情况下可能是None)。这是一个包含cookies、headers的字典,以及一个text或body_b64字段(取决于响应的内容类型)。
cookies - 以Cookie.__dict__格式表示的字典列表。仅在状态为solved时存在。
start_url - 成功登录后到达的URL。
代理支持
可以通过settings参数中的HTTP_PROXY和HTTPS_PROOXY键指定代理。用户名和密码可以作为代理URL的一部分指定(格式为protocol://username:password@url)。
如果您使用的是与Splash的代理,则假定您希望Splash通过给定的代理发起请求,而不是通过代理向Splash发起请求。HTTP_PROXY始终用于Splash。
验证码支持
存在实验性的验证码支持:如果登录表单包含验证码,我们将尝试使用外部服务(DeathByCaptcha)解决它,并将其作为登录请求的一部分提交。这不会以任何方式影响API,您只需要提供包含您的DeathByCaptcha账户详情的环境变量:DEATHBYCAPTCHA_USERNAME和DEATHBYCAPTCHA_PASSWORD。这适用于所有API:autologin-http-api、autologin和Python API。
您还需要安装decaptcha库
pip install git+https://github.com/TeamHG-Memex/decaptcha.git
支持仍然是实验性的,不支持新的Google ReCaptcha/NoCaptcha。此外,它目前仅与splash(当在settings中传递SPLASH_URL时)一起使用。
密钥链UI
使用以下命令启动密钥链UI
$ autologin-server
请注意,autologin-server和autologin-http-api都没有任何认证保护。
密钥链UI将凭证存储在sqlite数据库中。默认情况下,它位于库本身附近,这并不总是好的,尤其是如果您想要在更新之间持久化数据或没有对该文件夹的写权限。您可以通过创建一个 /etc/autologin.cfg 或 ~/.autologin.cfg 文件来配置数据库位置和flask应用使用的 secret_key(应在运行自动登录服务的同一用户下)。以下是一个示例配置,它更改默认的secret_key并指定不同的数据库路径(这两项都是可选的)。
[autologin] secret_key = 8a0b923820dcc509a6f75849b db = /var/autologin/db.sqlite
贡献者
源代码和错误跟踪器在github上: https://github.com/TeamHG-Memex/autologin。
使用 tox 运行测试
$ tox
此处未直接测试Splash支持,但在autologin-middleware 测试套件中有针对它的间接测试。
许可
许可证是MIT。
项目详情
autologin-0.1.4.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1a52cee5f075e15ee7a681e6441814b0438d8f63d2d80226a0f1daf5f784dc28 |
|
MD5 | 7ac286be0f3859d29a2fa7b0aff042df |
|
BLAKE2b-256 | 87ca52896c16ac0988456837348b7605a7a4db5695735765931601846a9f4c17 |