Python网络爬虫(浏览器伪装技术)
时间:2022-07-26
本文章向大家介绍Python网络爬虫(浏览器伪装技术),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
01 头信息字段格式
基本格式:”字段名:字段值“
02 常见头信息字段含义
1)字段1: Accept: text/html,application/xhtml+xml,application/xml; q=0.9,/; q=0.8
- Accept字段主要用来表示浏览器能够支持的内容类型有哪些
- text/html表示HTML文档
- application/xhtml+xml表示XHTML文档
- application/xml表示XML文档
- 代表权重系数,值介于0和1之间
这一行字段的信息表示浏览器可以支持text/html,application/xhtml+xml,application/xml,/等内容类型,支持的优先顺序从左到右依次排列。
2)字段2:Accept-Encoding: gzip, deflate
- Accept-Encoding字段主要用来表示浏览器支持的压缩编码有哪些
- gzip是压缩编码的一种 deflate是一种无损数据压缩算法
这一行字段的信息表示浏览器可以支持gzip,deflate等压缩编码。
3)字段3:Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
- Accept-Language字段主要用来表示浏览器支持的语言类型
- zh-CN表示简体中文语言,zh表示中文,CN表示简体
- en-US表示英文(美国)语言
- en表示英语语言
这一行字段的信息表示浏览器可以支持zh-CN,zh,en-US,en等语言。
4)字段4:User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64;rv:47.0) Gecko/20100101Firefox/47.0
- User-Agent字段主要表示用户代理,服务器可以通过该字段识别出客户端的浏览器类型,浏览器版本号,客户端的操作系统及版本号,网页排版引擎等客户端信息
- Mozilla/5.0表示浏览器名及版本信息
- Windows NT 6.1; WOW64; rv:47.0表示客户端操作系统对应信息
- Gecko表示网页排版引擎对应信息
- firefox自然表示火狐浏览器
这一行字段的信息表示为对应的用户代理信息是Mozilla/5.0 (Windows NT 6.1; WOW64;rv:47.0) Gecko/20100101Firefox/47.0。
5)字段5:Connection:keep-alive
- Connection表示客户端与服务器的连接类型,对应的字段值主要有俩种: keep-alive表示持久性连接 close表示单方面关闭连接,让连接断开
这一行字段的信息表示客户端与服务器的连接是持久性连接。
6)字段6:Host:www.baidu.com
- Host字段表示请求的服务器网址是什么
5)字段7:Referer:网址
- Referer字段主要表示来源网址地址
03 实战
import urllib.request
import http.cookiejar
url= "http://xx.xx.com/xxx/xxx.html"
#以字典的形式设置headers
headers={ "Accept":" text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language":" zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0",
"Connection": "keep-alive",
"referer":"http://xx.xx.com/"}
# 设置cookie
cjar=http.cookiejar.CookieJar()
proxy= urllib.request.ProxyHandler({'http':"127.0.0.1:8888"})
opener = urllib.request.build_opener(proxy, urllib.request.HTTPHandler,urllib.request.HTTPCookieProcessor(cjar))
# 建立空列表,以指定格式存储头信息
headall=[]
# 通过for循环遍历字典,构造出指定格式的headers信息
for key,value in headers.items():
item=(key,value)
headall.append(item)
# 将指定格式的headers信息添加号
opener.addheaders = headall
# 将opener安装为全局
urllib.request.install_opener(opener)
data=urllib.request.urlopen(url).read()
fhandle=open("./6.html","wb")
fhandle.write(data)
fhandle.close()
注意:
- 如果Accept-Encoding设置为gzip,deflate,有可能会出现乱码问题,此时只需要将该字段信息省略不写或者将该字段信息的值设置为utf-8或gb2312即可。
- 使用Fiddler作为代理服务器,所爬取的网址要以具体文件或者“/”结尾。
- referer字段的值一般可以设置为要爬取的网页的域名地址或对应网站的主页网址。
- css基础:把所有背景图都集成在一张图片上,减少图片服务器请求次数
- Docker可视化界面(Consul+Shipyard+Swarm+Service Discover)部署记录
- windows 2008上启用防火墙后sqlserver 2005经常出现连接超时的解决办法
- 重温delphi之控制台程序:Hello World!
- Docker集中化web界面管理平台-Shipyard部署记录
- "Goole项目托管"及"CodePlex发布开源项目"要点
- Docker网络解决方案-Calico部署记录
- c#中开发ActiveX的学习笔记
- Android新手之旅(4) 通过HTTP访问web
- Flash/Flex学习笔记(9):ActionScript3.0与Javascript的相互调用
- Flash/Flex学习笔记(8):ActionScript3.0中的面对对象
- Docker网络解决方案-Weave部署记录
- Flash/Flex学习笔记(7):FMS3.5基于IIS的安装
- Netdata---Linux系统性能实时监控平台部署记录
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 网络安全实验室平台(脚本关)
- shell 多线程及线程数控制实现
- CTF考点总结-sql注入篇
- dotnet OpenXML 为什么资源使用 Relationship 引用
- k8s部署Kafka集群
- 彻底搞懂 etcd 系列文章(六):etcd 核心 API v3
- Open3d学习计划—7(RGBD测程法)
- 一次信息泄露引发的越权
- MySQL 调优 | OPTIMIZER_TRACE 详解
- 这次被坑惨了,MySQL的隐式转换导致了一个线上BUG
- iOS开发之UIMenu
- mysql必会技能-基本操作
- 移动端跨平台技术之下的变与不变
- java-JDBC操作Mysql
- 【深度知识】25种区块链共识算法全面详解