一、什么是爬虫
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定规则,自动的抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
- 搜索引擎
今日头条/网易新闻
- 抢票软件
最终都指向的是 12306
- 比价网
淘宝 京东 拼多多
在生活中网络爬虫经常出现,搜索引擎就离不开网络爬虫。例如,百度搜索引擎的爬虫名字叫作百度蜘蛛(Baiduspider)。百度蜘蛛,是百度搜索引擎的一个自动程序。它每天都会在海量的互联网信息中进行爬取,收集并整理互联网上的网页、图片视频等信息。当用户在百度搜索引擎中输入对应的关键词时,百度将从收集的网络信息中找出相关的内容,按照一定的顺序将信息展现给用户。
二、网页抓取
直接从渲染后的页面中获取数据,实现代码如下
const puppeteer = require('puppeteer');
async function getContent(urls) {
const browser = await puppeteer.launch({
args: ['--no-sandbox'],
dumpio: true,
executablePath: "/usr/bin/google-chrome" // 浏览器路径
});
const page = await browser.newPage();
await page.setViewport({width: 1920, height: 1080});
await page.emulateMediaType('screen');
for (let url of urls) {
if (url) {
await page.goto(url, { waitUntil: 'networkidle0', timeout: 0 });
}
try {
const dimensions = await page.evaluate(() => {
return {
width: document.body.scrollWidth,
height: document.body.scrollHeight,
deviceScaleFactor: window.devicePixelRatio,
};
});
} catch (e) {
console.log(e);
}
}
let content = await page.content();
await page.close();
await browser.close();
return content;
}
module.exports = {
spiderOne: async (url) => {
let urls = [url];
let content = await getContent(urls);
return content;
},
spiderMuti: async (urls) => {
let content = await getContent(urls);
return content;
}
}
三、网页解析
// content就是网页内容
async function parseTeamDetail(content) {
const $ = cheerio.load(content);
let teamName = $("div.intro div.head").text().trim().split("\n")[0];
teamName = teamName.replace(/[队]+$/, "");
let teanEngName = $("div.intro div.row").first().find("div.value").text().trim();
let retired_short = $($("div.intro div.row")[1]).find("div.value").text().trim().replace(/[\r\n\t]+/g, ",");
let members = [];
let length = $($("table.stat_box")[0]).find("tbody tr").length;
$($("table.stat_box")[0]).find("tbody tr").each((index, ele) => {
if (index > (length - 4)) {
return ;
}
let lineData = [];
$(ele).find("td").each((subInx, subEle) => {
if (subInx == 0) {
return
}
if (subInx == 1) {
lineData.push({
name: $(subEle).find("a").text().trim(),
href: "http://stat-nba.com" + $(subEle).find("a").attr("href")
});
} else {
lineData.push($(subEle).text().trim());
}
});
members.push(lineData)
});
return members;
}
仅供参考
注意:本文归作者所有,未经作者允许,不得转载