浅谈网络爬虫

什么是网络爬虫?

爬虫能干什么

爬虫很简单

爬虫也不简单

爬虫知识储备路线

总结 学习资料

什么是网络爬虫?

啥是网络爬虫(什么是网络爬虫)(1)

爬虫,又称为网页蜘蛛(spider),就是能够在互联网中检索自己需要的信息的程序或脚本。

爬虫,简单的说就是一个http(https)请求,获取到对面网页的源码,然后从网页的源码中抓取自己需要的信息。而html代码的规则是基于xml的,所以可以通过一定解析规则和逻辑完成我们的数据。

爬虫能干什么

爬虫能干的事情比较多,并且有些领域和爬虫都有很大的关联。不同深度,技术的爬虫工作者能干的事情也不同。

搜索引擎

啥是网络爬虫(什么是网络爬虫)(2)

抢票、刷票等自动化软件

啥是网络爬虫(什么是网络爬虫)(3)

部分破解软件

金融等行业数据挖掘、分析数据来源

其他

爬虫很简单

啥是网络爬虫(什么是网络爬虫)(4)

就拿一个csdn的个人主页来说https://blog.csdn.net/qq_40693171

啥是网络爬虫(什么是网络爬虫)(5)

语言的选择

对于python爬虫常用的库有

啥是网络爬虫(什么是网络爬虫)(6)

至于框架,scrapy流行。就不介绍

对于java爬虫常用的库有

啥是网络爬虫(什么是网络爬虫)(7)

至于框架,java的框架比较多,但是流行度却没python的scrapy高。自己可以查询各种框架进行对比。当然自己也可以使用spring mybatis进行封装。如果项目比较大。

两种语言的小demo

对于上面的主页,如果用python来完成数据提取

import requests from bs4 import BeautifulSoup url='https://blog.csdn.net/qq_40693171' req=requests.get(url) res=req.text#html 源码 soup=BeautifulSoup(res,'lxml')#转为bea--对象 node=soup.find(id='mainBox').find_all(attrs={'class':'article-item-box'}) for link in node: value=link.h4 print(value.text)

运行结果

啥是网络爬虫(什么是网络爬虫)(8)

如果用java来完成

package com.bigsai; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; public class test { public static void main(String[] args) throws IOException { String url="https://blog.csdn.net/qq_40693171"; Document doc= Jsoup.connect(url).get(); Elements elements=doc.getElementById("mainBox").select(".article-item-box"); for(Element element:elements) { Element node=element.select("h4").get(0); System.out.println(node.text()); } } }

运行结果

啥是网络爬虫(什么是网络爬虫)(9)

这样,一个简单的爬虫就完成了。是否勾起你对爬虫的兴趣?

爬虫也不简单

爬虫与反爬虫的斗争由此开始。

ip、浏览器头(User-Agent)、和cookie限制

啥是网络爬虫(什么是网络爬虫)(10)

一个http请求要携带很多头信息带给后台,后台也能够获取这些信息。那百度的首页打开F12刷新

啥是网络爬虫(什么是网络爬虫)(11)

需登录的验证码限制、参数限制

啥是网络爬虫(什么是网络爬虫)(12)

有很多数据是开放可以查看的,但是也有很多数据需要注册登录之后才能查看数据的,比如国内的各大招聘网站都需要你先登录然后才能爬取。

啥是网络爬虫(什么是网络爬虫)(13)

啥是网络爬虫(什么是网络爬虫)(14)

对于普通验证码来说,你大致有四个选择。

  1. 绕过验证码,直接手动登录用网站,复制cookie放到请求的去抓取数据。这种最不智能也是最简单的方法。(pandownload就是内置一个浏览器driver然后你手动登录后它获取你的cookie信息然后一波操作)
  2. 将验证码下载到本地(应用),让用户识别填写然后登录。
  3. 通过人工智能和数字图像相关技术,提前训练好验证码识别模型,在遇到验证码时候执行程序识别。对于简单的验证码识别。也有不少开源作品。
  4. 通过打码平台,让第三方专业打码。

而对于滑块以及其他奇葩如滑块,点选等等,那你要么借助第三方,要么就是自己研究其中js运转流程。以及交付方式。算法原理,还是很复杂的。笔者这部分也不是特别了解。只是略知一二。

不仅如此,在登录环节,往往还会遇到一些其他参数的会放到JavaScript里面,这需要你抓到比较。有的还会针对你的数据进行加密传到后台。这就需要你娴熟的js解密能力了。

JavaScript渲染/ajax加密

啥是网络爬虫(什么是网络爬虫)(15)

啥是网络爬虫(什么是网络爬虫)(16)

爬虫知识储备路线

虽然一些高难度的爬虫确实很难,没有一定的工作经验和时间研究确实很难变强。但是我们还是能够通过掌握一些大众知识能够满足生活、学习的日常需求和创意。

1.基础语法:

2.正则和爬虫相关库,以及浏览器F12抓包和Fidder等抓包工具抓包

3.扎实的语法

4. 多线程、数据库、线程安全相关知识。

5. 分布式的概念和知识。

6. js进阶、逆向等知识.

总结

啥是网络爬虫(什么是网络爬虫)(17)

另外,如果文章有说的不好的地方还请大佬指出。我也写过一些爬虫和笔记、还有许多学习资源。如果需要可以参考私聊我。

欢迎关注我的头条号(一直码农一直爽)或者微信公众号(bigsai)。进行交流。

,