14Python爬虫---爬虫伪装浏览器

一、什么是浏览器伪装技术

  有一些网站为了避免爬虫的恶意访问,会设置一些反爬虫机制,常见的饭爬虫机制主要有:
  1、通过分析用户请求的Headers信息进行反爬虫
  2、通过检测用户行为进行反爬虫,比如通过判断同一个IP在短时间内是否频繁访问对应网站等进行分析
  3、通过动态页面增加爬虫的爬取难度,达到反爬虫的目的

  第一种反爬虫机制在目前网站中应用的最多,大部分反爬虫网站会对用户请求的Headers信息的“User-Agent”字段进行检测来判断身份,有时,这类反爬虫的网站还会对“Referer”字段进行检测。我们可以在爬虫中构造这些用户请求的Headers信息,以此将爬虫伪装成浏览器,简单的伪装只需设置好“User-Agent”字段的信息即可,如果要进行高相似度的路蓝旗伪装,则需要将用户请求的Headers信息中常见的字段都在爬虫中设置好
  第二种反爬虫机制的网站,可以通过之前学习的使用代理服务器并经常切换代理服务器的方式,一般就能够攻克限制
  第三种反爬虫机制的网站,可以利用一些工具软件,比如selenium+phantomJS,就可以攻克限制

二、浏览器伪装准备

通过Fiddler,访问爱奇艺网站,获取头部信息,如下
伪装
字段的格式,基本格式为:“字段名”:”字段值”
字段名和对应的值之间通过”:”隔开


常见头信息字段的含义:

常见字段1: Accept: text/htnl, application/xhtml+xml, application/xmlq=0.9,中/*;q=08
  • Accept字段主要用来表示浏览器能够支持的内容类型有哪些。
  • text html表示HTMⅡL文档。
  • application/ xhtml+xm表示 XHTML文档。
  • application/xml表示XMAL文档。
  • q代表权重系数,值介于0和1之间。
    所以这一行字段信息表示浏览器可以支持 text/html,application/xml、/等内容类型,支持的优先顺序从左到右依次排列。
常见字段2: accept-encoding:gzip, deflate
  • accept-encoding字段主要用来表示浏览器支持的压缩编码有哪些。
  • gzip是压缩编码的一种。
  • deflate是一种无损数据压缩算法。
    这一行字段信息表示浏览器可以支持gzp、 deflate等压缩编码。
常见字段3: Accept- Language:zhCN,zh;q=0.8,en-US;q=0.5,cnq=0.3
  • Accept-language主要用来表示浏览器所支持的语言类型。
  • zh-CN表示简体中文语言。zh表示中文,CN表示简体
  • en-Us表示英语(美国)语言
  • en表示英语语言
    所以之一行字段表示浏览器可以支持zh-CN、zh、en-US、cn等语言。
常见字段4:User- Agent: Mozilla5.0( Windows NT61;WOw64;rv:47.0) Gecko20100101Firefox/47.0
  • user-agent字段主要表示用户代理,服务器可以通过该字段识别出客户端的浏览器类客户端的操作系统及版本号型、浏览器版本号主要以伪造该字段进行网页排版引擎等客户端信息。所以之前要模拟浏览器登录,主要以伪造该字段进行。
  • Mozilla5.0表示浏览器名和版本号
  • Windows NT61;WOw64;rv:47.0 表示客户端操作系统对应信息
  • Gecko表示网页排版引擎对应信息。
  • Firefox/47.0表示火狐浏览器
    所以这一行字段表示信息为对应的用户代理信息是Mozilla5.0( Windows NT61;WOw64;rv:47.0) Gecko20100101Firefox/47.0
常见字段5: Connection:keep-alve
  • Connection表示客户端与服务器的连接类型,对应的字段值主要有两种
    • keep-alive表示持久性连接。
    • close表示单方面关闭连接,让连接断开。

所以此时,这一行字段表示客户端与服务器的连接是持久性连接。

常见字段6:Host: wwwyouku.con
  • Host字段表示请求的服务器网址是什么,此时这一行字段表示请求的服务器网址是www,youku,con。
常见字段7: Referer:网址
  • Referer字段主要表示来源网址地址,比如我们从htp:/ www,youku.conm网址中访问了该网址下的子页面http/tvyouku.com?spm=0.0.topnav.5-1-3!2-A.Onqoef,那么此时来源网址为htp:/ www,youku,con,即此时 Referer字段的值为http:/ww
    youku. com
三、爬虫伪装浏览器实战
1、使用代理服务器
import urllib.request
import http.cookiejar

url = "http://news.163.com/18/0306/09/DC71LRR20001875N.html"
# 以字典的形式设置headers
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",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
    "Connection": "keep-alive",
    "referer": "http://www.163.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 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()
# data = data.decode("utf-8")
fhandle = open("D://testweb/part6/1.html", "wb")
fhandle.write(data)
fhandle.close()

注意:
1、”Accept-Encoding”: “gzip, deflate
这句话的意思是本地接收压缩格式的数据,服务器传过来压缩格式gzip的文件,而解压这种gzip文件只能用deflate算法,浏览器能够自动解压,程序却不能自动解压gzip,需要额外进行设置才行,
总结:写爬虫程序时候还是不要写’Accept-Encoding’: ‘gzip, deflate’了,就让服务器传原始文件过来吧,不用压缩了。
2、使用Fiddler作为代理,所爬取的网址要以具体文件或者“/”结尾,如果有具体文件,直接写该具体文件的网址即可。
3、referer字段的值一般可以设置为要爬取的网页的域名地址或者对应网站的主页地址。

2、不使用代理伪装浏览器
import urllib.request
import http.cookiejar

url = "http://www.baidu.com"
# 以字典的形式设置headers
headers = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
    # "Accept-Encoding": "gzip, deflate",
    "Accept-Encoding": "gb2313,utf-8",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
    "Connection": "keep-alive",
    "referer": "baidu.com"

}
#设置cookie
cjar = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))
headall = []
# 将制定格式的headers信息添加好
for key,value in headers.items():
    item = (key,value)
    headall.append(item)
opener.addheaders = headall
# 将opener安装为全局
urllib.request.install_opener(opener)
data = urllib.request.urlopen(url).read()
fhandle = open("D://testweb/part6/2.html", "wb")
fhandle.write(data)
fhandle.close()
  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Python爬虫中,可以通过伪装User-Agent来隐藏爬虫的真实身份,避免被网站封禁。User-Agent是HTTP请求头的一部分,用于描述客户端的类型、操作系统、浏览器等信息。一些网站会根据User-Agent来识别客户端的真实身份,所以我们可以通过修改User-Agent来达到伪装的目的。 在Python中,可以使用第三方库如Requests、urllib等来发送HTTP请求,并通过设置headers参数来伪装User-Agent。具体来说,我们可以在headers中设置User-Agent字段,例如: ``` import requests url = 'http://example.com' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' } response = requests.get(url, headers=headers) ``` 在上述代码中,我们设置了User-Agent为Chrome浏览器的信息,这样就可以伪装浏览器发送HTTP请求,而不是Python爬虫发送的请求。当然,为了避免被网站封禁,我们需要经常更新User-Agent,同时也要注意不要过于频繁地发送请求,以免被识别为爬虫。 ### 回答2: Python爬虫伪装User-Agent指的是开发者在编写Python代码的过程中,将User-Agent设置为浏览器端的User-Agent,从而避免服务器端针对爬虫进行封禁或者限制访问。 User-Agent是HTTP请求的头部信息之一,用于告知服务器客户端正在使用的浏览器和操作系统的情况。由于爬虫使用的请求头往往与常规浏览器的请求头不同,因此服务器可能会对其进行限制、封禁甚至是先后回应。 为了避免这种情况,我们可以在代码中设置一个随机的User-Agent。Python中有许多第三方库提供了User-Agent,比如fake_useragent、user_agents等。这些库可以生成一个随机的User-Agent,让服务器无法将其与爬虫识别出来。 另外,我们也可以手动编写每个请求的User-Agent,使其更加随机和多变。在编写代码时,我们可以将User-Agent列表存储到文件中,然后在每次请求时随机选择一个User-Agent,使得每个请求使用的User-Agent都不相同。 需要注意的是,虽然伪装User-Agent可以一定程度上避免被服务器封禁,但过于频繁的访问依然可能被服务器识别为爬虫行为。因此,建议在爬虫程序中加入适当的延时和限制访问次数的机制,以避免被反爬虫机制限制。 ### 回答3: 为了更好地伪装自己的爬虫程序,我们需要理解什么是 User-Agent。User-Agent 是一种 HTTP 请求头部信息,用于描述用户代理的一些信息,包括操作系统、浏览器类型、版本等等。在爬虫请求时,服务器通过 User-Agent 来判断请求是否来自浏览器。因此,如果我们的爬虫请求头中不带 User-Agent 或者 User-Agent 显然是一个机器人,那爬虫很可能会被服务器封禁。 通过 Python 爬虫伪装 User-Agent 的方法有很多种,以下是一些常用的方法: - 使用 fake-useragent:fake-useragent 是一个第三方库,可以自动生成随机 User-Agent,使用方法非常简单。 - 使用 requests 库自定义 headers:这种方法的灵活度比较高,可以自定义 User-Agent,还可以添加其他自定义信息。 - 使用 random.choice() 函数随机选择 User-Agents:可以通过准备好多个 User-Agent 列表,然后随机选择一个 User-Agent。 参考下面代码: ``` import requests import random # 使用fake_useragent库来设置User-Agent from fake_useragent import UserAgent # 使用random.choice随机选择User-Agent UserAgents = [ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36", ] # 设置随机User-Agent headers = { 'User-Agent': random.choice(UserAgents) } # 或使用fake-useragent库来生成User-Agent headers = { 'User-Agent': UserAgent().random } # 执行请求 response = requests.get(url, headers=headers) ``` 总之,为了避免被服务器封禁,我们需要用一些方法伪装自己的 User-Agent,使其看起来更像是来自浏览器的请求。当然,我们也需要注意不要伪装得过于真实,否则过多的请求可能会对目标网站造成负面影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值