reuqest模块及UA反扒机制

摘要:
//网址:sogou.com

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发起请求

reuqest模块及UA反扒机制第1张

所以后续写法:

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)

免责声明:文章转载自《reuqest模块及UA反扒机制》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ORM查询相关web前端学习笔记(CSS变化宽度布局)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

以前整理的网络上免费API接口

以前整理的一些免费的API接口,具体是否好用还需要时间测试,但是先分享给大家。 天气接口 聚合数据: http://op.juhe.cn/onebox/weather/query 用例 官方文档 来源:weather.com 百度接口: http://api.map.baidu.com/telematics/v3/weather?location=嘉兴...

Robots.txt 协议—百度之星

题目描述 搜 索引擎是靠 Web Robot (又称 Spider )来收集互联网上浩如烟海的网页的。 Spider 就像一个旅行家一般,不知疲倦地奔波于万维网的空间,将遇到的页面收集下来供搜索引擎索引。对于一个网站的管理员来说,如果希望搜索引擎只收录自己指定的 内容,或者指定某些不希望搜索引擎访问的内容,该如何去做呢?他需要的就是 Robots Excl...

Django2.0 URL配置详解

转自:https://www.cnblogs.com/feixuelove1009/p/8399338.html Django2.0发布后,很多人都拥抱变化,加入了2的行列。 但是和1.11相比,2.0在url的使用方面发生了很大的变化,下面介绍一下:   一、实例 先看一个例子: from django.urls import path from ....

html状态码

100——客户必须继续发出请求101——客户要求服务器根据请求转换HTTP协议版本   200——交易成功201——提示知道新文件的URL202——接受和处理、但处理未完成203——返回信息不确定或不完整204——请求收到,但返回信息为空205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件206——服务器已经完成了部分用户的GET请求 300—...

微信小程序循环中点击一个元素,其他的元素不发生变化,类似点击一个循环中的语音,其他的不发生点击事件

类似语音,因为都在一个数据内,所以点击第一个,所有的语音都变化,解决方法就是 把整个数据都获取下来,然后更改其中一个需要更改的值,然后再把整个数据都setdata回去,如果需要动画的话,wxml里面放两个组件,一个默认,点击时候隐藏,把另一个显示出来。   例如点击第一个语音,想要播放http://voluntarybanktestapi.wxstar.c...

转:使用xhprof进行线上PHP性能追踪及分析

原文来自于:http://avnpc.com/pages/profiler-php-performance-online-by-xhprof 原创作者:AlloVince 之前一直使用基于Xdebug进行PHP的性能分析,对于本地开发环境来说是够用了,但如果是线上环境的话,xdebug消耗较大,配置也不够灵活,因此线上环境建议使用xhprof进行PHP性能...