前言
Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,欢迎前来领取!
什么是网络爬虫 网络爬虫又称网络蜘蛛,是指按照某种规则在网络上爬取所需内容的脚本程序。下面是小编为您整理的关于python网络爬虫合法吗,希望对你有所帮助。
python网络爬虫合法吗
随着大数据和人工智能的火爆,网络爬虫也被大家熟知起来;随之也出现一个问题,网络爬虫违法吗?符合道德吗?本文将详细介绍网络爬虫是否违法,希望帮助你解决爬虫是否违法带来的困扰。
网络爬虫大多数情况都不违法
网络爬虫在大多数情况中都不违法,其实我们生活中几乎每天都在爬虫应用,如百度,你在百度中搜索到的内容几乎都是爬虫采集下来的(百度自营的产品除外,如百度知道、百科等),所以网络爬虫作为一门技术,技术本身是不违法的,且在大多数情况下你都可以放心大 胆的使用爬虫技术。
python爬虫技术的选择
爬虫又是另外一个领域,涉及的知识点比较多,不仅要熟悉web开发,有时候还涉及机器学习等知识,不过在python里一切变的简单,有许多第三方库来帮助我们实现。使用python编写爬虫首先要选择合适的抓取模块,最简单的功能就是能发送和处理请求, 下面就介绍几个常用的抓取的方式。
一、python 自带的urlib2和urlib或者第三方模块requests
这种方案适合简单的页面爬虫,比如爬取博客推荐文章。
urllib2和urllib是python自带模块可用来发送处理请求,虽然比较灵活但API易用性较差,所以一般都要进行二次封装,我曾经也进行过封装,最后发现自己封装出来的模块无限趋近于非常成熟的requests库,所以还是直接使用requests吧,当然requests只发送和接受请求,对于页面分析还要配合lxml或beautifulsoup等第三方库进行。高级点的爬虫不仅仅是发送和处理请求,还需要处理异常,请求速度控制等问题,这就需要我们写额外的代码去控制,当然我们可以自己写只是时间问题,但完全没有必要,接下来我会介绍第二种方案。
二、scrapy框架
scrapy是爬虫领取的佼佼者,目前我做的项目无论复杂与否,都采用scrapy进行,对于请求调度,异常处理都已经封装好了,而且有第三方的scrapy-redis还可以支持分布式,我们把关注点放在更重要的页面分析和规则编写上,代码可以参考我github上的例子。
三、python selenium
这种方式我称为终极必杀器,一般是实在没办法的时候才用,以前我在利用某家搜索引擎抓取文章时,该搜索引擎采用的比较高难度的反爬虫机制而且不断变化让人找不到规律,最典型的特点就是cookie会随机隐藏到某个页面js和图片中,解决方案就是模拟浏览器的行为加载所有js等静态资源文件,如果自己写个浏览器取解析太扯蛋了,如果chrome浏览器能开放接口,通过chrome的加载方式获取页面的内容就好了,这就是selenium了,selenium加上随机等待时间可以模拟出和人非常类似的操作行为,缺点就是速度较慢,但是一般爬虫对抓取速度要求不高,重要的是稳定性,这种方式对于抓取反爬虫机制做的好的大型网站比较适用。
总结,对于大部分爬虫需求直接用scrapy解决,如果解决不了再采用第一种或第三种方案,就这么简单。
python爬虫上可以干什么
(1) 不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的网页。
(2)通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。
(3)万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。
(4)通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。
为了解决上述问题,定向抓取相关网页资源的聚焦爬虫应运而生。聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。与通用爬虫(general?purpose web crawler)不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。
反爬虫
1. 基本的反爬虫手段,主要是检测请求头中的字段,比如:User-Agent、referer等。针对这种情况,只要在请求中带上对应的字段即可。所构造http请求的各个字段最好跟在浏览器中发送的完全一样,但也不是必须。
2. 基于用户行为的反爬虫手段,主要是在后台对访问的IP(或User-Agent)进行统计,当超过某一设定的阈值,给予封锁。针对这种情况,可通过使用代理服务器解决,每隔几次请求,切换一下所用代理的IP地址(或通过使用User-Agent列表解决,每次从列表里随机选择一个使用)。这样的反爬虫方法可能会误伤用户。
3. 希望抓取的数据是如果通过ajax请求得到的,假如通过网络分析能够找到该ajax请求,也能分析出请求所需的具体参数,则直接模拟相应的http请求,即可从响应中得到对应的数据。这种情况,跟普通的请求没有什么区别。
4. 基于JavaScript的反爬虫手段,主要是在响应数据页面之前,先返回一段带有JavaScript代码的页面,用于验证访问者有无JavaScript的执行环境,以确定使用的是不是浏览器。
通常情况下,这段JS代码执行后,会发送一个带参数key的请求,后台通过判断key的值来决定是响应真实的页面,还是响应伪造或错误的页面。因为key参数是动态生成的,每次都不一样,难以分析出其生成方法,使得无法构造对应的http请求。