问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么是百度指数?百度指数能做什么?

发布网友 发布时间:2022-04-23 14:38

我来回答

3个回答

懂视网 时间:2022-05-15 09:40

这次给大家带来怎样实现百度指数爬虫功能,实现百度指数爬虫功能的注意事项有哪些,下面就是实战案例,一起来看一下。

之前看过一篇脑洞大开的文章,介绍了各个大厂的前端反爬虫技巧,但也正如此文所说,没有100%的反爬虫方法,本文介绍一种简单的方法,来绕过所有这些前端反爬虫手段。

下面的代码以百度指数为例,代码已经封装成一个百度指数爬虫node库: https://github.com/Coffcer/baidu-index-spider

note: 请勿滥用爬虫给他人添麻烦

百度指数的反爬虫策略

观察百度指数的界面,指数数据是一个趋势图,当鼠标悬浮在某一天的时候,会触发两个请求,将结果显示在悬浮框里

可以发现,百度指数实际上在前端做了一定的反爬虫策略。当鼠标移动到图表上时,会触发两个请求,一个请求返回一段html,一个请求返回一张生成的图片。html中并不包含实际数值,而是通过设置width和margin-left,来显示图片上的对应字符。并且请求参数上带有res、res1这种我们不知如何模拟的参数,所以用常规的模拟请求或者html爬取的方式,都很难爬到百度指数的数据。

爬虫思路

怎么突破百度这种反爬虫方法呢,其实也很简单,就是完全不去管他是如何反爬虫的。我们只需模拟用户操作,将需要的数值截图下来,做图像识别就行。步骤大概是:

  1. 模拟登录

  2. 打开指数页面

  3. 鼠标移动到指定日期

  4. 等待请求结束,截取数值部分的图片

  5. 图像识别得到值

  6. 循环第3~5步,就得到每一个日期对应的值

这种方法理论上能爬任何网站的内容,接下来我们来一步步实现爬虫,下面会用到的库:

  1. puppeteer 模拟浏览器操作

  2. node-tesseract tesseract的封装,用来做图像识别

  3. jimp 图片裁剪

安装Puppeteer, 模拟用户操作

Puppeteer是Google Chrome团队出品的Chrome自动化工具,用来控制Chrome执行命令。可以模拟用户操作,做自动化测试、爬虫等。用法非常简单,网上有不少入门教程,顺着本文看完也大概可以知道如何使用。

API文档: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md

安装:

npm install --save puppeteer

Puppeteer在安装时会自动下载Chromium,以确保可以正常运行。但是国内网络不一定能成功下载Chromium,如果下载失败,可以使用cnpm来安装,或者将下载地址改成淘宝的镜像,然后再安装:

npm config set PUPPETEER_DOWNLOAD_HOST=https://npm.taobao.org/mirrors
npm install --save puppeteer

你也可以在安装时跳过Chromium下载,通过代码指定本机Chrome路径来运行:

// npm
npm install --save puppeteer --ignore-scripts
// node
puppeteer.launch({ executablePath: '/path/to/Chrome' });

实现

为版面整洁,下面只列出了主要部分,代码涉及到selector的部分都用了...代替,完整代码参看文章顶部的github仓库。

打开百度指数页面,模拟登录

这里做的就是模拟用户操作,一步步点击和输入。没有处理登录验证码的情况,处理验证码又是另一个话题了,如果你在本机登录过百度,一般不需要验证码。

// 启动浏览器,
// headless参数如果设置为true,Puppeteer将在后台操作你Chromium,换言之你将看不到浏览器的操作过程
// 设为false则相反,会在你电脑上打开浏览器,显示浏览器每一操作。
const browser = await puppeteer.launch({headless:false});
const page = await browser.newPage();
// 打开百度指数
await page.goto(BAIDU_INDEX_URL);
// 模拟登陆
await page.click('...');
await page.waitForSelecto('...');
// 输入百度账号密码然后登录
await page.type('...','username');
await page.type('...','password');
await page.click('...');
await page.waitForNavigation();
console.log(':white_check_mark: 登录成功');

模拟移动鼠标,获取需要的数据

需要将页面滚动到趋势图的区域,然后移动鼠标到某个日期上,等待请求结束,tooltip显示数值,再截图保存图片。

// 获取chart第一天的坐标
const position = await page.evaluate(() => {
 const $image = document.querySelector('...');
 const $area = document.querySelector('...');
 const areaRect = $area.getBoundingClientRect();
 const imageRect = $image.getBoundingClientRect();
 // 滚动到图表可视化区域
 window.scrollBy(0, areaRect.top);
 return { x: imageRect.x, y: 200 };
});
// 移动鼠标,触发tooltip
await page.mouse.move(position.x, position.y);
await page.waitForSelector('...');
// 获取tooltip信息
const tooltipInfo = await page.evaluate(() => {
 const $tooltip = document.querySelector('...');
 const $title = $tooltip.querySelector('...');
 const $value = $tooltip.querySelector('...');
 const valueRect = $value.getBoundingClientRect();
 const padding = 5;
 return {
 title: $title.textContent.split(' ')[0],
 x: valueRect.x - padding,
 y: valueRect.y,
 width: valueRect.width + padding * 2,
 height: valueRect.height
 }
});

截图

计算数值的坐标,截图并用jimp对裁剪图片。

await page.screenshot({ path: imgPath });
// 对图片进行裁剪,只保留数字部分
const img = await jimp.read(imgPath);
await img.crop(tooltipInfo.x, tooltipInfo.y, tooltipInfo.width, tooltipInfo.height);
// 将图片放大一些,识别准确率会有提升
await img.scale(5);
await img.write(imgPath);

图像识别

这里我们用Tesseract来做图像识别,Tesseracts是Google开源的一款OCR工具,用来识别图片中的文字,并且可以通过训练提高准确率。github上已经有一个简单的node封装: node-tesseract ,需要你先安装Tesseract并设置到环境变量。

Tesseract.process(imgPath, (err, val) => {
if (err || val == null) {
 console.error(':x: 识别失败:' + imgPath);
 return;
}
console.log(val);

实际上未经训练的Tesseracts识别起来会有少数几个错误,比如把9开头的数字识别成`3,这里需要通过训练去提升Tesseracts的准确率,如果识别过程出现的问题都是一样的,也可以简单通过正则去修复这些问题。

封装

实现了以上几点后,只需组合起来就可以封装成一个百度指数爬虫node库。当然还有许多优化的方法,比如批量爬取,指定天数爬取等,只要在这个基础上实现都不难了。

const recognition = require('./src/recognition');
const Spider = require('./src/spider');
module.exports = {
 async run (word, options, puppeteerOptions = { headless: true }) {
 const spider = new Spider({ 
 imgDir, 
 ...options 
 }, puppeteerOptions);
 // 抓取数据
 await spider.run(word);
 // 读取抓取到的截图,做图像识别
 const wordDir = path.resolve(imgDir, word);
 const imgNames = fs.readdirSync(wordDir);
 const result = [];
 imgNames = imgNames.filter(item => path.extname(item) === '.png');
 for (let i = 0; i < imgNames.length; i++) {
 const imgPath = path.resolve(wordDir, imgNames[i]);
 const val = await recognition.run(imgPath);
 result.push(val);
 }
 return result;
 }
}

反爬虫

最后,如何抵挡这种爬虫呢,个人认为通过判断鼠标移动轨迹可能是一种方法。当然前端没有100%的反爬虫手段,我们能做的只是给爬虫增加一点难度。

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

easyui日期时间框在IE中的兼容性如何处理

vue判断input输入内容有否有空格

热心网友 时间:2022-05-15 06:48

百度指数是一种查询关键词工具,属于站长工具的一种,它的功能有:

1、查询你所要的关键词的搜索趋势,也就是搜索量;

2、可以洞察用户的兴趣爱好是什么和用户的需求是什么;

3、可以检测用户的兴趣动向和精准定位受众用户的特征是什么。

这就是百度指数。百度指数对我们优化的作用来说是非常强大的,我们可以通过百度指数的趋势研究、需求图谱、舆情管家和人群画像这些功能,分析判断出关键词或产品的整体市场趋势和用户需求,而且还可以精准定位受众用户群众和用户的行为特征。因此,我们还可以通过百度指数,来查找热门关键词、挖掘长尾关键词和定位长尾关键词。

以上就是《常见元标签有哪些?》的全部内容,感谢阅读,希望对你有帮助!

热心网友 时间:2022-05-15 08:06

百度指数是以百度海量网民行为数据为基础的数据分享平台。在这里,你可以研究关键词搜索趋势、洞察网民需求变化、监测媒体舆情趋势、定位数字消费者特征;还可以从行业的角度,分析市场特点。
简单来说是一种查询关键词工具,属于站长工具的一种,它的功能有:
1、查询你所要的关键词的搜索趋势,也就是搜索量;
2、可以洞察用户的兴趣爱好是什么和用户的需求是什么;
3、可以检测用户的兴趣动向和精准定位受众用户的特征是什么。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
人大政协辅助岗是什么 政务辅助人员是干什么 政府辅助人员是什么 努比亚的海拔什么意思 北非努比亚现在怎么样了啊 相邻权的相关法律 梦见老公离世了什么预兆 梦见自己老公走掉 你出轨后 怎么操作才没被发现? 评评怎么造句 用手机号怎么找回 福州话翻译软件 百度指数可以做什么用? 只有手机号码找回微信? 有翻译福建话的软件吗? 紧急!郑多燕减肥操 中的郑多燕 注册商标转让交易多少钱合适,100万值吗?百度指数10000左右, 商标转让 5类 减肥茶,减肥药 注册商标 郑多燕,百度指数10000左右每天,360指数7500左 2021锦浪科技目标价 锦浪科技最新新闻是利空还是利好? 锦浪科技股中报不知怎样 固德威和锦浪售后服务哪个更好一些 逆变器品牌前十排名 锦浪科技就涨到10元吗 锦浪科技怎么样了,300763怎么样了 今天股票锦浪科技啥情况? 锦浪科技最近消息是利空还是利好 锦浪科技怎么样 知乎 370763可以申购吗 锦浪发债中签率 锦浪发债中签能赚多少 普通话翻译成闽南语(即福建话) 我的和手机号是绑定的,现在那个号码不用了,我怎么才能找回我的? 百度指数是什么?能用来做什么啊? 福建省霞浦话翻译成普通话用什么软件 seo优化,百度指数高了好优化还是低了好优化? 黎话在线翻译器,,, 原来用的手机号码注销了,是以前的手机号码,怎么找回微信? 百度指数是不是等于关键词定向度 有没有软件可以翻译语音文件 闽东话 微信只记得,手机号码手机了密码忘记了,怎么找回来 百度指数是什么?有什么作用 什么软件可以下载好然后可以翻译闽南话的 一个手机号码注册了两个之前那个微信怎么找回来? 闽南话翻译普通话下载软件 _百度问一问 刷百度指数有什么用途 刷百度指数靠谱吗,一般什么情况需要刷百度指数 微信别人发的方言听不懂有没有什么软件可以翻译的? 绑定的以前不用的手机号,怎么找回微信呢? 求一个百度指数