前言

  技术本身并无罪,罪恶本质在于人心,好比厨师手中的菜刀用来创造美味佳肴,而杀手手上的刀却用来创造无限的罪恶.

环境

  win7 IIS 6.0  SQLserver2012 .NET 4.0 winform开发

工作原理

  利用.Net自带HTTP请求定点访问指定地址,精确登录,精确下载(注意:只针对有下载功能)

目的

  针对无开发能力或开发能力有限客户群体 通过该方式实现直连互通效果,但在开发之前需通知对方表明来意否则很容易被服务器认定为攻击行为(特别是测试阶段),开发过程中也会记录一些遇到的困难以及防范类似爬虫的方式

结构图

   

实现过程

   创建空白解决方案,创建winform程序,添加手动按钮 时间戳 等等,主要是textbox 用来记录程序执行过程方便精准定位错误以及实时报告获取进度

    

    增加时间戳控件后需要设置时间实时更新,双击控件 或右键<查看代码> 进行编辑 注意时间戳控件会在 designer 中创建对应事件 而需要做的只是吧当前时间赋值到这个框里,注意图一 是系统自动创建事件 在form1.designer文件中图二在form1.cs文件中,这样时间控件就准备好了,

    .

    当然日志相对来说简单多了,在textbox中增加行就可以了,但是在这里依然遇到很多问题例如,如果用listbox会更好看一点但是添加的时候很麻烦,所以放弃了.

   

    准备工作就此结束,开始进入正题,首先使用xml表来创建网站基本信息(建议坐在数据库),为长远考虑 数据库存放最安全,这次仅做测试

    

    创建好文件后首先编写核心调用工具类 get/post 请求 模拟请求所需参数都需要存入这个xml文件中 作为信息对象的一部分

    

    ##第一步## 获取通行证

    在进行发起流程之前首先需要访问想要登录的网站,也就是Get请求该网站获取网站放置本地的未激活sessionkey

    需要注意sessionkey有很多方式存在浏览器中,有意防护会在浏览器中存储session或者加密信息作为识别用户的方式,注意!! 很有可能不是通过post或get请求返回的参数 而是服务器直接设置的参数!!!! 找到它!!! 给他存起来 这是一张未激活的通行证

    一般情况下通行证是cookie,还有session啊以及回传一些密文等等,发送请求之前需要建立连接也就是打开浏览器后输入网址那一刻

    这里需要注意http与https区别 对应版本是否一致 这里我采用的是.net httpwebrequest/httpwebresponse 简单实现get请求与post请求

    

    接下来就要给这个通行证盖章了,首先需要搞个萝卜章,分析post请求和get请求必要参数

    1.post 请求参数

      ① 账号/密码 输入格式 参数名=参数 注意第一项参数需要加入'&'

      ② 其他参数与 账号密码格式相同

      ③ cookie 加载流程首先需要得到cookie 用于与服务器交互激活服务器session

      

    2.GET 请求参数

      ① 账号/密码/其他参数 在地址后面一顿拼接就好,必要情况下需要encode一下在进行拼接,注意encode时候特殊字符处理,时间/日期处理,尤其是get请求下载时要特别注意!!

      ② 模拟正常浏览器访问 主要是UA以及一些其他头部信息

      

如何跳过前端验证?

    一般网站登录请求无非post/get ,他们最终提交方向都是服务器公开出来的接口或者地址,按照参数规则 提交该链接即可,所以说白了这种登录方式只不过是接口登录,接口操作网站而已.

    拼接好参数请求时记得带上通行证,向服务器发送激活请求,一般情况下服务器会直接返回一些信息比如激活后的cookie,session 返回状态等等 或者是网页或者是一些简短的验证信息

    图片验证如何实现?

    当前程序并未实现,但是可以通过百度图片识别接口传递图片到识别接口随后返回验证码正确即可实现图片验证码识别,不过该方法只适用于简单图片识别复杂图片依旧需要求助Python来进行识别

    滑块识别与短信识别以及字符识别未进行研究

    ##第二步## 登录

    成功登陆后服务器session激活,这章通行证已经为真实有效可交互通行证了,确定服务器无返回错误后存储session

    

    ##第三步## 下载数据

    找到需要下载目标解析下载地址以及传递参数,模仿类似登陆操作 传递参数/以及其他信息并加载通行证cookie或者session 回传服务器 换取数据

    

    ##第四步## 保存原下载数据

    一般会用stream流来进行数据传输,不过要注意下编码格式以及数据格式 ,问题点多发生在服务器输出excel上,例如对面服务器使用java.poi输出excel切记直接操作流复制流数据到文件中即可

    这种情况下流文件使用stream.readend 读出来是乱码 所以无法确认是否有效 只能复制到文件中 在做有效性判断,当然也有部分导出方式是可以查看到的只要编码正确就可以完整读取,这里判断有效性可以根据数据量多少

    或者是字节数来判断

    

    ##第五步## 读取已导出原数据解析并入库

    解析excel数据转换为database数据写入数据库,这里我写的不好使用的字符拼接,效率低速度慢有待改进,但在这之前想着重记录下excel读取中遇到的问题

    首先,读取工具   NPOI /OLDB

    OLDB是比较常见的EXCEL读取方式,可以识别大多数的excel但他需要以下几点支持

      ① 微软的 office 服务支持,若无该服务 oldb无法运行

      ② 读取文件需要识别文件的版本 例如2003兼容版 2007标准版等等问题,参数多设置过程略显复杂

      

      ③ 最重要一点,错误提示不明确!! 不管是版本不兼容 还是解析不出来 他所报错误大都是 '不是有效文件' '内部指令错误' 这种模糊提示,他不会说明那里不对,反正就是不对不认识....F**K!

    

    NPOI 比较简单 ,相对来说更适合源文件下载之后未打开过这种情况下读取

      ① 不依赖微软的office核心,有无核心均可运行 随时随地无限制读取

      ② 版本区分 没有多种的版本区分目前我知道的只有两种 'xls' 和 'xlsx' 分别对应 HSSFworkBook 和 XSSFWorkBook

      ③ 拆分之后需要重新读取数据到datatable中,当前程序需要检查excel内容 所以解析excel必不可少 正合我意

    

    ##第六步## 入库

    数据读取完成后需要进入数据库,首先配置文件中添加数据库连接字符串账号密码地址等信息,直接读取后轮询解析数据直接入库,下面是oracle数据入库,注意特别不赞成使用一下方式存储数据!!! 效率低 速度慢!! 尽量使用正规批量插入方式

    而且这里并没有体现出来多个网站同时抓取的方式,缺乏工具思想

    

    程序设置为 每日自动执行,运行在win 2008 server 服务器上 添加了定时任务 每日进行自动更新

    如有其它优化建议 以及疑问敬请留言~

    

   

    

      

   

.NET 爬虫总结的更多相关文章

  1. 设计爬虫Hawk背后的故事

    本文写于圣诞节北京下午慵懒的午后.本文偏技术向,不过应该大部分人能看懂. 五年之痒 2016年,能记入个人年终总结的事情没几件,其中一个便是开源了Hawk.我花不少时间优化和推广它,得到的评价还算比较 ...

  2. Scrapy框架爬虫初探——中关村在线手机参数数据爬取

    关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...

  3. Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  4. scrapy爬虫docker部署

    spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...

  5. scrapy 知乎用户信息爬虫

    zhihu_spider 此项目的功能是爬取知乎用户信息以及人际拓扑关系,爬虫框架使用scrapy,数据存储使用mongo,下载这些数据感觉也没什么用,就当为大家学习scrapy提供一个例子吧.代码地 ...

  6. 120项改进:开源超级爬虫Hawk 2.0 重磅发布!

    沙漠君在历时半年,修改无数bug,更新一票新功能后,在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥?你不知道Hawk干吗用的? 这是采集数据的挖掘机,网络猎杀的重狙!半年多以前,沙漠君写了一篇 ...

  7. Python爬虫小白入门(四)PhatomJS+Selenium第一篇

    一.前言 在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页.所以不能够通过页码获取页面的url来分别发送网络请求.我也尝试了其他方式,比如下拉 ...

  8. Python多线程爬虫爬取电影天堂资源

    最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. ...

  9. QQ空间动态爬虫

    作者:虚静 链接:https://zhuanlan.zhihu.com/p/24656161 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 先说明几件事: 题目的意 ...

  10. 让你从零开始学会写爬虫的5个教程(Python)

    写爬虫总是非常吸引IT学习者,毕竟光听起来就很酷炫极客,我也知道很多人学完基础知识之后,第一个项目开发就是自己写一个爬虫玩玩. 其实懂了之后,写个爬虫脚本是很简单的,但是对于新手来说却并不是那么容易. ...

随机推荐

  1. SQL Server 事务日志截断、回绕与收缩(转载)

    每个 SQL Server 数据库都具有事务日志,用于记录所有事务以及每个事务对数据库所做的修改. 必须定期截断事务日志以避免它被填满. 但是,一些因素可能延迟日志截断,因此监视日志大小很重要. 某些 ...

  2. C# EventHandler观察者模式

    C#和java比较: java中使用的是接口.C#使用委托机制,可以用时 + 运算符进行注册,直接多播. 而java中是一般是使用一个集合来保存观察者. 发布者(Publisher)= 被观察者 (O ...

  3. [Linux] TMUX Python版本设置

    TMUX Python版本设置 本地mac的终端已经设置python版本为python3.7, 结果进入tmux时,一直时python2.7. # 本地.bash_profile alias pyth ...

  4. jQuery(三)之 选择器(基础版)

    对于jQuery的调用,我们一般都会传入参数 html: <div></div> js: console.log($('<a />')); console.log( ...

  5. GitHub Vue项目推荐|Vue+Element实现的电商后台管理系统功能丰富

    GitHub Vue项目推荐|mall-admin-web是一个电商后台管理系统的前端项目基于Vue+Element实现 主要包括商品管理.订单管理.会员管理.促销管理.运营管理.内容管理.统计报表. ...

  6. mysql-luster没有data目录

    mysqld --initialize-insecure --user=mysql 直接复制上面这条命令 然后cmd进入到 mysql解压出来bin的目录中: 等待一会  就发发现data的这个目录了 ...

  7. 解决vue多次提交

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <template>  <button @click="subm ...

  8. 国内不fq安装K8S二: 安装kubernet

    目录 2 安装kubelet 2.1 环境准备 2.2 设置国内的源 2.3 重要的设置 2.4 获取镜像 2.5 使用kubeadm init初始化集群 2.6 安装Pod Network 2.7 ...

  9. TI DSP数据长度

    环境CCS7.2 平台C6748 结果: sizeof short int is 2sizeof int is 4sizeof long is 4sizeof unsigned long is 4si ...

  10. 网络服务-SAMBA

    1. Samba 概述 SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内不同操作系统的计算机之间提供文件及打印机等资源的共享 ...