个人项目
免责声明:本文章涉及到的应用仅供学习交流使用,不得用于任何商业用途,数据来源于互联网,与本人无关!由此引发的任何法律纠纷与本人无关!
写在前面:我一直在写爬虫,无论是最开始的大学时期的C# WinForm爬虫,还是Java爬虫,又或是Python爬虫,Android爬虫,到今天的Flutter爬虫。
爬虫
1.接口请求式
他们的原理始终都是一样的,那就是:
- 设置正常的浏览器User-Agent
- 处理好页面内容的缓存,避免相同地址下产生多次请求
- 处理好重定向
- 通过Chrome浏览器的F12功能进行界面标签的检索,一般找对应内容的class/id/tag等,判断可以根据tag的attribute进行筛选。当然如果Network能直接看到接口地址是最好的
- 通过恰当的XML解析库去解析Html标签,或者获取到的接口进行请求即可
- 对爬取到的数据进行存数据库或者展示在UI页面上
对于重定向下面有段代码,进行感受下
<html>
<head></head>
<body>
<script language="javascript">var url='';url= '2706' + url;url='_578'+url;url= '2522' + url;url= '9380' + url;url= '3415' + url;url= 'e5' + url;url= '555b' +url;url= '7e2' + url;url= 'd94' + url;url= 'b080' + url;url= '085bda4'+url;url= 'c0bc' + url;url= '=35ba' + url;url= '_CBK' + url;url= 't&_' +url;url= '&f=3&l=' + url;url= '1' + url;url= '='+ url;url= 'p' +url;url='?'+ url;url='sp'+ url;url='/w.a'+ url;;window.location=url;</script>
</body>
</html>
<!--对于这种如果只是短时间爬取请使用正则,如果长期的话,那么需要使用下面这种方式更稳定。
js很灵活,对网页开发人员来说,换这个代码形式是轻而易举的事情-->
2.浏览器模拟请求式
当然你也可以跳过这些繁琐的步骤,使用下列方式
- 在高级界面平台使用一个现实或者隐藏的WebView
- 对浏览器中的源代码进行拦截,在C#中使用WebBrowser,JavaFx中的WebView,Swing中的JWebBrowser,Android中的WebView,或者Flutter中的webview_flutter或者flutter_webview_plugin插件。拦截的方式可以是通过JavaScript桥接的方式进行对页面的输出(Android和Flutter下),或者直接通过API获取C#
- 通过这种方式有个好处,那就是不用处理某些网站防爬虫的机制,比如第一个访问的页面仅仅嵌入了一段跳转的代码,而第二个页面又是跳转的代码(JavaScrip的window.location 或者 meta刷新标签),这是很烦人的处理
这样的方式有好处但是页有缺点,那就是相比第一种会请求很多不必要的资源,比如图片,Js等等文件。所以一般很少有用这种
爬虫项目
1.迅雷账号抓取器(C# WinForm)
2.AD公司所有可申请样片芯片爬取(Java)
3.QQ音乐爬取(Python)
4.NASA图片获取
5.股票实时曲线
Python将数据处理,通过WebSocket传给H5用于展示
6.脚本之家电子书爬虫(Android APP)
7.多个图片网站爬虫(Android)
包含ACG动漫,美女图片资源网站等网站的聚合。
他们都一般形式是Tab分类+列表+图片详情页,接口编程,只需处理解析部分代码
页面是单页一张图片,我们是展示所有图片,并且支持缩放查看大图(不担心OOM),一键下载和分享功能
8.Flutter美女图片爬虫(Flutter)
特点:
- 漂亮的UI,操作更加便捷,手机端查看,支持iOS和Android
- 支持一键下载到文件夹,查看大图,左右滑动切换分类,漂亮的Loading
- 支持浏览器打开,分享功能
电影天堂助手(Flutter)
这或许是个人项目中我做过的最漂亮的APP
特点:
- 漂亮的UI,操作更加便捷,手机端查看,支持iOS和Android;
- UI设计均出自我的手,我本身具有扎实的PS技能和审美功底;
- 支持筛选,搜索,一键唤起迅雷下载(边看边播),这可能是最友好的方案;
- 支持从图片取色,类似Android中的Palette API,来生成详情页的背景色;
- 支持查看网页源码,外部浏览器查看,二维码分享,清空缓存,访问接口数统计等功能
说起这个还是有段曲折的经历,本想通过HttpCanary来抓包,结果接口地址也抓取到了,但是其中有个
x-request-key参数一直摸不着头脑,然后反编译该网站apk,dex2jar,jdui查看,发现这个key来自于本地库so文件中,摸不着头脑,本人缺乏反编译so文件的能力,于是GitHub去搜索了下,发现该网站爬虫最火的那个Android原生应用使用了他们自己修改过的so,且封装成为了Library,可以直接调用,但是我下载Demo后发现,这个接口有频繁访问限制,所以这很影响用户体验,所有我还是使用爬虫式去访问吧。于是做了下面这个APP,此时本人Flutter功底已经相当成熟(这个APP开发到现在只花了48小时时间),Flutter开发很快,对于快速打造一个跨平台又好看的应用十分方便(记得我是2019年12月中才做公司的Flutter项目,那个时候是边做边学,我反对看视频的学习方式,太慢!当你有个多个语言的基础,你会发现那个主系的语言(比如Java)相似的你会学起来很快,而你更多是去学习下Flutter本身的框架结构,和各种Android中的实现方式)。
有人问:你不是大废周折吗?直接通过手机浏览器访问不是一样吗?
我回答:你错了,原因有三:
第一,这个网站看起来就像是上个世纪的风格,我的应用UI水平不能说最好,但是也是我精心打磨,里面包含了我的很多想法,我之前做过很多Logo,海报设计,我对TerribleUI敏感,见过很多好看的页面设计;
第二,我不希望通过浏览器去输入网址,浏览器导航当返回又进入新的页面会重新加载,而我的应用可以直接取缓存,看过的页面不会加载第二次;
第三,我很享受用尽量少的脚本去处理一些繁琐的事情的过程
9.某查查批量查询企业信息并存表格(Python)
10.抢房源(Python)
这个是一键抢房源的神器,到点自动抢房源