reuqest模块及UA反扒机制

requests模块

  • 爬虫中一个基于网络请求的模块
  • pip install requests
  • 作用:模拟浏览器发起请求
  • 编码流程:
    • 1 . 指定url
    • 2 . 发起请求
    • 3 . 获取响应数据(爬取到的页面源码数据)
    • 4 . 进行持久化存储
简单例子:
#指定爬取的url (以搜狗为例)
url = "https://www.sogou.com"
# 发起请求get方法返回值为响应对象
response = requests.get(url=url)
#获取响应数据,由于是对象,所以你需要展示内容有text,json
page_text = response.text
#持久化存储
with open("./zhou.html","w") as f:
	f.write(page_text)   #这里获取的是html代码,所以存储要是html后缀文件,要不然无法读取内容的

实现一个简易网页采集器

  • 基于搜狗针对指定不同的关键字将其对应的页面数据进行爬取
  • 参数动态化:
    • 如果请求的url携带参数,且我们想要将携带的参数进行动态化操作那么我们必须:

      • 1.将携带的动态参数以键值对的形式封装到一个字典中
      • 2.将该字典作用到get方法的params参数中即可
      • 3.需要将原始携带参数的url中将携带的参数删除
keyWord = input(‘enter a key word:‘)
#携带了请求参数的url.如果想要爬取不同的关键字对应的页面,我们徐娅将url携带的参数进行动态化
params ={"query":keyword }
#其实至于携带的参数不是咱们决定的,你得实验看看搜索的时候,搜狗网站的url的变化,由于尝试过了,搜索之后网址会带这/web?query = "zhou"  所以按照他的url发起请求

所以后续写法:

url = ‘https://www.sogou.com/web‘
#params参数(字典):保存请求时url携带的参数
response = requests.get(url=url,params=params)
#此时redponse可以查看到是乱码形式。你只需要修改编码即可持久化储存
#修改响应数据的编码格式
#encoding返回的是响应数据的原始的编码格式,如果给其赋值则表示修改了响应数据的编码格式
response.encoding = ‘utf-8‘  #如果还是乱码可以尝试gbk  gbk2312 等编码
page_text = response.text
fileName = keyWord+‘.html‘
#别忘了存入的时候用utf-8编码
with open(fileName,‘w‘,encoding=‘utf-8‘) as fp:
    fp.write(page_text)
print(fileName,‘爬取完毕!!!‘)
后续发现

处理了乱码。但是页面显示【异常访问】。导致请求失败

异常的访问请求

  • 网站后台已经检测出该次请求不是通过浏览器发起的请求而是通过爬虫程序发起的请求。(不是通过浏览器发起的请求都是异常请求)

网站的后台是如何知道请求是不是通过浏览器发起的呢?

  • 是通过判定请求的请求头中的user-agent判定的

    什么是User-Agent
    • 请求载体的身份标识
    • 什么是请求载体:
      • 浏览器

        • 浏览器的身份标识是统一固定,身份标识可以从抓包工具中获取。
      • 爬虫程序
        • 身份标识是各自不同

反扒机制之一:UA

    • UA检测:网站后台会检测请求对应的User-Agent,以判定当前请求是否为异常请求。
  • 反反爬策略:
    • UA伪装:被作用到了到部分的网站中,日后我们写的爬虫程序都默认带上UA检测操作。
    • 伪装流程:
      • 从抓包工具中捕获到某一个基于浏览器请求的User-Agent的值,将其伪装作用到一个字典中,将该字典作用到请求方法(get,post)的headers参数中即可。
url = ‘https://www.sogou.com/web‘
params={"query":"zhou"}
#带上伪装请求载体。伪装成浏览器的身份
headers ={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"}
response = requests.get(url = url,params=params,headers=headers)
response.encoding="utf-8"
page_text = response.text
with open("homework(3)/zhou.html","w",encoding = "utf-8") as f:
    f.write(page_text)

原文地址:https://www.cnblogs.com/zzsy/p/12687213.html

时间: 2024-10-01 14:43:41

reuqest模块及UA反扒机制的相关文章

如何解决单IP被封后的反扒机制

单IP频繁爬取某网站,很容易被网站的反爬虫机制封掉IP,如何突破限制呢,答案是多IP爬虫.通过多IP爬虫,又分为以下几种形式: 1.通过ADSL拨号换IP.每拨一次就会有一个新IP,较好解决IP单一问题. 2.如果是局域网,带路由器的,第一种方法可能不好用.这个时候可以模拟登陆路由器,控制路由器重新拨号,换IP,这其实是一种折中的办法,曲线救国. 3.代理IP,利用购买的或者网上抓取的免费代理IP,实现多IP爬虫,这种形式是最常见的. 4.分布式爬虫.采用多个服务器,多个IP,多个slave爬虫

常见的反爬机制及应对策略

1.Headers: 从用户的headers进行反爬是最常见的反爬策略,Headers是一种最常见的反爬机制Headers是一种区分浏览器行为和机器行为中最简单的方法,还有一些网站会对Referer (上级链接)进行检测 从而实现爬虫. 相应的解决措施:通过审查元素或者开发者工具获取相应的headers 然后把相应的headers 传输给python 的requests,这样就能很好地绕过. 2.IP 限制 一些网站会根据你的IP 地址访问的频率,次数进行反爬.也就是说如果你用单一的IP 地址访

反爬机制及反反爬策略

1.UA检测 UA,即 User-Agent,是HTTP请求头部信息的一个属性,它是用户访问网站时的浏览器标识,可以通过审查元素或者开发者工具中看到.一些网站通过检测UA从而确定请求的对象是脚本程序还是正常的用户通过浏览器请求,实现反爬虫的目的. 反反爬策略:构造自己的UA池,使得每次用程序向网站发请求时都随机带上正常的UA标识,更好的模拟浏览器行为.有些网站还会有反爬时间或者频率的限制,因此,最好可以再设置一个 timeout ,最好是随机休眠,Python中可以使用 time.sleep()

Python爬虫|深入请求(四)常见的反爬机制以及应对方法

作者:David Qian 链接:https://zhuanlan.zhihu.com/p/21558661 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 大家好!我是厦门大学王亚南经济研究院的大一学生,今天将由我来为大家介绍一下常见的反爬机制以及应对方法. 注:非商业转载注明作者即可,商业转载请联系作者授权并支付稿费.本人已授权"维权骑士"网站(http://rightknights.com)对我在知乎发布文章的版权侵权行为进行追究与维权. ---

反爬虫机制(一)

爬虫用久了,总是会被封的.——鲁迅 有些网站,特别是一些陈年老站,没有做过反爬虫机制的,我们可以尽情地爬,愉快地爬,把它们的底裤..数据全都爬下来.最多出于情怀考虑,我们爬慢一点,不给它的服务器太大压力.但是对于有反爬虫机制的网站,我们不能这样. U-A校验 最简单的反爬虫机制应该是U-A校验了.浏览器在发送请求的时候,会附带一部分浏览器及当前系统环境的参数给服务器,这部分数据放在HTTP请求的header部分. 我们要做的就是通过requests库设置我们的爬虫U-A.一般来说第三方库发送请求

python爬虫---CrawlSpider实现的全站数据的爬取,分布式,增量式,所有的反爬机制

CrawlSpider实现的全站数据的爬取 新建一个工程 cd 工程 创建爬虫文件:scrapy genspider -t crawl spiderName www.xxx.com 连接提取器LinkExtractor 可以根据指定的规则对指定的连接进行提取 提取的规则就是构造方法中的allow('正则表达式')参数决定 规则解析器Rule 可以将将连接提取器提取到的连接进行请求发送,可以根据指定的规则(callback)对请求到的数据进行解析 follow=True:将连接提取器 继续作用到

【爬虫】关于企业信用信息公示系统-加速乐最新反爬虫机制

( ̄▽ ̄)~*又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构. 升级后网站的层次结构并没有太多变化,表面上是国家企业信用信息公示系统 的验证码又升级了.之前是 点按后滑动拼图方式: 现在的验证码主要是按顺序点击图片汉字验证码,但也不排除会出现以前的点按拖动验证码: 验证码的破解这里就不详细介绍了,需要的可以私信我们一起讨论研究下,详细可参考极验验证码破解-源码+破解手册,极验二代和三代验证码破解的方式基本都是一个套路的

[转帖]实时流处理系统反压机制(BackPressure)综述

实时流处理系统反压机制(BackPressure)综述 https://blog.csdn.net/qq_21125183/article/details/80708142 2018-06-15 19:05:37 MasterT-J 阅读数 4808更多 分类专栏: 实时流处理 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_21125183/article/details/8070

Python爬虫实践 —— 1.对反爬机制的认识

51zxw发布了一个新课程,是今年二月份的,现在总算是辞职空下来时间了,想着学习下爬虫吧,反正学了也不亏.爬虫算是最简单的东西了,爬虫背靠数据挖掘.数据分析和机器学习,与大数据和AI相比显得没那么高大上,随便一个程序员都能写一个的小爬虫.可是,在数据封锁隐藏,反爬机制不断深入的今天,如何设计爬虫分布式运行架构.有效高匿的代理池.反封号防屏蔽.清洗存储有效数据.优化爬取策略.结合大数据技术,更有效率有质量地获取数据等等云云,也不是看似那么简单.因为当今世纪,数据即是一切,小小爬虫,一定程度上成为了