百度爬虫(百度搜索引擎反爬取是什么意思)
这篇文章给大家聊聊关于百度爬虫,以及百度搜索引擎反爬取是什么意思对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
如何有效吸引百度蜘蛛爬虫
第一:更新的网站内容要与网站主题相关
每个网站都有自己的特定类型,如网站建设、某产品垄断网站、电子商务网站等。这些不同的网站决定了网站上文章的主题和类型。
如果你每天更新这样一个不合适的网站类型的文章,即使你的文章真的是你自己的原创,它也不会得到百度蜘蛛的青睐,但可能会让百度蜘蛛在你的网站上触发惩罚机制,最后的场景你可以想象。
第二:注意网站页面的更新度和更新频率
事实上,每次蜘蛛抓取网站时,都会将这些页面的数据存储在数据库中。下次蜘蛛再次爬网时,它会与上次爬网的数据进行比较。如果页面与上一页相同,则表示该页尚未更新,因此爬行器将减少划痕。取数的频率甚至都不取。相反,如果页面被更新,或者有一个新的连接,蜘蛛将爬行到基于新链接的新页面,这使得增加条目的数量变得很容易。
第三:提高网站权重
网站和页面的权重越高,蜘蛛通常爬行的深度越深,蜘蛛包含的页面越多。但是,一个权重为1的新网站相对容易,但它将变得越来越难增加的重量在线。
第四:掌握文章的字数,不要太多也不要太少。
无论一篇文章有多好,你都必须有一定数量的词来表达它的意义和意义。几十个字不能让别人看到你文章的精髓。但过多的文字会让一些喜欢阅读快餐的用户非常疲劳,也会导致网站跳出率较高。那么如何科学地控制字数呢?
事实上,一篇文章所要写的字数是不确定的,但我们可以制定每日更新网站文章的总体计划,观察主题文章的数量,并考虑我们网站用户的需求。如果你的网站是一个新闻门户,那么编辑的文章数量应该多一点,你可以参考新浪等大型新闻门户。com,这些网站上的文章数量比较丰富,你可以选择800多个字;但是如果你的网站是独家产品的网站,你应该学会突出产品。文字,而不是冗长的产品原产地介绍,可以控制在400至500字。精炼和准确的有价值的文章非常受用户和搜索原因的欢迎。
第五:做好网站外链和友情链接
如果你想让蜘蛛知道你的链接,你需要去蜘蛛经常爬的地方放一些链接到你的网站,这样蜘蛛就能吸引蜘蛛爬你的网站,这些进口环节我们称之为外链,其实友谊链也是一种外链,但由于友谊链实际上要好于外链效应,所以青岛的网站是分开的。正是因为外链有这样的吸引蜘蛛的作用,所以我们在发布新网站时,一般会去一些收集效果较好的平台发布一些外链,让蜘蛛更快地把我们的网站包括进来。
第六:文章不能过于死板和单调
现在用户和搜索引擎蜘蛛对文章的要求越来越高,许多Webmaster不理解装饰文章,除了文本或文本之外,整个文章还没有,这样的文章很难与其他网站产生差异,最终的结果很难被百度蜘蛛所包含。
怎样实现百度指数爬虫功能
这次给大家带来怎样实现百度指数爬虫功能,实现百度指数爬虫功能的注意事项有哪些,下面就是实战案例,一起来看一下。
之前看过一篇脑洞大开的文章,介绍了各个大厂的前端反爬虫技巧,但也正如此文所说,没有100%的反爬虫方法,本文介绍一种简单的方法,来绕过所有这些前端反爬虫手段。
下面的代码以百度指数为例,代码已经封装成一个百度指数爬虫node库: https://github.com/Coffcer/baidu-index-spider
note:请勿滥用爬虫给他人添麻烦
百度指数的反爬虫策略
观察百度指数的界面,指数数据是一个趋势图,当鼠标悬浮在某一天的时候,会触发两个请求,将结果显示在悬浮框里
可以发现,百度指数实际上在前端做了一定的反爬虫策略。当鼠标移动到图表上时,会触发两个请求,一个请求返回一段html,一个请求返回一张生成的图片。html中并不包含实际数值,而是通过设置width和margin-left,来显示图片上的对应字符。并且请求参数上带有res、res1这种我们不知如何模拟的参数,所以用常规的模拟请求或者html爬取的方式,都很难爬到百度指数的数据。
爬虫思路
怎么突破百度这种反爬虫方法呢,其实也很简单,就是完全不去管他是如何反爬虫的。我们只需模拟用户操作,将需要的数值截图下来,做图像识别就行。步骤大概是:
模拟登录
打开指数页面
鼠标移动到指定日期
等待请求结束,截取数值部分的图片
图像识别得到值
循环第3~5步,就得到每一个日期对应的值
这种方法理论上能爬任何网站的内容,接下来我们来一步步实现爬虫,下面会用到的库:
puppeteer模拟浏览器操作
node-tesseract tesseract的封装,用来做图像识别
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输入内容有否有空格
百度搜索引擎反爬取是什么意思
爬虫,全称“网络爬虫”,是一种程序或者脚本,可以按照一定的规则,自动抓取万维网上的信息。目前已经步入大数据时代,爬虫已经成为了获取数据不可或缺的方式。做过爬虫的可能都遇到过,爬取的时候IP会突然被网站封掉,因为大多数网站都会设置“反爬虫”措施。
为什么要反爬虫?原因其实很简单。一是爬虫会在短时间内发出大量请求,占用服务器的带宽,影响正常用户的访问。二是爬虫会轻易地将网站上大量的信息资源快速爬走,危害用户的隐私安全及知识产权,这是我们都无法容忍的。所以,防止“爬虫入侵”是非常必要的。
常见的反爬虫方式有以下几种:
1.根据访问频率确定是否为爬虫。
每台电脑在上网时都对应唯一的IP,当这台电脑访问网站的时候会被记录IP。如果这个IP访问的频率过快,远超过一个正常人的访问频率时,就会被认定为爬虫。使用代理IP更换不同IP,对方网站每次都以为是新用户,自然就没有拉黑的风险。如果工作任务量大,抓取速度快,目标服务器会容易发现,所以就需要用代理IP来换IP后再抓取。IPIDEA包含了全球的ip资源足以满足爬虫的需求。
2.根据Headers确定是否为爬虫。
当我们使用浏览器访问网站时,浏览器会自动在访问请求上生成Headers,内容主要包含浏览器版本及采用的编码方式、使用的操作系统等信息,但爬虫一般不会附加这些信息,所以可以被识别出来。
3.利用动态页面反爬虫。
静态页面由HTML代码生成,页面的内容随之固定。而动态页面由脚本语言生成,有些内容需要运行一些脚本才能见到。访问动态页面时,某些内容还需要一些特定的操作才能显示,比如点击、输入验证码等,这就增加了爬取的难度,简单的爬虫就会被剔除掉。
好了,文章到这里就结束啦,如果本次分享的百度爬虫和百度搜索引擎反爬取是什么意思问题对您有所帮助,还望关注下本站哦!