我写过的爬虫

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

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

有人问:你不是大废周折吗?直接通过手机浏览器访问不是一样吗?
我回答:你错了,原因有三:
第一,这个网站看起来就像是上个世纪的风格,我的应用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.")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值