教程是看黑马的进阶课程,只是一个学习的小demo,目的是最近在找工作就顺便爬一些数据看看,分页功能没做,分页其实就是获取总页数,然后获取点击下一页的元素,循环调用爬取函数即可。
const { Builder, By, Key } = require('selenium-webdriver');
require('chromedriver');
var xlsx = require('node-xlsx');
var fs = require('fs');
(async function start() {
//excel数据
var excelData = [];
let driver = await new Builder().forBrowser('chrome').build();
try{
await driver.get('https://www.lagou.com/');
await driver.findElement(By.css('#changeCityBox .checkTips .tab.focus')).click();
await driver.findElement(By.id('search_input')).sendKeys('前端', Key.ENTER);
let items = await driver.findElements(By.className('con_list_item'))
console.log('请等待......')
for(let i=0;i<items.length;i++){
// 获取岗位名称
let title = await items[i].findElement(By.css('.p_top h3')).getText()
// 获取工作地点
let position = await items[i].findElement(By.css('.p_top em')).getText()
// 获取发布时间
let time = await items[i].findElement(By.css('.p_top .format-time')).getText()
// 获取公司名称
let companyName = await items[i].findElement(By.css('.company .company_name')).getText()
// 获取公司所在行业
let industry = await items[i].findElement(By.css('.company .industry')).getText()
// 获取薪资待遇
let money = await items[i].findElement(By.css('.p_bot .money')).getText()
// 获取需求背景
let background = await items[i].findElement(By.css('.p_bot .li_b_l')).getText()
// 处理需求背景
background = background.replace(money, '')
excelData.push([title, position, time, companyName, industry, money, background])
}
console.log('爬取完成')
var data = [
{
name : 'sheet1',
data : [
[
'职位',
'工作地',
'发布时间',
'公司名称',
'简介',
'薪资',
'要求'
]
]
}
]
for(let i=0;i<excelData.length;i++){
data[0].data.push(excelData[i])
}
// 写xlsx
var buffer = xlsx.build(data);
fs.writeFile('./result.xls', buffer, function (err)
{
if (err)
throw err;
console.log('Write to xls has finished');
})
}
finally{
await driver.quit();
}
})();
只爬取了一页数据