我写过的爬虫

    技术2025-01-20  16

    免责声明:本文章涉及到的应用仅供学习交流使用,不得用于任何商业用途,数据来源于互联网公开内容,没有获取任何私有和有权限的信息(个人信息等)。由此引发的任何法律纠纷与本人无关!禁止将本文技术或者本文所关联的Github项目源码用于任何目的。

    写在前面:我一直在写爬虫,无论是最开始的大学时期的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,来生成详情页的背景色;支持查看网页源码,外部浏览器查看,二维码分享,清空缓存,访问接口数统计等功能

    有人问:你不是大废周折吗?直接通过手机浏览器访问不是一样吗? 我回答:你错了,原因有三: 第一,这个网站看起来就像是上个世纪的风格,我的应用UI水平不能说最好,但是也是我精心打磨,里面包含了我的很多想法,我之前做过很多Logo,海报设计,我对TerribleUI敏感,见过很多好看的页面设计; 第二,我不希望通过浏览器去输入网址,浏览器导航当返回又进入新的页面会重新加载,而我的应用可以直接取缓存,看过的页面不会加载第二次; 第三,我很享受用尽量少的脚本去处理一些繁琐的事情的过程

    9.某查查批量查询企业信息并存表格(Python)

    10.抢房源(Python)

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

    11.央视纪录片爬取

    支持生成csv表格

    import requests,csv def write(programs): with open("dic.csv",'a',newline='',encoding='utf-8-sig') as datacsv: csvwriter = csv.writer(datacsv,dialect={'excel'}) for l in programs: csvwriter.writerow([l['vsid'],l['relvsid'],l['name'],l['fl'],l['desc'],l['sbsj'],l['url'],l['img'],l['cd'],l['zy'],l['bj'],l['dy'],l['js'],l['nf'],l['yz'],l['playdesc']]) def get_data(index): url = "http://api.cntv.cn/videoset/vsetlist" req = requests.get(url=url,params={'serviceId':'cbox','cid':'CN08','l':'','p':index,'z':''}) if req.status_code == 200: j = req.json() if 'errcode' in j: return False else: print(j) write(j['list']) return True else: print("Error:"+req.url) return False if __name__ == "__main__": with open("dic.csv",'a',newline='',encoding='utf-8-sig') as datacsv: csvwriter = csv.writer(datacsv,dialect={'excel'}) csvwriter.writerow(['vsid','relvsid','name','fl','desc','sbsj','url','img','cd','zy','bj','dy','js','nf','yz','playdesc']) for i in range(1,100): res = get_data(i) if not res: print("Error at "+str(i)) break print(str(i)+" is finished.")
    Processed: 0.012, SQL: 9