querylist采集微信公众号文章(puppeteer实战:爬取搜狗微信搜索的公众号文章并写入Excel )
优采云 发布时间: 2021-09-11 08:12querylist采集微信公众号文章(puppeteer实战:爬取搜狗微信搜索的公众号文章并写入Excel
)
在上一本书中提到,使用puppeteer库进行截图操作只是简单的展示了puppeteer的特性和基本用法。这次我们来谈谈使用puppeteer抓取页面数据并写入Excel。
Puppeteer实战:抓取搜狗微信搜索到的公众号文章,写入Excel
背景一:搜狗搜索现在有了根据关键词查询微信公众号文章的功能,而我们要做的就是爬下指定关键词的文章,因为这个需求来自我 来自公司业务部,所以为了方便同学们操作查看,还需要把爬取的数据放到Excel中。
用过之后,感觉这个东西并不复杂,只要懂API就行。我认为复杂的是需要考虑各种基本情况。
首先一般网站已经进行了防爬处理。我们需要以合理的方式绕过它。比如搜狗搜索就是。一开始,我打算读取a标签的href属性,然后直接在浏览器中打开链接。但是在尝试之后,我发现我能够做到这一点。估计搜狗做了一些反爬行动。这样做将报告 IP 异常。所以我放弃了,使用puppeteer的page.click方法来解决这个问题,因为puppeteer本质上是通过模拟真实用户的点击操作来实现的,所以不会受到反爬机制的影响。
另外一个是因为爬虫是微信文章,我们还需要考虑微信文章本身的一些情况,比如文章被发布者删除或移动,文章被举报,或者这个文章时分享另一篇文章文章Wait...
总之,我觉得用puppeteer写的爬虫脚本跟业务是强耦合的,所以我个人觉得代码本身没有参考意义。不过还是可以看看自己在写过程中遇到的各种奇怪的问题,或许可以为大家解决遇到的问题提供一些思路。
完整代码如下:
exportExcel 导出 Excel:
const fs = require("fs");
const xlsx = require("node-xlsx");
module.exports = {
async exportExcel(fileName, data) {
let dataArr = [];
let title = ["文章标题", "文章URL", "作者名(公众号)", "发布日期", "内容"];
dataArr.push(title);
data.forEach(curr => {
dataArr.push([
curr.title,
curr.url,
curr.account,
curr.publishTime,
curr.content
]);
});
const options = {
"!cols": [
{ wch: 70 },
{ wch: 100 },
{ wch: 30 },
{ wch: 30 },
{ wch: 200 }
]
};
// 写xlsx
var buffer = await xlsx.build(
[
{
name: "sheet1",
data: dataArr
}
],
options
);
await fs.writeFile(`./dist/data1【${fileName}】.xlsx`, buffer, function(
err
) {
if (err) throw err;
console.log("写入成功!");
});
}
};