Puppeteer爬虫的实现
数据采集的时候,动态网页的内容是 Ajax 加载或者加密的。为了快速启动项目获取数据,减少研发投入,一般选择使用无头浏览器selenium + phantomjs的方案, Google 推出了Chrome浏览器的无头模式和 puppeteer ,相对以前使用更加方便,运行也稳定。同时为了解决网站对IP请求频率的限制,需要配合爬虫代理IP,这样可以快速稳定的采集数据。
使用Puppeteer的过程中要注意以下几点:
使用代理
Chrome 浏览器可以在启动的时候通过参数设置代理,或者通过 chrome.proxy API 在每次请求的时候设置代理服务器。
JS分析屏蔽
Chrome 浏览器很多的附加功能在核心渲染上是无效的,可以分析JS数据,屏蔽一些无效的JS降低请求并发数和带宽,同时能减轻服务器的资源占用。
反爬网站的处理
部分网站会进行Headless 模式的分析,拒绝相关的请求,或者返回错误数据。这时候可以分析目标网站的JS,将关键的JS预先注入,就能避开网站的控制。
下面提供使用爬虫代理IP的demo,大家可以参考使用:
const puppeteer = require('puppeteer');
// 代理服务器(产品官网 www.16yun.cn)
const proxyServer = 'http://t.16yun.cn:31111';
const username = 'username';
const password = 'password';
(async() => {
const browser = await puppeteer.launch({
args: [ '--proxy-server='+proxyServer+'','--no-sandbox', '--disable-setuid-sandbox' ]});
const page = await browser.newPage();
await page.authenticate({ username, password });
await page.goto('https://www.baidu.com');
const cookies = await page.cookies();
await console.log(cookies);
await page.setViewport({width: 320, height: 480});
await page.screenshot({path: '/screenshots/full.png', fullPage: true});
await browser.close();
})();
Puppeteer爬虫的实现
xiaotaomi
会员积分:6520
数据采集的时候,动态网页的内容是 Ajax 加载或者加密的。为了快速启动项目获取数据,减少研发投入,一般选择使用无头浏览器selenium + phantomjs的方案, Google 推出了Chrome浏览器的无头模式和 puppeteer ,相对以前使用更加方便,运行也稳定。同时为了解决网站对IP请求频率的限制,需要配合爬虫代理IP,这样可以快速稳定的采集数据。
使用Puppeteer的过程中要注意以下几点:
使用代理
Chrome 浏览器可以在启动的时候通过参数设置代理,或者通过 chrome.proxy API 在每次请求的时候设置代理服务器。
JS分析屏蔽
Chrome 浏览器很多的附加功能在核心渲染上是无效的,可以分析JS数据,屏蔽一些无效的JS降低请求并发数和带宽,同时能减轻服务器的资源占用。
反爬网站的处理
部分网站会进行Headless 模式的分析,拒绝相关的请求,或者返回错误数据。这时候可以分析目标网站的JS,将关键的JS预先注入,就能避开网站的控制。
下面提供使用爬虫代理IP的demo,大家可以参考使用:
const puppeteer = require('puppeteer');
// 代理服务器(产品官网 www.16yun.cn)
const proxyServer = 'http://t.16yun.cn:31111';
const username = 'username';
const password = 'password';
(async() => {
const browser = await puppeteer.launch({
args: [ '--proxy-server='+proxyServer+'','--no-sandbox', '--disable-setuid-sandbox' ]});
const page = await browser.newPage();
await page.authenticate({ username, password });
await page.goto('https://www.baidu.com');
const cookies = await page.cookies();
await console.log(cookies);
await page.setViewport({width: 320, height: 480});
await page.screenshot({path: '/screenshots/full.png', fullPage: true});
await browser.close();
})();
20-09-07 16:22
1101
0
回复
暂无评论