30分钟学会mysql,30分钟学会爬虫 实战演习

释放双眼,带上耳机,听听看~!

混迹博客园那么久,人也很懒。思考了一下还是把这篇文章记录下来。原创https://www.cnblogs.com/y112102/p/10788564.html。

这里说的是只基于google插件

30分钟

准备知识:javascript, sql(新建一个表就可以了),一个接口webapi(入库数据)。

传统的做法:

1:后台发送一个请求(request),获取输出(response) 然后对输出的结果分析。筛选符合自己业务的数据 (还是不理解的查看 http://www.cnblogs.com/youuuu/archive/2011/06/17/2083714.html)。

2:【难度】数据筛选,后台模拟请求 可能采集的页面涉及到token,登入身份信息....当然我也不会说他不好。一个字麻烦。 系数大。

主角登场:先易后难。

场景:

d6cd8aca505e8ed67ef624becf59fee6.png

1:建立好数据库,简单除暴 没啥好说的。

4e14e28c354aa3efae4dc438fed25f8b.png

2:一个api接口能插入数据 就可以(接受参数,插入数据库)简单粗暴 没什么逻辑。

1d6433f5d46ade4158d135ba6f22f04a.png

3:主角 google插件

1:一个manifest.json文件

2:1个html页面

3:一个js文件

manifest.json:

{//清单文件的版本,

\"manifest_version\": 2,//插件的名称

\"name\": \"xxx采集\",//插件的版本

\"version\": \"1.0\",//插件描述

\"description\": \"色卡xxx内部使用\",//作者

\"author\": \"sxei\",//图标,一般偷懒全部用一个尺寸的也没问题

\"icons\": {\"48\": \"img/icon.png\",\"128\": \"img/icon.png\"},//浏览器右上角图标设置,browser_action、page_action、app必须三选一

\"browser_action\": {\"default_icon\": \"img/icon.png\",\"default_popup\": \"popup.html\"},//需要直接注入页面的JS

\"content_scripts\": [

{//匹配的网站

\"matches\": [ \"https://www.qtccolor.com/Product/FHIP110N.aspx\", \"https://www.qtccolor.com/Color/*\"],//多个JS按顺序注入

\"js\": [ \"js/jquery-1.10.2.min.js\", \"js/content-script.js\"]

}

],//权限申请 (这个很重要 如何没有它 我们的请求是无法跨域的) 有啥就写啥 权限最大化

\"permissions\": [\"contextMenus\",\"tabs\",\"notifications\",\"webRequest\", //web请求

\"webRequestBlocking\",\"storage\",\"http://*/*\",\"https://*/*\"]

}

2:html页面和 manifest.json 【browser_action】里面的名称保持一致就好popup.html

html内容:根据业务需求(我一般弄一个链接打开要采集的页面 和一些说明信息)原因:某一些网站有很多域名 同一个业务地址栏不同。干脆指定

如图:

e22a2be918af115b88389fe87b9625e8.png

【xxx】

body{padding-bottom:20px;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff;margin:0;width:200px;text-align:center;

}@-webkit-keyframes shake{0%{

opacity:1;

}50%{opacity:0.5;

}100%{opacity:1;

}}

@keyframes shake{0%{

opacity:1;

}50%{opacity:0.5;

}100%{opacity:1;

}}

.shake{-webkit-animation:shake 2s infinite;animation:shake 2s infinite;color:red;

}

【x入口】

色卡(不要点击其他页签)

采集失败请联系电脑部

提示:x内部使用

js:(为了方便省事 用的jquery)我都写上注释了。写在 manifest.json 配置 注入的 content-script.js文件 里面

(function() {var tempVriable ={//接口

apiUrl: \"http://localhost:62930/api/Ctrip/InsetSeKa\",

nowUrl: window.location.href,

mainPage:\"xx\",//采集的页面

caiJiePage: \"https://www.xxx.com/Color/\"};var systemMethod ={//ajax 没什么好的说的

Ajax: function(obj) {var objs =$.extend({

dataType:\"json\",

data: obj.data,

error:function(xmlHttpRequest, textStatus, errorThrown) {debugger;

console.log(XMLHttpRequest+ \"-----\" + textStatus + \"---\" +errorThrown);

},

success: obj.success,

url: obj.url,

type:\"get\",

beforeSend:function(request) {

}

},

obj);

$.ajax(objs);

},//采集页面入口 模拟点击打不不同的链接, 不同的链接页面

setData: function() {var tempElement = $(\".productColors ul\").find(\".show-color-image\");for (var i = 0; i < tempElement.length; i++) {

let thisInfo=$(tempElement[i]);//循环中延迟 防止打开频繁

(function(i) {

setTimeout(function() {//模拟操作 不同的业务这里的逻辑可能不一样

thisInfo.trigger(\"click\");

}, i* 1000);

})(i);

}

},//成功后关闭窗口

closePage: function() {

window.opener= null;

window.open(\"\", \"_self\", \"\");

window.close();

},

Init:function() {//注册成功 控制台打印日志

setTimeout(() =>{

console.clear();if (tempVriable.nowUrl.indexOf(tempVriable.mainPage) > -1) {

console.group(\'xxx\');

console.log(\'%c xxx 页面启动成功-内部使用\', \'color:red;\');

console.groupEnd();

}if (tempVriable.nowUrl.indexOf(tempVriable.caiJiePage) > -1) {

console.group(\'xxx潘通\');

console.log(\'%c xxxx Color页面启动成功-内部使用\', \'color:red;\');

console.groupEnd();

}

},200);//入口页面

setTimeout(() =>{if (tempVriable.nowUrl.indexOf(tempVriable.mainPage) > -1) {

systemMethod.setData();

}

},2000);//采集页面 数据入库 发送请求(根据自己的需求)

setTimeout(() =>{if (tempVriable.nowUrl.indexOf(tempVriable.caiJiePage) > -1) {//就和我们平常写js一样 需要哪些数据 获取到哪些节点

let tempName = $(\".SimpleColorBlock h1\")[0].childNodes;

let TPX= tempName[0].textContent;

let colorName= tempName[2].textContent;

let RGB= $(\".cmyk\"),

tableDom= $(\".block-detail table td\");var R = RGB[0].innerText,

G= RGB[1].innerText,

B= RGB[2].innerText,

Hex= tableDom[6].innerText;var data ={

TPX: TPX,

colorName: colorName,

R: R,

G: G,

B: B,

Hex: Hex

};

systemMethod.Ajax({

data: data,

url: tempVriable.apiUrl,

success:function(json) {if (json != undefined && json.Result == 0) {//成功后关闭页面

systemMethod.closePage();

}else{

console.error(\'\');

console.group(\'采集失败\');//记录错误信息 后台也打印记录日志

console.log(`%c 当然url${this.url}\', \'color:red;`);

console.groupEnd();

}

}

});

}

},2000);

},

registeEevent:function() {

}

};

systemMethod.Init();

})();

结果:

cb9e035380e90f20cb020584df563f9b.png

附加到google插件,然后打开自己的页面吧 去见证这个奇迹

301cb5486ae0899333b4974428f7771c.png

花了40分钟大功告成

4e58c9cddc25c034440889dd91c729a5.png

总结:建好数据库,一个接口(这些对我们来说都是5分钟的事情)。

1个:manifest.json 文件 格式按规定写。依葫芦画瓢 不要问为什么 google的规矩

js文件 想怎么写就怎么写 是不是很简单。30分钟你看可以吗?

3:细节 后台打印 记录日志 前台打印记录日志, 可能某一些采集的页面 在实现模拟人工操作 可能会复杂一点 。这个只能多花时间了。

4:可能某一些反爬虫的 页面 有很多限制。比如说访问太频繁 ,页面故意制造一线逻辑 数据获取麻烦 比如说 (自己体验的携程的机票数据) 可能是自己水平有限 携程的反爬虫 做的还是可以 。

5:你的爬虫来源的对方的成功的 。最高的反爬虫就是放对方一码 都是码农 何必为难自己。

6:缺点 需要打开浏览器 毕竟他的名字是叫google插件

补充知识:google插件的 详细补充 api对你来说 使用都不是事情

https://github.com/sxei/chrome-plugin-demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值