用户代理 - 使用谷歌Analytics(分析)和CircleCI生成随机用户代理

通过埃文Sangaline|2018年8月30日

如果你赶时间,你可以直奔到用户代理仓库中安装和使用说明!

虽然网络刮,它通常是一个好主意,以创建与那些人类用户会产生一致的交通模式。这当然装置是尊重和限速要求,但它往往也意味着隐瞒该请求已经实现自动化的事实。这样做有助于避免被阻止过分热心的DDOS保护服务,并允许您成功地刮的数据,你有兴趣,同时保持网站运营高兴。

制作逼真的浏览模式可以变得相当复杂 - 我们以前在类似的文章解释了一些复杂的技术制作的Chrome无头无法检测它是可以检测并阻止Chrome无头。该万博输10万怎么办Intoli智能代理服务甚至远远超出了方法,这些条款,以创建浏览模式,从人类用户完全没有区别描述。从像提炼和Incapsula僵尸缓解服务保护的站点刮数据时,这些先进的隐蔽性策略是必要的,但他们拼抢网站上有关阻塞较少攻击性的时候会不总是需要。对于这些比较基本的网站,使用现实用户代理有时你所需要的。

唯一的问题是,有没有很多伟大的资源,在那里产生真实的用户代理。你需要从高流量的网站目前的分析数据,以产生随机用户代理,以及这类数据是很少对外公布。有支付解决方案的极少数在那里,但免费的清单只提供有限的数据片,通常变得非常快过时了(你可以看看维基百科网页浏览器的使用分布文章看到自己这一点)。与随机用户代理代开源库的情况更糟;他们通常发布一次或两次,然后永远不会更新。

用户代理统计数据仅针对网络拼抢时,他们最新的,你觉得当你谷歌之类的东西“最常见的用户代理”一般都非常有限,大规模应用非常有用,少数截断的列表。该Int万博输10万怎么办oli网站获得流量和我们的开大风扇的漂亮健康的量的信息,所以这似乎很喜欢我们的一个自然的机会介入,并为社会提供了网页抓取有用的资源。长话短说:我们使用我们的网站的分析数据,生成逼真的使用统计数据,并建立了一个新的开源JavaScript库称为用户代理用于产生随机的用户代理。这是远从第一开放源码库来解决这个问题,但我们坚信,它填补了现有工具的空白。

有几个关键用户代理的特点是集除了库从现有的解决方案:万博manbetx水晶宫

  • 用户代理的数据始终是最新的。我们每天从Intoli网站的新数据更新包。万博输10万怎么办

  • 不仅该数据包括用户代理串,而且相应window.navigator样特性navigator.vendornavigator.platform。这个数据是很难得的,并且是由僵尸减灾服务块浏览器广泛使用。

  • 该数据还包括视屏幕尺寸,使得它们也可以被准确地仿真。

  • 随机用户代理产生可容易地过滤,以限制由设备类型,屏幕尺寸,浏览器版本,或任何其他可用的数据的用户代理。

  • 该数据可作为原始压缩JSON文件,以便它可以在其他编程语言很容易使用。

包本身是可在NPM,它可以通过运行以下安装。

#或者纱:`纱添加用户agents` NPM安装用户代理

然后基本用法很简单,只要

进口的UserAgent从“用户代理”;常量的userAgent =新用户代理();//例输出://用户代理 “的Mozilla / 5.0(Windows NT的6.0; Win64的; 64)为AppleWebKit / 537.36(KHTML,例如Gecko)铬/ 57.0.2987.133 Safari浏览器/ 537.36” 的console.log(`用户代理:“$ {}的userAgent“`);

这将输出一个随机的用户代理基于他们在真实的用户数据中观察到如何普遍。更先进的使用可以包括基于诸如设备类别属性过滤用户代理

//限制生成的用户代理,以对应于移动设备。常量的userAgent =新的UserAgent({deviceCategory: '移动'});

或访问详述对所生成的用户代理对象的属性。例如,你可以访问这样生成的视口大小:

常量的userAgent = userAgents.random();//例输出:800×600的console.log(`$ {userAgent.viewportWidth}×$ {userAgent.viewportHeight}`);

在使用和API的更多细节可用用户代理库放在GitHub上。这是一个良好的开端,如果你有兴趣在你的网页抓取项目中使用用户代理。还要确保当你在那边的明星资料库;它让我们知道,人们使用的项目,并鼓励我们朝它投入更多的开发者资源!

在本文的其余部分,我们将解释我们如何保持用户代理的数据是最新的。其基本思想是,我们在运行计划的构建CircleCI每天晚上从获取谷歌Analytics(分析)数据,并将其消化成匿名形式然后您就提交到库和NPM发布。你不需要为了使用用户代理包来了解这些细节,但我们认为这是有趣的足够份额的情况下,人们都好奇它是如何工作的。我们也希望是完全透明的这个数据是如何收集,正是它的使用。

这个怎么运作

收集数据

许多网站一样,我们使用谷歌分析监控网站的访问流量。谷歌Analytics(分析)跟踪各种默认尺寸,但浏览器的用户代理是不是其中之一。它打破了这一信息分离为独立的量,如浏览器的名称,浏览器的版本,等等为了直接跟踪用户代理,我们需要添加自定义维度我们的分析。

添加自定义维度

你可以在这里看到我们设定的尺寸是会话范围这样用户代理数据将通过该网站的访问者,而不是浏览量进行加权。要开始真正收集这些数据,我们只是需要使用谷歌Analytics(分析)set命令指定用户代理是等于的值navigator.userAgent的属性。

GA( '集', 'DIMENSION1',navigator.userAgent的);

我们还增加了额外的自定义尺寸相关量像navigator.appName但我们,我们将跳过这些在简洁的代码示例。请注意,我们只使用这些量来产生匿名数据包含在用户代理包。如果你想阻止分析服务从收集这类信息,那么我们强烈建议安装uBlock产地在浏览器中块跟踪。它还可以拦截广告和恶意软件,所以这是一个有用的扩展各地。

原始数据配置API访问

之后,我们开始追踪的数据,我们需要能够通过一个API来访问它,这样我们就可以自动更新用户代理包的过程。谷歌拥有的概念服务帐户它可以用来允许正是这种类型的访问的。要配置此,我们首先创建了一个名为“用户代理NPM包”对谷歌的新项目服务帐户页面

创建谷歌项目

然后启用谷歌Analytics(分析)报告API该项目。

启用报告API V3

请注意,我们启用了API,而不是较新的版本4的3版本,这样我们就可以使用得心应手GA-API打包用于认证和访问API。稍后我们会回来的,我们完成设置服务帐户和访问凭据后。

接下来,我们增加了一组凭据的项目,并在此过程中创建一个服务帐户。

添加凭据到项目

这产生该项目的JSON证书文件,我们下载并保存为谷歌 - 分析 - credentials.json

服务帐户创建

JSON的凭据是什么,我们使用与分析API认证,并且其内容是这个样子。

{ “类型”: “service_account”, “PROJECT_ID”: “用户代理-NPM-包”, “private_key_id”: “99f45b8c31520345ab960f17add21da91fc7d2b5”, “PRIVATE_KEY”:“----- BEGIN PRIVATE KEY ----- [删除] ----- END PRIVATE KEY -----”, “client_email”: “user-agents-npm-package-update@user-agents-npm-package.iam.gserviceaccount.com”, “CLIENT_ID”: “118408973529835432350”, “auth_uri”: “https://accounts.google.com/o/oauth2/auth”, “token_uri”: “https://oauth2.googleapis.com/token”, “auth_provider_x509_cert_url”:“https://www.googleapis.com/oauth2/v1/certs “ ”client_x509_cert_url“:” https://www.googleapis.com/robot/v1/metadata/x509/user-agents-npm-package-update%40user-agents-npm-package.iam.gserviceaccount.com”}

client_email现场就在这里特别感兴趣的;它已经被分配给服务帐户唯一的电子邮件地址。作为最后一步,我们需要创建的是有只读访问我们的分析属性与此电子邮件地址的谷歌分析用户。

加入谷歌Analytics(分析)权限的邮箱地址

有了这最后一块,我们准备开始访问的API,看着真实的数据。

更新项目数据

GA-APIJavaScript的包是围绕简化认证和发出请求的过程中,谷歌Analytics(分析)API光包装。它可以通过安装NPM要么通过运行以下。

#或者纱:`yarn添加GA-API @ 0.0.4` NPM安装ga-api@0.0.4

请注意,我在这里包含一个确切的版本,因为我有点厌倦传递凭据到第三方库,但我已经亲自审阅了代号为v0.0.4释放并知道它是安全的。

使用该库是相当简单,在项目的详细记录自述。作为一个简单的例子,下面的代码查询数据表示对于每个观测到的用户代理的会话的计数的分析特性,并输出行。

常量gaApi =要求( 'GA-API');常量accountOptions = {的clientId: 'user-agents-npm-package-update.apps.googleusercontent.com',电子邮件:'user-agents-npm-package-update@user-agents-npm-package.iam.gserviceaccount.com”,键: '谷歌分析-credentials.json',IDS: 'GA:115995502',};常量queryOptions = {开始日期: '2018年8月26日',结束日期: '2018年8月26日',尺寸: 'GA:deviceCategory,GA:dimension9',指标: 'GA:会话',};gaApi({... accountOptions,... queryOptions},(错误,数据)=> {如果(误差){console.error(误差);}其他{的console.log(data.rows);}});

它输出类似于以下运行时的东西。

[[ “的Mozilla / 5.0(Windows NT的10.0; Win64的; 64)为AppleWebKit / 537.36(KHTML,例如Gecko)铬/ 68.0.3440.106 Safari浏览器/ 537.36”, “8356”],[“的Mozilla / 5.0(Windows NT的10.0; Win64的; 64)为AppleWebKit / 537.36(KHTML,例如Gecko)铬/ 67.0.3396.99 Safari浏览器/ 537.36" , “7311”],[“的Mozilla / 5.0(Windows NT的10.0; Win64的; 64; RV:61.0)壁虎/ 20100101火狐/61.0" , “6908”],[ “的Mozilla / 5.0(Macintosh上;英特尔的Mac OS X 10_13_6)为AppleWebKit / 605.1.15(KHTML,例如Gecko)版本/ 11.1.2 Safari浏览器/ 605.1.15”, “5921”],[“// 等等...”] ]

鉴于这种原始数据,我们只是需要将其保存到一个可被使用的JSON文件用户代理打包以生成随机的用户代理。这样做的具体细节比这里给出的例子有点复杂,但你可以检查出真正的代码更新data.js而在真实数据用户agents.json.gz如果您想看到完整的实现。

发布新的版本会自动

与现有的用户代理代库的主要问题是,他们都远远落伍。该随机用户代理随机用户代理JavaScript的包均被两年前更新。就连据称始终跟上时代的假的UserAgentPython包的最后更新六个月前。市场上有很多其他类似项目的,在那里,都显然是被遗弃的。这是可以理解的,一个项目的作者将失去在手动更新包这样的定期利息,而这正是为什么我们认为一个自动释放过程是为用户代理包装很重要。

我们使用CircleCI作为我们的持续集成提供商,它们方便地提供一个内置的机制来执行计划建立。您可以检查出用户代理项目的全config.yml所有的细节配置文件,但我们也将在这里走过的总体思路。首先,有一个CircleCI作业处理更新数据。

更新:<<:*默认设置步骤: -  attach_workspace:在:〜/用户代理 -  restore_cache:关键:依赖缓存 -  {{校验 “yarn.lock”}}  - 运行:名称:更新用户代理数据命令:|回声 “$ GOOGLE_ANALYTICS_CREDENTIALS” |BASE64 --decode> ./google-analytics-credentials.json纱更新数据 -  persist_to_workspace:根:〜/用户代理路径:<<:*白名单

更新数据正在这里基本上运行脚本对应的脚本更复杂的版本,我们在最后一节的发展。

在我们实际运行更新数据脚本,我们首先填充谷歌 - 分析 - credentials.json这是从谷歌Analytics(分析)API访问原始数据所需的文件。

回声 “$ GOOGLE_ANALYTICS_CREDENTIALS” |BASE64 --decode> ./google-analytics-credentials.json

为了使这项工作,我们首先通过的base64编码运行的凭据

BASE64 --wrap 0谷歌-分析-credentials.json

然后添加内容到CircleCI构建环境作为所谓的环境变量GOOGLE_ANALYTICS_CREDENTIALS

添加一个环境变量来CircleCI

这个环境变量的内容显然是敏感的,所以我们也禁止提供秘密分叉建立在CircleCI项目设置。不这样做是一种常见的配置错误,可导致证书被盗取。

禁止通过秘密建立分叉

接下来,有一个发布新版本作业更新后的数据提交到存储库,并推动了更改GitHub上。

发布新版本:<<:*默认设置步骤: -  attach_workspace:在:〜/用户代理 - 运行:名称:提交新下载的数据命令:|混帐添加的src / *#配置一些身份信息的机部署帐户。混帐配置--global user.email“user-agents@intoli.c万博输10万怎么办om”混帐配置--global user.name“用户代理”混帐配置--global push.default“简单”#禁用严格主机检查。MKDIR -p的〜/ .ssh /回声-e “主机github.com \ n \ tStrictHostKeyChecking没有\ n” >>的〜/ .ssh /配置#状态代码为1,如果没有变化,#但我们要发布反正留在定期。git的承诺-m“定期调度的用户代理的数据更新。”||真 - 运行:名称:凹凸的补丁版本,引发新发布命令:NPM版本补丁&&混帐推&&混帐推--tags

为了提供对存储库的写访问,我们创建了一个GitHub上机用户用户代理用合适的合作者访问。

GitHub的合作者

我们生成的本机用户帐户的SSH密钥,并在UI CircleCI指定的构建应该使用这个写访问键而不是默认的检验键。

CircleCI结帐键

有了这个到位,发布新版本工作才得以提交更新后的数据,为项目创建一个新的补丁版本,并推升变为GitHub上。推动这些变化,但是,不会自动发布在NPM的新版本。

允许自动发布新版本的包,我们添加了名为附加CircleCI工作部署

部署:<<:*默认设置步骤: -  attach_workspace:在:〜/用户代理 - 运行:名称:写NPM令牌到〜/ .npmrc命令:echo “//registry.npmjs.org/:_authToken=$NPM_TOKEN”>>〜/ .npmrc  - 运行:名称:安装点JSON包命令:NPM安装点JSON  - 运行:名称:写版本的package.json命令:$(纱斌)/ DOT-JSON的package.json版本${CIRCLE_TAG:1}  - 运行:名称:发布到NPM命令:NPM发布--access =公共

这里的逻辑非常简单:

  1. 我们填充〜.npmrc与NPM授权令牌文件的存储在NPM_TOKEN以类似的方式我们如何存储在谷歌Analytics(分析)API证书环境变量GOOGLE_ANALYTICS_CREDENTIALS

  2. 我们使用点JSON打包更新包版本的package.json相匹配的版本标签。该NPM版本补丁从命令发布新版本作业将创建像标签v0.0.2和该代码预期存在于这些之中CIRCLE_TAG环境变量(其被自动添加到由CircleCI环境。

  3. 我们使用新的程序包发布到NPMNPM发布

拼图的最后一块是建立在这些不同作业的运行条件。我们定义两个这样做CircleCI工作流程在里面config.yml文件。

工作流程:版本:2如期释放:触发器: - 时间表:cron的: “00 06 * * *” 过滤器:分支:只有: - 主作业: - 结帐 - 更新:要求: - 结帐 - 编译:要求: - 更新 -测试:要求: - 构建 - 发布新版本:要求: - 测试版本:工作: - 结帐:过滤器:标签:只:/v[0-9]+(\.[0-9]+)*/分支:忽略:/.*/  - 编译:过滤器:标签:只有:/v[0-9]+(\.[0-9]+)*/分支:忽略:/.*/要求: - 结帐 -测试:过滤器:标签:只有:/v[0-9]+(\.[0-9]+)*/分支:忽略:/.*/要求: - 构建 - 部署:过滤器:标签:只:/v [0-9] +(。\ [0-9] +)* /分支:忽略:/.*/要求: - 测试

定释放工作流被配置成在上午6点上每天一个cron计划运行。它运行的工作顺序:查看更新建立, 然后测试。我们只覆盖更新工作上面,其他的都相当不言自明:查看从存储库检查出代码,建立生成项目,并测试运行项目的测试。

最后,我们定义了一个释放工作流运行查看建立测试部署职位。这里的关键是,在这个工作流程中的工作,只有当有一个新的git的标签相匹配的运行/v[0-9]+(\.[0-9]+)*/正则表达式。当我们运行这个条件将满足两NPM版本在当地,而当它在运行定释放工作流程更新工作。这使我们可以手动发布的东西,同时使每天的基础上自动发布到运行。

结论

好了,我们希望你喜欢学习了解我们如何确保用户代理包始终处于最新状态。自动化是关键,无论是用户代理的GitHub库用户代理NPM包每天早上像时​​钟一样被更新。这意味着,当我们说“总是最新的,”我们的意思吧!

如果你的网页抓取任务使用随机用户代理时仍然被阻塞,那么一定要看看万博输10万怎么办Intoli智能代理服务。它集成了所有的Web刮最佳实践,我们已经多年的经验,并与几乎所有的网页抓取软件,你可能会使用工作。

建议的文章

如果你喜欢这篇文章,那么你也可以享受这些相关的。

执行与AOPIC算法高效广泛爬网

通过安德烈Perunicic
于2018年9月16日

了解如何估算页面的重要性和广阔的爬网过程中分配带宽。

阅读更多

如何F5Bot吸食所有的书签交易

通过刘易斯范温克勒
在二○一八年七月三十○日

F5Bot的创建者详细解释它是如何工作的,以及它是如何能够凑reddit的百万每日评论。

阅读更多

没有API是最好的API - 电源断言的优雅的力量

通过埃文Sangaline
于2018年7月24日

一看是什么使功率断言我们最喜欢的JavaScript库的断言,并与项目的作者的采访。

阅读更多

评论