一些网站会设置一些反爬策略来限制爬取数据,所以就需要让爬虫伪装成浏览器取爬取数据

常见的反爬机制主要有,分析用户请求的Headrest信息反爬、检测用户行为比如同一IP频繁访问网站、页面的动态加载反爬,

第一种比较常见,本章也主要记述这一种反爬的应对方法,就是User-Agent字段进行检测,当然除了这个字段还会检测其他字段,我们就通过程序伪装一个headers信息

第二种用代理服务器也可以解决

第三种就需要借助一些工具软件了

Fiddler

要伪造headrest信息就得先知道这个信息是什么样的,这个我们可以用Fiddler来进行抓包分析,这个软件可以到官网下载安装

使用前需在浏览器上设置代理服务器

右侧的就是拿到的headers信息,这里简单介绍一下这几项的含义

Accept 主要用来表示浏览器能够支持的内容类型,p代表权重数介于0和1之间

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.

Accept-Encoding字段主要表示浏览器可以支持的压缩编码有哪些,因为从网站请求回的数据其实是一个个的压缩数据包需要解压才能读取

Accept-Encoding: gzip, deflate, sdch

Accept-Language字段表示浏览器支持的语言类型,zh-CN是中文,en-US英语美国,en英语

Accept-Language: zh-CN,zh;q=0.8

User-Agent字段主要表示用户代理,服务器可以从这个字段识别出客户端的浏览器类型、版本、客户端的操作系统和版本号、页面排版等信息

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36

Connection字段表示客户端与服务器的链接类型,有持久链接和单方面关闭链接,让连接断开。下面这个是持久链接

Connection: keep-alive

Host字段是服务器的主机域名或网址

Host: www.youku.com

Referer字段表示来源网址地址,比如从www.youku.com网址中访问它下面的一个二级页面,那这时来源网址就是www.youku.com

Referer: http://www.so.com/link?m=aA%2FPN0aNgCf2wtuVBZk%2FDaOweq2IuAfGOGbQk5hQZqEZIJcWdlpC%2F85Lj%2BMQTElZpU1qaH6Oz6CTllMIMsLCpcDJM0JIVDXM

好了,现在让我们开始编写伪装浏览器的程序

import urllib.request
import http.cookiejarurl='http://war.163.com/photoview/4T8E0001/2281894.html'
#以字典形式设置hesders,格式是[(字段名,字段值),(字段名,字段值)],这里先用字典,在下面会用for把它转为列表元组的形式
h={'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Language':'zh-CN,zh;q=0.8','User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36','Connection':'keep-alive','referer':'http://www.163.com/'}
#设置cookie
cj=http.cookiejar.CookieJar()
proxy=urllib.request.ProxyHandler({'http':'127.0.0.1:8888'})#这里设置代理服务器是为了方便Fiddler抓包,实际可以这里可以省去
op=urllib.request.build_opener(proxy,urllib.request.HTTPHandler,urllib.request.HTTPCookieProcessor(cj))#将代理服务器和headrest信息,作为一个对象赋给op
headall=[]#建立空列表,构造出指定格式的headers信息
for key,value in h.items():#循环字典h,每次循环提取一个键值对item=(key,value)#把提取到的键值对,做成元组赋予itemheadall.append(item)#添加到列表中
op.addheaders=headall #将指定格式的headrest信息添加好
urllib.request.install_opener(op)#安装为全局,下面直接用urllib时就自动把op的对象加进去了
print(headall)data=urllib.request.urlopen(url).read()
f=open('D:/AuI18N/5.html','wb')
f.write(data)
f.close()

其实这个网页没有设置反爬设置,我把设置headrest信息的部分全部注释掉,一样可以爬到数据,但是在真实爬取网页时,你并不知道那是网站有反爬策略那些网站没有反爬策略,所以为了保险就都把伪装的部分加上

需要注意的几点:

1)代码里没有设置Accept-Encoding字段,如果设置为gzip或deflate就可能报错,此时改成utf-8或gb2312就好了,或者干脆不设置这个字段信息,因为入设置了压缩编码,那么请求的数据就是压缩数据包需要解压才行,但这是伪装的浏览器没有解压功能的程序,所以就不用多此一举

2)用Fiddler做代理服务器爬取网页时,网址要以具体文件名或者‘/’结尾

3)referer字段一般设置为要爬取网页的域名地址或对应网站的主页

python爬虫浏览器伪装相关推荐

  1. python爬虫浏览器伪装和设置代理ip

    1.python爬虫浏览器伪装 #导入urllib.request模块 import urllib.request#设置请求头 headers=("User-Agent",&quo ...

  2. Python 爬虫浏览器伪装技术

    浏览器伪装技术实战 1 网站常见的反爬虫和应对方法 一般网站从三个方面反爬虫:用户请求的Headers,用户行为,网站目录和数据加载方式. 前两种比较容易遇到,大多数网站都从这些角度来反爬虫.第三种一 ...

  3. python网络爬虫--浏览器伪装

    一.爬虫前言 在我们爬取一些网页的时候可能会失败,因为这写网站为了防止恶意爬虫的访问,会设置一些爬虫机制,常见的爬虫机有: (1)通过分析用户请求的Headers信息进行反爬虫 (2)通过检测用户行为 ...

  4. python爬虫之伪装浏览器

    问题描述:File "D:\python\Lib\httplib.py", line 417, in _read_status                         ra ...

  5. Python爬虫——浏览器实现抓包过程详解

    几乎所有浏览器都提供了抓取数据包的功能,因为浏览器为抓包提供了一个专门的操作界面,因此这种抓包方式也被称为"控制台抓包".下面以 Chrome 浏览器为例进行抓包演示. 控制台抓包 ...

  6. python伪装浏览器什么意思_python浏览器伪装

    https://www.jb51.net/article/139587.htm python爬虫浏览器伪装 1. #导入urllib.request模块 import urllib.request # ...

  7. python伪造浏览器请求头_python浏览器伪装

    https://www.jb51.net/article/139587.htm python爬虫浏览器伪装 1. #导入urllib.request模块 import urllib.request # ...

  8. 简述python爬虫_python爬虫入门篇了解

    1. 爬虫分类: 1.1 通用爬虫:例如搜索引擎:无差别的收集数据:提取存储关键字:构建索引库:给用户提供搜索接口. 1.2 聚焦爬虫:有针对性的编写特定领域数据的爬取程序. 2. Robots协议: ...

  9. Python爬虫 爬取豆瓣电影TOP250

    Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...

最新文章

  1. Java系列笔记(1) - Java 类加载与初始化
  2. Ubuntu linux 关机、重启、注销 命令
  3. Basic操作系统概念梳理
  4. 基于.NetCore3.1搭建项目系列 —— 使用Swagger做Api文档(上篇)
  5. linux批量去掉文件名前缀,linux 批量删除某个前缀文件
  6. [BZOJ 5072]小A的树
  7. 百度的一道 java 高频面试题的多种解法
  8. 第二:HttpClient+testNG实现对接口的测试及校验(接口自动化落地)
  9. 查询阜阳2021高考成绩,今年阜阳高考状元名单是谁,2021年阜阳高考状元多少分
  10. scala求集合相邻元素差值的最小值
  11. 「べきだ」、「わけだ」、「はずだ」在使用中,都有“ 应该 ”的含意
  12. 【java】程序初始化顺序
  13. Ext学习笔记01 - NameSpace,类实例属性,类实例方法,类静态方法
  14. 酷开科技 × StarRocks:统一 OLAP 分析引擎,全面打造数字化的 OTT 模式
  15. 应届生简历如何写实习经历?
  16. C语言丨筛法求素数(质数)
  17. WindowsServer2012R2 SSL/TLS 受诫礼(BAR-MITZVAH)攻击漏洞(CVE-2015-2808)解决办法
  18. js 鼠标悬浮div显示tip,离开tip消失,不用单独写鼠标离开事件
  19. APISpace 静态活体检测API
  20. 计算机人工智能分数,分数一般想学人工智能?这6所双一流大学是首选

热门文章

  1. 罗克韦尔自动化启用位于硅谷的新建电动汽车创新中心
  2. 201771010137 赵栋 《面向对象程序设计(java)》第十三周学习总结
  3. 阅读笔记之《DisenQNet: Disentangled Representation Learning for Educational Questions》
  4. 标准库:csv --- CSV 文件读写
  5. vim的替换字符串的命令
  6. Sql Server 存储过程 循环处理字符串的每个字符
  7. ubuntu 搜狗输入法异常
  8. 【统计学习方法】朴素贝叶斯
  9. pcs增加mysql资源_PCS --- 常用命令及配置
  10. Java实现仿QQ聊天工具的项目总结