我写过的爬虫

个人项目

免责声明:本文章涉及到的应用仅供学习交流使用,不得用于任何商业用途,数据来源于互联网,与本人无关!由此引发的任何法律纠纷与本人无关!

写在前面:我一直在写爬虫,无论是最开始的大学时期的C# WinForm爬虫,还是Java爬虫,又或是Python爬虫,Android爬虫,到今天的Flutter爬虫。

爬虫

1.接口请求式

他们的原理始终都是一样的,那就是:

  1. 设置正常的浏览器User-Agent
  2. 处理好页面内容的缓存,避免相同地址下产生多次请求
  3. 处理好重定向
  4. 通过Chrome浏览器的F12功能进行界面标签的检索,一般找对应内容的class/id/tag等,判断可以根据tag的attribute进行筛选。当然如果Network能直接看到接口地址是最好的
  5. 通过恰当的XML解析库去解析Html标签,或者获取到的接口进行请求即可
  6. 对爬取到的数据进行存数据库或者展示在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.浏览器模拟请求式

当然你也可以跳过这些繁琐的步骤,使用下列方式

  1. 在高级界面平台使用一个现实或者隐藏的WebView
  2. 对浏览器中的源代码进行拦截,在C#中使用WebBrowser,JavaFx中的WebView,Swing中的JWebBrowser,Android中的WebView,或者Flutter中的webview_flutter或者flutter_webview_plugin插件。拦截的方式可以是通过JavaScript桥接的方式进行对页面的输出(Android和Flutter下),或者直接通过API获取C#
  3. 通过这种方式有个好处,那就是不用处理某些网站防爬虫的机制,比如第一个访问的页面仅仅嵌入了一段跳转的代码,而第二个页面又是跳转的代码(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)

这个是一键抢房源的神器,到点自动抢房源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章