简单NodeJS爬虫和使用cookie进行模拟登录

JavaScript028

简单NodeJS爬虫和使用cookie进行模拟登录,第1张

       NodeJS做爬虫也是很方便的。因为nodejs有HTTP模块直接可以使用,而且还有很多简单粗暴的库可以即拿即用。       首先,需要的库文件,       1、superagent 是个轻量的的 http 方面的库,就像jquery的post,和get一样,很简单。       2、cheerio 是一个服务端操作DOM的库,简直就是服务端的jquery。     好的,我们需要抓取某个网站的题目。如下图。这个系统下,及时是游客状态也是可以查看题目的,只是答案我们看不到。会显示我没有登录。现在我们有个需求,先抓取15页,根据URL的参数可以页数就是地址中 的P。并且要有本地cookie,获取cookie的方法,最简单的是,利用浏览器登录网站之后,在控制台直接打印document.cookie,得到之后,复制进txt文本。用fs模块读取并转换成字符串。在superagent请求时,把cookie传进去。好了,控制台已经不输出“未登录”,说明已经登录成功了。

我们需要使用爬虫程序对目标网站登录时的请求进行一次抓取,获取请求中的cookie数据;

在使用个人信息页的url进行请求时,该请求需要携带cookie,只有携带了cookie后,服务器才可识别这次请求的用户信息,方可响应回指定的用户信息页数据。

爬虫除了要注意Cookie的限制之外,还需要注意其他的反爬虫,比如IP限制,这就需要使用极光代理IP进行更换IP地址,以其他的IP地址继续访问,突破网络限制。当然,还有其它很多的限制,爬虫在进行采集之前需要好好分析网站的反爬虫策略。

纯粹前端的js 是不能 跨域 获取 cookie的

xxx.com 的js 代码 只能得到 xxx.com的cookie,拿不到 yyy.com

当然如果你有办法 在 yyy.com 写入受到自己控制的 html文件,你就可以写代码去拿到 对应的cookie,但看你的需求 应该你没有yyy.com 的权限

所以 要结合其他方案,推荐一下两种:

使用 electron ,electron 你可以认为是受js控制的浏览器引擎,所以你可以用它访问 yyy.com 拿到cookie,再接着做你的事情

或者 使用 puppeteer(Google 官方出品的 headless Chrome node 库)

Puppeteer 提供了一系列的 API,可以在无 UI 的情况下调用 Chrome 的各种功能,适用于爬虫、自动化处理等各种情景。