学习爬虫之前,我们首先得了解什么是爬虫。 来自于百度百科的解释:
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
通俗来讲,假如你需要互联网上的信息,如商品价格,图片视频资源等,但你又不想或者不能自己一个一个自己去打开网页收集,这时候你便写了一个程序,让程序按照你指定好的规则去互联网上收集信息,这便是爬虫,我们熟知的百度,谷歌 等搜索引擎背后其实也是一个巨大的 爬虫。
可能很多小伙伴都会有这个疑问,首先爬虫是一门技术,技术应该是中立的,合不合法其实取决于你使用目的,是由爬虫背后的人来决定的,而不是爬虫来决定的。
一般来说只要不影响人家网站的正常运转,也不是出于商业目的,人家一般也就只会封下的IP,账号之类的,不至于法律风险。
其实大部分网站都会有一个robots协议,在网站的根目录下会有个robots.txt的文件,里面写明了网站里面哪些内容可以抓取,哪些不允许。
以淘宝为例——https://www.taobao.com/robots.txt
当然robots协议本身也只是一个业内的约定,是不具有法律意义的,所以遵不遵守呢也只能取决于用户本身的底线了。
很多人提到爬虫就会想到Python,其实除了Python,其他的语言诸如C,PHP,Java等等都可以写爬虫,而且一般来说这些语言的执行效率还要比Python要高,但为什么目前来说,Python渐渐成为了写很多人写爬虫的第一选择,我简单总结了以下几点:
官方中文文档:https://2.python-requests.org/zh_CN/latest/;
requests 应该是用Python写爬虫用到最多的库了,同时requests也是目前Github上star?最多的Python开源项目。 requests 在爬虫中一般用于来处理网络请求;
接下来会用通过简单的示例来展示requests的基本用法:
当我们通过requests获取到整个页面的html5代码之后,我们还得进一步处理,因为我们需要的往往只是 整个页面上的一小部分数据 ,所以我们需要对页面代码html5 解析然后筛选 提取出我们想要的数据,这时候 beautifulsoup 便派上用场了。beautifulsoup之后 通过标签+属性的方式来进行定位 ;
比如说我们想要爬取百度的logo,我们查看页面的html5代码,我们可以发现logo图片是在一个div的标签下,然后 class=index-logo-srcnew 这个属性下。
所以我们如果需要定位logo图片的话便可以通过div和class=index-logo-srcnew来进行定位。下面也会提供一些简单的示例来说明beautifulsoup的基本用法:
打印结果如下:
这边可以分享一个小技巧,以前我刚开始写爬虫的时候,寻找代码里面的信息都是先去把整个页面给down下来,然后再在里面Ctrl+F查找,其实大部分浏览器都提供了很简单的方法来定位页面代码位置的,这边会以Chrome浏览器为例。
为了方便理解录制了一个gif,具体步骤如下:
目前很多网站上的信息都是通过 Ajax 动态加载的;
比如当你翻看某电商网站的评论,当你点击 下一页 的时候,网址并没发生变化,但上面的评论都变了,这其实就是通过Ajax动态加载出来的;
这里的下一页序序按钮并不是指向另外一个页面,而是会在后台发送一个请求,服务器接收到这个请求之后会在当前页面上渲染出来;
其实我自己是比较偏爱爬这种类型的数据的,因为统计Ajax请求返回来的数据都是非常规整的json数据,不需要我们去写复杂的表达式去解析了;
接下来我们将会通过一个 拉勾网职位信息的爬虫 来说明这类网站的爬取流程: