Time will tell.

1、什么是爬虫和反爬虫

爬虫是使用任何技术手段批量获取网站信息的一种方式,反爬虫是使用任何技术手段阻止别人批量获取自己网站信息的一种方式。

2、User-Agent介绍

User Agent 中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,User Agent 也简称 UA 。它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识;

User-Agent 是 headers 中的一个属性,表示当前访问服务器的身份信息,如果同一个身份过于频繁的访问服务器会被识别为机器身份,遭到反爬的打击,所以需要频繁的更改 User-Agent 信息;

User-Agent 字段解析:浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息。

3、使用不同的User-Agent来规避反爬策略

想要随机更改 User-Agent ,首先我们可以在蜘蛛文件的 Spider 类中添加一个 header 请求头,很多网站只需要 userAgent 信息就可以通过,但是有的网站还需要验证一些其他的信息,所以我们可以在请求头中添加一些需要用到的字段,比如:

  • Accept:客户端支持的数据类型,用逗号隔开,是有顺序的,分号前面是主类型,分号后是子类型;

  • Accept-Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型;

  • Accept-Language:浏览器可接受的自然语言的类型;

  • Connection:设置 HTTP 连接的持久化,通常都是 Keep-Alive ;

  • host:服务器的域名或IP地址,如果不是通用端口,还包含该端口号;

  • Referer:指当前请求的 URL 是在什么地址引用的。

headers = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.9','Connection': 'keep-alive','host': 'dribbble.com/stories','Referer': 'https://dribbble.com/',}

添加完请求头需要的字段,我们可以在settings.py 文件中手动创建一个 User-Agent 列表

user_agent_list = ["Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16","Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14","Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.14","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14","Opera/12.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.02","Opera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00","Opera/9.80 (Windows NT 5.1; U; zh-sg) Presto/2.9.181 Version/12.00","Opera/12.0(Windows NT 5.2;U;en)Presto/22.9.168 Version/12.00","Opera/12.0(Windows NT 5.1;U;en)Presto/22.9.168 Version/12.00","Mozilla/5.0 (Windows NT 5.1) Gecko/20100101 Firefox/14.0 Opera/12.0","Opera/9.80 (Windows NT 6.1; WOW64; U; pt) Presto/2.10.229 Version/11.62","Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.10.229 Version/11.62","Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52","Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; de) Presto/2.9.168 Version/11.52","Opera/9.80 (Windows NT 5.1; U; en) Presto/2.9.168 Version/11.51","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; de) Opera 11.51","Opera/9.80 (X11; Linux x86_64; U; fr) Presto/2.9.168 Version/11.50","Opera/9.80 (X11; Linux i686; U; hu) Presto/2.9.168 Version/11.50","Opera/9.80 (X11; Linux i686; U; ru) Presto/2.8.131 Version/11.11","Opera/9.80 (X11; Linux i686; U; es-ES) Presto/2.8.131 Version/11.11","Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/5.0 Opera 11.11","Opera/9.80 (X11; Linux x86_64; U; bg) Presto/2.8.131 Version/11.10","Opera/9.80 (Windows NT 6.0; U; en) Presto/2.8.99 Version/11.10","Opera/9.80 (Windows NT 5.1; U; zh-tw) Presto/2.8.131 Version/11.10","Opera/9.80 (Windows NT 6.1; Opera Tablet/15165; U; en) Presto/2.8.149 Version/11.1","Opera/9.80 (X11; Linux x86_64; U; Ubuntu/10.10 (maverick); pl) Presto/2.7.62 Version/11.01",]

然后在项目中创建一个utils.py文件,在这个文件中自定义一个随机函数:

import randomdef get_randam_int(lst):return random.randint(0, len(lst)-1)

最后修改蜘蛛文件中的parse()方法,导入相关模块,调用自定义的随机函数生成随机 User-gent 添加到 headers 请求头中;

def parse(self, response):headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.9','Connection': 'keep-alive','host': 'dribbble.com','Referer': 'https://dribbble.com/',}random_index = get_randam_int(user_agent_list)random_agent = user_agent_list[random_index]headers['User-Agent'] = random_agenta_nodes = response.css('header div.teaser a')for a_node in a_nodes:# print(a_node)a_url = a_node.css('::attr(href)').extract()[0]a_image_url = a_node.css('img::attr(src)').extract()[0]yield Request(headers=headers,url=parse.urljoin(response.url, a_url), callback=self.parse_analyse, meta={'a_image_url': a_image_url})

好了,以上就分享到这里,如果你对更多内容、Python自动化软件测试、面试题感兴趣的话可以加入我们175317069一起学习。群里会有各项测试学习资源发放,更有行业深潜多年的技术人分析讲解。

欢迎【点赞】、【评论】、【关注】~

Time will tell.(时间会证明一切)

“你有张良计,我有过墙梯” 几行Python代码突破反爬虫机制!相关推荐

  1. python代码图片头像_60行Python代码一键拼出你的微信好友图片墙!

    原标题:60行Python代码一键拼出你的微信好友图片墙! 源 /高级农民工文 /苏克1900 近 2000 位好友的头像拼图,有没有犯密集恐惧症?这并不震撼,如果你有 5000 位好友的话,做出来的 ...

  2. 90行Python代码,让张小龙的微信地球转起来

    作者 | xiaorang 来源 | 数据分析与统计学之美 1.微信地球 手机重启后打开微信的一瞬间,会看到一幅有名的图片,上面站着一个张小龙. 你可曾想过这样一个问题,如果上面那个地球转起来会是怎样 ...

  3. 10 行 Python 代码,批量压缩图片 500 张,简直太强大了

    这几天,我在用 Github page + hexo 搭建个人网站,为了延续风格,就想把配图与文章一起迁移过去.这时候就出现了一个难题:我所用的图片都是高清大图,放到网站上会严重拖慢加载速度.因此,需 ...

  4. python识别人脸多种属性_深度学习人脸识别仅9行python代码实现?同时高效处理100张相片?...

    随着人脸识别.视频结构化等计算视觉相关技术在安防.自动驾驶.手机等领域走向商业化应用阶段,计算视觉技术行业市场迎来大规模的爆发.伴随人脸识别.物体识别等分类.分割算法不断提升精度.计算视觉的核心算法深 ...

  5. 用10行Python代码画了一张惊艳的山峦图

    山峦(山脊线)图,英文名叫Ridge plot ,看上去真得很像山的脊背⛰,还有一个好听的名字Joy Plots,因为Joy Division

  6. 贪吃蛇python撞墙不死_不敢相信,60行python代码就写出了贪吃蛇游戏

    通过写游戏玩编程是一个非常有趣的事,网上用Python写贪吃蛇的代码很多,大部分都用类来写的,比较复杂.今天看到一个非常简洁的贪吃蛇游戏代码,只有60几行,非常适合小白上手,而且思路极其清晰,赶紧分享 ...

  7. AI的张良计与过墙梯:3·15智能骚扰电话下的冰山脉络

    在今年的3·15上,果不其然AI被点名了.抛去属于"质量问题"的虚假智能产品以外,更引人关注还要数"智能骚扰电话".相关报道提到,一些所谓的"大数据企 ...

  8. 你有张良计,我有过墙梯——ListBox的悲与喜

    意图:通过点击ListBox,GridView表格切换数据源,显示不同的数据表格. 最初,我起了一些Javascript代码,收效甚微,加之不好调试,又恐耽搁进度.没有办法,找了个最笨的方法,也算是过 ...

  9. #今日论文推荐#Ladder Side-Tuning:预训练模型的“过墙梯”

    #今日论文推荐#Ladder Side-Tuning:预训练模型的"过墙梯" 如果说大型的预训练模型是自然语言处理的"张良计",那么对应的"过墙梯&q ...

最新文章

  1. 互联网10年,激战如梦
  2. 特征工程之统计变换:对数+百分位秩+取Rank+Tukey打分+BoxCox+Percentile Rank
  3. 只有程序员才懂的手势 | 每日趣闻
  4. ajax技术运用案例,第12篇:Ajax技术与项目案例
  5. SortedMap接口
  6. NSIS 的 Modern UI 教程(二)
  7. char强制类型转换为int_C语言学习第5篇---类型转换概念理解
  8. curPos和tgtPos
  9. 一、css清除浮动方法学习笔记总结(超详细,简单易懂)
  10. 【CSS】学习笔记1 使用CSS样式表
  11. win7、offcie 2010是否激活查看方法
  12. 双指针 -- 替换空格
  13. pycharm下自建python包引入失败解决方案
  14. iOS 10 的一个重要更新-线程竞态检测工具 Thread Sanitizer
  15. VC++_2010_学习版_未能下载以下组件解决方案和microsoft应用程序错误报告
  16. html和js制作个人所得税表格,用JS编写个人所得税计算器
  17. Minecraft 材质包制作入门 保姆级教程 (一)
  18. android标题栏 状态栏,android设置无标题栏 、 状态栏
  19. Unity切割图片:把一张图片中的物体裁成多个单独的游戏物体
  20. Casbin明日之星预选生计划-Talent for Casbin 2021(长期招聘)

热门文章

  1. 微信小程序获取用户信息(getUserProfile接口回收后)——通过头像昵称填写获取用户头像和昵称
  2. 东财《社会保险X》综合作业
  3. 区块链加速产业革命,打造畜禽养殖业发展新途径
  4. 阿里巴巴天池机器学习(数据分析达人赛3:汽车产品聚类分析)
  5. 站在摩登天空下 :)
  6. RocketMQ集群部署记录
  7. 苹果手机误删照片怎么恢复?这些方法太好用了
  8. Bootstrap File Input,最好用的文件上传组件
  9. 查看文件夹下子文件夹的大小
  10. 华为手机吃鸡隐藏功能android,什么蓝牙耳机适合华为手机?超低延迟吃鸡蓝牙耳机安卓苹果通用...