程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

模块(0)

标准库(0)

标签  

标准库模块(0)

字符串(0)

日期归档  

python面试题之常见的反爬虫的应对方法

发布于2018-12-29 10:09     阅读(6921)     评论(0)     点赞(169)     收藏(186)


  • 通过 Headers 反爬虫,从用户请求的 Headers 反爬虫是最常见的反爬虫策略。很多网站都 会对 Headers 的 User-Agent 进行检测,还有一部分网站会对 Referer 进行检测(一些资源网站的防盗链就是检测 Referer)。如果遇到了 这类反爬虫机制,可以直接在爬虫中添加 Headers,将浏览器的 User-Agent 复制到爬虫的 Headers 中;或者将 Referer 值修改为目 标网站域名。对于检测 Headers 的反爬虫,在爬虫中修改或者添加 Headers 就能很好的绕过。
  • 基于用户行为反爬虫
    还有一部分网站是通过检测用户行为,例如同一IP 短时间内多次访问同一页面,或者同一账户短时间内多次进行相同操作。 大多数网站都是前一种情况,对于这种情况,使用 IP 代理就可以 解决。可以专门写一个爬虫,爬取网上公开的代理 ip,检测后全部 保存起来。这样的代理 ip 爬虫经常会用到,最好自己准备一个。有 了大量代理 ip 后可以每请求几次更换一个 ip,这在 requests或者 urllib2 中很容易做到,这样就能很容易的绕过第一种反爬虫。
    对于第二种情况,可以在每次请求后随机间隔几秒再进行下一次请 求。有些有逻辑漏洞的网站,可以通过请求几次,退出登录,重新登 录,继续请求来绕过同一账号短时间内不能多次进行相同请求的限制。
  • 动态页面的反爬虫
    上述的几种情况大多都是出现在静态页面,还有一部分网站,我们 需要爬取的数据是通过 ajax 请求得到,或者通过 JavaScript 生成的。 首先用 Fiddler 对网络请求进行分析。如果能够找到 ajax 请求,也 能分析出具体的参数和响应的具体含义,我们就能采用上面的方法,直接利用 requests 或者 urllib2 模拟 ajax 请求,对响应的 json 进 行分析得到需要的数据。
  • 能够直接模拟 ajax 请求获取数据固然是极好的,但是有些网站把 ajax 请求的所有参数全部加密了。我们根本没办法构造自己所需要 的数据的请求。这种情况下就用 selenium+phantomJS,调用浏览器 内核,并利用 phantomJS 执行 js 来模拟人为操作以及触发页面中的 js 脚本。从填写表单到点击按钮再到滚动页面,全部都可以模拟, 不考虑具体的请求和响应过程,只是完完整整的把人浏览页面获取数 据的过程模拟一遍。


所属网站分类: 技术文章 > 博客

作者:追梦骚年

链接:https://www.pythonheidong.com/blog/article/109/3b8598eddfbc1b3d67f4/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

169 0
收藏该文
已收藏

评论内容:(最多支持255个字符)