# nodejs-crawl
#### 介绍
使用puppeteer的网页数据爬虫
#### 可爱的爬虫
- 魔兽世界代练 https://www.g2g.com/categories/wow-boosting-service?sort=most_recent
- FIFA金币站评论 https://futcoin.net/en/reviews
- FIFA23球员背景卡及CSS https://www.futbin.com/players
#### 获取爬虫
1. 获取已有爬虫可关注git源码库
- https://gitee.com/yamiwamiyu/nodejs-crawl
- https://github.com/yamiwamiyu/nodejs-crawl
2. 定制爬虫和学习,可联系作者
- QQ: 359602182
- 微信: yamiwamiyu
#### 安装教程
```
npm i @yamiwamiyu/nodejs-crawl
```
#### 使用和参数说明
1. 翻页爬行采集
```
const { pageCrawl } = require('@yamiwamiyu/nodejs-crawl');
pageCrawl({
// 配置信息,'*' 开头表示必须
// 浏览器相关设置 ↓
// 使用你本地安装的浏览器进行操作
chrome: "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe",
// 在你已经打开的Chrome浏览器的某个页签里操作(开发时推荐使用)
// 这需要你的浏览器开启远程调试功能,开启方法如下
// 假如你是Windows系统,Chrome浏览器位于C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
// - CMD: 打开控制台(Win + R, 输入cmd回车),输入"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222
// - 快捷方式: 鼠标右键 -> 新建 -> 快捷方式,输入"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222,双击打开
// - 代码开启:require('child_process').exec('"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222')
port: 9222,
// 不显示浏览器
headless: true,
// 采集器相关设置 ↓
// * 采集的数据输出的文件名,不配置会不输出文件
output: __filename,
// 输出.csv文件,不配置默认输出.json文件
csv: true,
// * 采集数据的目标网站url,地址打开应该可以采集到数据的第一页
url: "https://www.npmjs.com/package/@yamiwamiyu/nodejs-crawl",
// * 翻页按钮的DOM元素selector,如果页面没有按钮或按钮禁用就会结束爬行
// selector可参考教程https://www.runoob.com/cssref/css-selectors.html
// 可以直接是字符串例如next: ".next-button-selector"
// 可以是function(已经采集的页数),返回空时可以结束爬行
next: (pageCount) => {
// 采集10页后结束
if (pageCount == 10)
return;
return ".next-button-selector";
},
// 每采集到一页数据时回调
ondata: (data, url) => {
console.log("当前页", url, "采集到的数据", data);
},
// 接口采集 ↓ (接口必须是返回json格式数据,否则请简单修改源码部分)
// * 接口的url,包含部分即可
request: 'api/test?',
// * 请根据接口返回的json数据,返回最终的数据数组
// 例如数据格式为 { code: 0, msg: null, results: [{},{},{},{}] }
json: (i) => i.results,
// 页面采集 ↓
// 等待数据渲染完成的关键DOM元素的selector
wait: ".all-datas-selector",
// * 从页面采集数据,JS的DOM操作,最终返回数据数组
// 你应该到浏览器的调试工具控制台中先写好再粘贴到这里
dom: () => {
var data = [];
var comments = document.querySelectorAll(".all-datas-selector");
for (var c of comments) {
data.push({
'key1': c.querySelector(".value1").innerText,
'key2': c.querySelector(".value2").dataset.id,
'key3': c.querySelector(".value3").src,
})
}
return data;
},
})
```
2. 直接接口采集
```
const { xhrCrawl } = require('@yamiwamiyu/nodejs-crawl');
// 循环构建每页的接口参数
const datas = [];
for (let i = 1; i <= 2; i++) {
datas.push({
service_id: 'lgc_service_18',
brand_id: 'lgc_game_2299',
sort: 'most_recent',
page: i,
page_size: 48,
currency: 'CNY',
country: 'CN',
})
}
// 发起接口拉取数据
await xhrCrawl({
// 接口并发的数量,默认4
queue: 4,
// GET或POST,默认GET
method: "GET",
// HTTP请求头
headers: {
header1: "value1",
header2: "value2",
},
// * 需要采集的每页的接口参数
datas: datas,
// 以下参数均和 pageCrawl 方法的参数一致
// * 接口地址
url: "https://sls.g2g.com/offer/search",
// * 请根据接口返回的json数据,返回最终的数据数组
json: (i) => i.payload.results,
// 每采集到一页数据时回调
ondata: (data, param) => {
console.log("当前接口参数", param, "采集到了数据", data.length, "条");
},
// * 采集的数据输出的文件名,不配置会不输出文件
output: __filename,
// 输出.csv文件,不配置默认输出.json文件
csv: true,
});
```
#### 实战使用示例
1. 通过接口获取数据
```
const { pageCrawl } = require('@yamiwamiyu/nodejs-crawl');
pageCrawl({
output: __filename,
// 接口地址
request: "offer/search?",
// json数据
json: (i) => i.payload.results,
url: "https://www.g2g.com/categories/wow-boosting-service?sort=most_recent",
next: (i) => {
// 测试只采集2页
if (i == 2)
return;
return '.q-pagination>button:last-child';
},
})
```
2. 通过页面获取数据
```
const { pageCrawl } = require('@yamiwamiyu/nodejs-crawl');
pageCrawl({
output: __filename,
url: "https://futcoin.net/en/reviews",
// 等待页面渲染完成的关键DOM元素的selector
wait: ".fc-comment .uk-first-column .uk-text-left",
// 从页面采集数据
dom: () => {
var array = [];
var comments = document.querySelectorAll(".fc-comment");
for (var c of comments) {
array.push({
'user': c.querySelector(".uk-first-column .uk-text-left").innerText,
'nation': ((i) => {
var index = i.lastIndexOf('/') + 1;
return i.substring(index, index + 2).toUpperCase();
})(c.querySelector(".uk-first-column [data-uk-img]").dataset.src),
'time': c.querySelector(".uk-first-column .uk-text-muted").innerText,
'coin': ((i) => {
return i = i.substring(1, i.indexOf(' ', 1)).replaceAll(',', '');
})(c.querySelector(".uk-width-expand .uk-first-column").innerText),
'platform': c.querySelector(".uk-width-expand .uk-text-nowrap").innerText,
'star': c.querySelector(".fc-comment-rating").querySelectorAll(".fc-icon-star").length,
'content': c.querySelector(".uk-card>.uk-text-left").innerText,
})
}
return array;
},
next: (i) => {
// 测试只采集2页
if (i == 2)
return;
return '[data-uk-icon="arrow-right"]';
},
// 输出成csv
csv: true,
})
```
3. 一边拉取数据一边保存,下次从上次拉取到的位置继续
```
const { pageCrawl, writeCSVLines } = require('@yamiwamiyu/nodejs-crawl');
const fs = require('fs');
const file = __dirname + "/data.csv"
// 没有数据文件则先创建数据文件
if (!fs.existsSync(file))
fs.writeFileSync(file, "");
pageCrawl({
// ... 其它参数设置
// 不再对最终采集到的所有数据进行文件输出
output: '',
// 采集到一页数据后就追加到数据文件末尾
ondata(data) {
fs.appendFileSync(file, writeCSVLines(data));
},
})
```
4. 直接接口并发采集,采集速度快
```
const { xhrCrawl } = require('@yamiwamiyu/nodejs-crawl');
// 循环构建每页的接口参数
const datas = [];
for (let i = 1; i <= 2; i++) {
datas.push({
service_id: 'lgc_service_18',
brand_id: 'lgc_game_2299',
sort: 'most_recent',
page: i,
page_size: 48,
currency: 'CNY',
country: 'CN',
})
}
// 发起接口拉取数据
await xhrCrawl({
datas,
url: "https://sls.g2g.com/offer/search",
json: (i) => i.payload.results,
output: __filename,
});
```
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
资源推荐
资源详情
资源评论
收起资源包目录
使用puppeteer的网页爬虫.zip (12个子文件)
SJT-code
LICENSE 742B
package.json 359B
package-lock.json 64KB
crawler
www.futbin.com.js 58KB
futcoin.net.js 1KB
__example.js 9KB
www.g2g.com.js 479B
.npmignore 65B
npm插件学习.txt 2KB
index.js 12KB
.gitignore 44B
README.md 8KB
共 12 条
- 1
资源评论
JJJ69
- 粉丝: 6165
- 资源: 5674
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于pygame实现的烟花代码
- mcu-printf关于51单片机使用printf函数进行串口调试的方法
- MySQL和数据表操作
- 微信小程序面试题.pdf
- 基于matlab实现电力系统仿真计算软件包,包括潮流计算,最优潮流计算等.rar
- 基于matlab实现电力系统各种故障波形仿真,单相接地故障,两相间短路,两相接地短路,三相短路等.rar
- 基于matlab实现电动汽车动力性,爬坡性,续驶里程等性能仿真.rar
- Python动态烟花代码.pdf
- 基于matlab实现串口发送接收数据 可配置端口,波特率等 发送可选择ASCII方式或HEX方式
- matlab基于BP神经网络手写字母识别(单一).zip代码9
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功