爬⾍中常见的问题,常见的反爬机制
原⽂来源:
fopen和open区别
1.请求头之User-agent
这个稍微接触过⼀点点爬⾍的应该都不陌⽣,不是说接触Python爬⾍,不管你⽤什么开发语⾔来写爬⾍,应该都会⽤到这个。⼤概解释⼀下,就是⼀个⾝份的象征,这个可以⽤浏览器⾃带的调试⼯具查看,访问⼀个⽹站的时候,按f12键或者⿏标右键打开调试(有的浏览器叫检查,或者查看元素),然后切换到network(⽹络),重新刷新⼀次⽹站,就会出现所有的请求,随机点击⼀个,右边出现的就是请求头信息了,如下,这是我访问某某⽹站的,我使⽤的浏览器是⽕狐,然后图上标注的就是user-agent
具体怎么⽤呢?
⽐如:
这样就可以带上UA了
simulink仿真长时间无法终止如果不带的话,你的⽬标⽹站服务端是可以检测到是浏览器还是爬⾍⼯具在访问数据的,就看你的⽬标⽹站的友好度了,如果反爬机制做的很⾼效,到这⾥你就被ban了。
2.调试⼯具之痛
很多时候我们为了查看⽹页的DOM结构可能就直接⽤浏览器⾃带的调试⼯具(就是上⾯说的按f12键)来查看,这个的话,⼤部分⽹页是可以应对的,但是,少部分⽹站⽤调试⼯具查看的DOM结构和整个⽹页的源码是不⼀致的,说个最近的事,我爬某视频⽹站,调试⼯具打开他在每个重要信息都加了⼀个css样式,这个css样式是通过定位某个html标签(假设为<span></span>标签)设置上的,我解析⽹页的时候就很痛苦,调了很久,就是得不到结果,最后发现这个span标签是⽤js拼接上的,换句话说,服务端回应的是不带有这个span标签的,所以就要没有这个span标签来处理。说这么多不知道看官您能不能理解,遇到过这个问题的朋友应该明⽩我在说什么
3.异步请求
上⾯说的DOM结构不⼀致还有⼀种可能,就是前后端⽤的Ajax异步请求的,所以你打开浏览器的调试⼯具查看DOM结构和你⽤Python获取的结果也是不⼀致的,这个相信会玩爬⾍的⽼哥们都不陌⽣
4.请求头之Cookies
有⼀部分⽹站,当你访问⾸页时,会⾃动设置⼀个cookie,然后访问同站下的其他页⾯就会验证这个字段,如果不匹配就会禁⽌访问reactnative实战教程
如下,访问百度都会⾃动设置⼀些cookie:
5.请求头之特殊字段
特殊字段是什么呢,就是某⽹站特有的⼀些字段,⽐如以下的boss直聘⽹:
compare破解永久
会带有这些特殊的字段。当然这⾥只是举个例⼦,,经过我的测试,我圈出来的那⼏个[:method]等的字段其实请求的时候是不⽤带上的6.请求头之Referer
这个referer是⼲嘛的呢?⾸先该字段的值都是上⼀级⽹站的url,根据我的理解,它有以下作⽤:
  1.做前端的朋友知道,可以借⽤这个字段直接返回到上个页⾯
  2.还可以通过这个追踪流量来源,⽐如某某公司在百度上做了SEO(打了个推⼴⼴告),当⽤户通过百度点进来的话,就可以通过referer追踪来源,对⽤户做进⼀步的⾏为分析
  3.检测来源的合法性,因为都可以知道通过某某url路径过来的,那么就可以判断来源是否合法,如果异常的话就可以做拦截请求等等的
有的⽹站就是因为有这个验证,所以返回的数据不正常,带上就OK了。还有的⽹站更奇怪,你不带上也不会报错,返回的数据也是希望的数据,但是⽆法和页码匹配,⽐如你请求的是第⼀页的数据,它有可能返回的是第5页的数据
7.请求头之accept:
不知道⽼哥您遇到过这个问题没有,在请求头⾥,如果服务端返回的结果是普通的html页⾯的话,值就应该是如下的:'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
python请求并解析json数据
如果返回的是json字符串(返回json字符串的话,往往是属于异步请求)的话,值就应该是这个:
'Accept': 'application/json, text/javascript, */*; q=0.01',
这个不知道你们有没有体会,反正我记得我爬某⽹站的时候,因为都通⽤的同⼀个请求头,有的⽹站就是返回json数据,我怎么改代码都⽆法得到正确的值,就是因为本来是json字符串的我的accept⽤的上⾯的html页⾯⽤的,导致返回数据不符合事实。
8.请求头之Connection
这个字段字⾯意思就是http连接嘛,http链接最根本的就是tcp/ip连接了,什么三次握⼿,四次握⼿之类的,这些就不展开了,要说就占篇幅了。我们都知道,http请求属于短连接,访问就有,关闭浏览器就会⾃动断开的,这种就是短连接,对应的长连接就是websocket,这个就不展开了,⾃⾏百度了。这个Connection字段有两个值,⼀个是keep-alive,⼀个是close,keep-alive的话往往就跟前⾯的带有cookie 相关,他会保存session会话(如果关闭浏览器的话就没了,有的⽹站是保存⼀个字段,默认有⼏天的有效期),作为同⼀个连接来请求另⼀个页⾯,如果是close的话,就是每次访问都是重新和服务端建⽴⼀个连接,不会保存session
这个问题的话,在⼀般情况下还是不会遇到,主要就是在⾼并发请求的时候,有可能同⼀个时刻请求多次来⾃同⼀个站点的数据,触发该⽹站的反爬机制的频率限制,就会出现什么scoket.timeout,tion.HTTPConnection之类的错误。所以从那次之后我的爬⾍程序如果⽤了⾼并发的话,我都会把这个connection设置为close
9.返回数据gzip
>item的中文意思

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。