总看到有人在纠结node.js, 其实嘛, 我认为能解决问题并好用, 就好了; 现在的公司后台使用的是node.js, 生产环境使用了几个月了没有出什么问题, 感觉还是不错的, 况且GraphQL + koa超级好用哦.
闲话不多说, 下面我将介绍一下koa搭配selenium-webdriver 和 Chrome浏览器爬取某个网站的数据; 代码我已经开源: https://github.com/etouyang/selenium-webdriver-node-demo
分析这个网站http://tool.manmanbuy.com/historyLowest.aspx?url=, 可以发现关键数据放在iframe里面, 所以必须得将网站加载完成才能去解析, 我使用了库selenium-webdriver, 在selenium.js文件下,首先引入库和浏览器:
const {Builder, By, Key, until, Capabilities} = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
const options = new chrome.Options();
初始化浏览器并加载网址:
let broswer = await new Builder().forBrowser('chrome').setChromeOptions(options).build();
await broswer.get(base + escape(url))
商品的历史优惠没有放在iframe里, 我们可以首先获取这个节点:
let couponElement = await broswer.findElement(By.className('trend_page'))
let hasUl = await couponElement.getText()
然后将节点跳转到iframe获取关键数据
broswer.switchTo().frame('iframeId')
现在我们处于这个iframe里面, 因为这个iframe是异步加载的, 所以我这里用了个sleep函数, 每格500ms获取一次iframe:
async function sleep(timeout) {
return new Promise((resolve, reject) => {
setTimeout(function() {
resolve();
}, timeout);
});
}
最后将获取到的数据放在Promise里供koa使用; 我将这个爬虫部署在ubuntu服务器下, 写了个查询的小程序, 欢迎大家对这个技术指正.
请问,如何使用代理
来自酷炫的 CNodeMD
graphql客户端是怎么玩的?拼串吗?闲暇了解了下.发现太nb了.但是如果没生成工具手写拼串总有点不自在,不知道楼主采用的是什么方案?
@RajanZhan 什么代理? 不太懂, 这个项目没有使用代理
@wszgrcy 使用的是官网的那一套, 没做改变, 看以后有没有人写出前端的插件了