Python爬虫如何避免爬取网站访问过于频繁
一 关于爬虫
爬虫,是一种按照一定的规则自动地抓取互联网信息的程序。本质是利用程序获取对我们有利的数据。
反爬虫,从不是将爬虫完全杜绝;而是想办法将爬虫的访问量限制在一个可接纳的范围,不要让它过于频繁。
二 提高爬虫效率的方法
协程。采用协程,让多个爬虫一起工作,可以大幅度提高效率。
多进程。使用CPU的多个核,使用几个核就能提高几倍。
多线程。将任务分成多个,并发(交替)的执行。
分布式爬虫。让多个设备去跑同一个项目,效率也能大幅提升。
打包技术。可以将python文件打包成可执行的exe文件,让其在后台执行即可。
其他。比如,使用网速好的网络等等。
三 反爬虫的措施
限制请求头,即request header。解决方法:我们可以填写user-agent声明自己的身份,有时还要去填写origin和referer声明请求的来源。
限制登录,即不登录就不能访问。解决方法:我们可以使用cookies和session的知识去模拟登录。
复杂的交互,比如设置“验证码”来阻拦登录。这就比较难做,解决方法1:我们用Selenium去手动输入验证码;方法2:我们用一些图像处理的库自动识别验证码(tesserocr/pytesserart/pillow)。
ip限制。如果这个IP地址,爬取网站频次太高,那么服务器就会暂时封掉来自这个IP地址的请求。 解决方法:使用timesleep()来对爬虫的速度进行限制,建立IP代理池或者使用IPIDEA避免IP被封禁。
写爬虫的小伙伴要注意,爬虫一时爽,但不是一直爬一直爽。
如果你的爬虫触犯了法律,可是要承担责任的哦,那么什么样的爬虫才算是安全的爬虫呢
现在我来结合一下实际情况,给几点建议吧:
1、爬虫访问频次要控制,别把对方服务器搞崩溃了
虽然你爬取的信息都是公开的,也不涉及公民隐私,爬取的数据也不用于违法获利,只是自己弄着玩,但是如果你的爬虫太疯狂了,一分钟请求1万次,导致对方服务器应接不暇,不能处理正常业务了,对不起,你这种属于违法行为,这种爬虫等同于进行黑客攻击了,你让人家不能正常工作了,损害了对方的利益
2、 涉及到个人隐私的信息你不能爬
其实这很好理解,你希望你自己的电话号,身份证号,家庭住址,工作单位,行踪轨迹这些隐私信息被别人用爬虫抓取么当然不希望,别人抓了你的这些信息,你肯定想去报警对不对,让警察去抓那个坏蛋,ok,你不要去做那个坏蛋。
3、 突破网站的反爬措施,后果很严重
正规的网站都会在根目录下放置
robotstxt,这里就规定了哪些能爬,哪些不能爬,谁可以爬。对于那种反爬特别严重的,例如淘宝,你最好别去爬,如果你真的利用你的高智商突破了淘宝的反爬措施,那么恭喜你,你已经违法了。
4、 不要用爬取的数据做不正当竞争
比如你把大众点评的评论数据都爬下来了,然后自己搞了一个xx点评,这肯定不行,人家辛辛苦苦的积累的数据,你轻轻松松的弄下来,直接拿来主义,跟人家搞竞争,你不违法谁违法。
5、 付费内容,你不要抓
既然是付费内容,说明这东西价值很高,付费才能看,你弄下来了,你想干啥你私自传播,就对网站造成了潜在损失。
6、最后一条,突破网站反爬措施的代码,最好不要上传到网上
你技术很牛逼,能突破网站的反爬措施,你把这些代码发布到网上,比如github,你自己没做啥坏事,可是想做坏事的人利用了你的代码,入侵了网站,那么,这种情况下,你也是有责任的,这个听起来有点冤,但确实存在这样的风险,所以,最好还是不要这么干。
通用搜索引擎(Search Engine)工作原理
通用网络爬虫 从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提供支持,它决定着整个引擎系统的内容是否丰富,信息是否即时,因此其性能的优劣直接影响着搜索引擎的效果。
第一步:抓取网页
搜索引擎网络爬虫的基本工作流程如下:
首先选取一部分的种子URL,将这些URL放入待抓取URL队列;
取出待抓取URL,解析DNS得到主机的IP,并将URL对应的网页下载下来,存储进已下载网页库中,并且将这些URL放进已抓取URL队列。
分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环
搜索引擎如何获取一个新网站的URL:
1 新网站向搜索引擎主动提交网址:(如百度http://zhanzhangbaiducom/linksubmit/url)
2 在其他网站上设置新网站外链(尽可能处于搜索引擎爬虫爬取范围)
3 搜索引擎和DNS解析服务商(如DNSPod等)合作,新网站域名将被迅速抓取。
但是搜索引擎蜘蛛的爬行是被输入了一定的规则的,它需要遵从一些命令或文件的内容,如标注为nofollow的链接,或者是Robots协议。
Robots协议(也叫爬虫协议、机器人协议等),全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,例如:
淘宝网:https://wwwtaobaocom/robotstxt
腾讯网: http://wwwqqcom/robotstxt
第二步:数据存储
搜索引擎通过爬虫爬取到的网页,将数据存入原始页面数据库。其中的页面数据与用户浏览器得到的HTML是完全一样的。
搜索引擎蜘蛛在抓取页面时,也做一定的重复内容检测,一旦遇到访问权重很低的网站上有大量抄袭、采集或者复制的内容,很可能就不再爬行。
第三步:预处理
搜索引擎将爬虫抓取回来的页面,进行各种步骤的预处理。
提取文字
中文分词
消除噪音(比如版权声明文字、导航条、广告等……)
索引处理
链接关系计算
特殊文件处理
除了HTML文件外,搜索引擎通常还能抓取和索引以文字为基础的多种文件类型,如 PDF、Word、WPS、XLS、PPT、TXT 文件等。我们在搜索结果中也经常会看到这些文件类型。
但搜索引擎还不能处理、视频、Flash 这类非文字内容,也不能执行脚本和程序。
第四步:提供检索服务,网站排名
搜索引擎在对信息进行组织和处理后,为用户提供关键字检索服务,将用户检索相关的信息展示给用户。
同时会根据页面的PageRank值(链接的访问量排名)来进行网站排名,这样Rank值高的网站在搜索结果中会排名较前,当然也可以直接使用 Money 购买搜索引擎网站排名,简单粗暴。
但是,这些通用性搜索引擎也存在着一定的局限性:
通用搜索引擎所返回的结果都是网页,而大多情况下,网页里90%的内容对用户来说都是无用的。
不同领域、不同背景的用户往往具有不同的检索目的和需求,搜索引擎无法提供针对具体某个用户的搜索结果。
万维网数据形式的丰富和网络技术的不断发展,、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎对这些文件无能为力,不能很好地发现和获取。
通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询,无法准确理解用户的具体需求。
针对这些情况,聚焦爬虫技术得以广泛使用。
Python可以使用第三方库(如requests、BeautifulSoup、Scrapy等)来进行知乎的数据爬取。爬虫是指通过程序自动获取网页上的数据的技术,而反爬虫是指网站为了防止被爬虫程序获取数据而采取的一系列措施。在爬取知乎数据时,需要注意以下几点:1 使用合法的方式进行数据爬取,遵守知乎的相关规定和协议。2 设置合理的爬取频率,避免对知乎服务器造成过大的负担。3 使用合适的请求头信息,模拟真实的浏览器行为,避免被网站识别为爬虫。4 处理反爬虫机制,如验证码、登录等,以确保能够成功获取数据。八爪鱼采集器可以帮助用户自动化完成这些操作,提供了智能识别和自定义采集规则的功能,可以方便地进行知乎数据的爬取和分析。八爪鱼采集器还提供了多种导出数据的方式,方便用户进行后续的数据处理和分析。八爪鱼采集器是一款功能强大的网页数据采集器,可以帮助用户快速、高效地获取各类网站上的数据。如果您需要进行知乎数据的爬取和分析,可以考虑使用八爪鱼采集器。了解更多八爪鱼采集器的功能与合作案例,请前往官网了解更多详情。
相较于爬虫技术,反爬虫实际上更复杂。目前许多互联网企业都会花大力气进行“反爬虫”,网络爬虫不但会占据过多的网站流量,导致有真正需求的用户没法进入网站,另外也有可能会导致网站关键数据的外泄等现象。网络爬虫遍布互联网的各个角落,因此网络爬虫有好处也有坏处,接下来介绍一下和网络爬虫一同诞生的反爬虫技术,如何才能防止别人爬取自己的网站?
1、基于程序本身去防止爬取:作为爬虫程序,爬取行为是对页面的源文件爬取,如爬取静态页面的html代码,可以用jquery去模仿写html,这种方法伪装的页面就很难被爬取了,不过这种方法对程序员的要求很高。
2、基于iptables和shell脚本:可以对nginx的accesslog进行策略定义,例如定义在1分钟内并发连接数超过30个ip为非法,如ip不在白名单内,则加入iptables策略封掉,当然这种的缺点是会有“误伤”,策略细粒度越小就会有更多的“误伤”,细粒度大就会使效果变差,另外还有类似的第三方工具fail2ban,利用做filter和actor对一些有危害的操作记录或是封ip。但是对于某个特定的爬虫地址(例如网易、有道)的爬取行为拒绝也很难准确做到,因为你无法准确知道这些特定的爬虫ip地址。注意:建议不要用封ip条目的方式,iptables列表长度是65535时就会封满,服务器也就会死机。
3使用robotstxt文件:例如阻止所有的爬虫爬取,但是这种效果不是很明显。
User-agent:
Disallow: /
4使用nginx的自带功能:通过对httpuseragent阻塞来实现,包括GET/POST方式的请求,以nginx为例,具体步骤如下:
编辑nginxconf
拒绝以wget方式的httpuseragent,增加如下内容
## Block http user agent - wget ##
if ($http_user_agent ~ (Wget) ) {
return 403;
}
## Block Software download user agents ##
if ($http_user_agent ~ LWP::Simple|BBBike|wget) {
return 403;
平滑启动
# /usr/local/nginx/sbin/nginx -s reload
如何拒绝多种httpuseragent,内容如下:
if ($http_user_agent ~ (agent1|agent2|Foo|Wget|Catall Spider|AcoiRobot) ) {
return 403;
}
大小写敏感匹配
### 大小写敏感http user agent拒绝###
if ($http_user_agent ~ (Catall Spider|AcoiRobot) ) {
return 403;
}
### 大小写不敏感http user agent拒绝###
if ($http_user_agent ~ (foo|bar) ) {
return 403;
}
注意语法:~表示是大小写不敏感,~表示是大小写敏感
}
以上就是预防网站信息被别人爬取的一些方法,大量的爬取行为会对web服务器的性能有影响,所以一定要注重反爬虫措施。
0条评论