Python反爬虫措施之User-Agent

在工作中进行爬虫网站时,一般网站是不允许被爬虫访问的,经常会需要提供User-Agent。为什么要提供User-agent?

因为它表示请求者的信息,可以搜集User-agent并保存,爬取过程中动态更换在User-agent,可以伪装成浏览器的形式。如果不提供User-Agent,会导致爬虫在请求网页时,请求失败。

什么是User-Agent

User-Agent中文名为用户代理,简称 UA,是Http协议中的一部分,属于头域的组成部分。它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。下面我们看一下图片便知。

我们现先打开一个网页,然后按下F12,选择network,再点击headers就可以看到User-Agent了。
在这里插入图片描述
当我们使用爬虫请求网页时,我们不伪装请求头,直接使用requests的GET直接请求:
.

import requests
res = requests.get('https://www.zhihu.com/')
print(res.request.headers)
print(res.status_code)

运行结果:

在这里插入图片描述
我们使用requests的GET请求访问知乎网页,输出结果可以看到,User-Agent直接显示为requests的版本号。但是,有没有注意到,返回的状态码既然是400,这说明什么?

知乎是设置了通过UA的反爬措施的,在爬虫中进行request请求,很多时候,都需要添加请求头,不然服务器会认为是非法的请求,从而拒绝你的访问。

我们找一个Chrome的User-Agent,只需在地址栏中输入:about:version即可,如下图所示:

在这里插入图片描述

User-Agent值是用来帮助服务器识别用户使用的操作系统、浏览器、浏览器版本等等信息的,而我们使用爬虫时也大多会带上这个请求头。下面使用谷歌这个User-Agent值:

import requests
headers = {'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
res = requests.get('https://www.zhihu.com/',headers=headers)
print(res.request.headers)
print(res.status_code)

运行结果:

在这里插入图片描述
输出结果可以看出绕过知乎这道反爬措施,只需要伪装成浏览器,将headers设置成浏览器中设置的值。

如果同一个网站被相同浏览器频繁访问,很容易被网站识别为爬虫程序,所以一般通过使用多个User-Agent随机调用的方式,可以有效避免同一个请求头访问网站。

调用python中的useragent模块

在使用 Python 做爬虫的时候,我们需要伪装头部信息骗过网站的防爬策略,Python 中的第三方模块 fake_useragent 就很好的解决了这个问题,它将给我们返回一个随机封装了好的头部信息,我们直接使用即可。

fake_useragent安装

简单来说,fake_useragent能灵活的帮助我们生成user-agent,解决了user-agent烦恼。

pip install fake-useragent

安装完成后,我们现了解一下fake_useragent的使用,生成指定浏览器的user-agent:

import fake_useragent

# 实例化 user-agent 对象
ua = fake_useragent.UserAgent()
print(ua.chrome)

运行结果:

在这里插入图片描述

如果要频繁抓取一个网页,每次都设置一样的UA,这也会被网站怀疑,因为一个人可能不会短时间内访问千百次那个网站,所以我们要做的是随机换UA,我们可以从这个网站上拿取:https://fake-useragent.herokuapp.com/browsers/0.1.11把收集到UA放到列表,每次从中随机提取即可。

在这里插入图片描述

我们还可以使用fake_useragent随机生成user-agent

import fake_useragent

# 实例化 user-agent 对象
ua = fake_useragent.UserAgent()
print(ua.random)
print(ua.random)
print(ua.random)

运行结果:

在这里插入图片描述

总结

在Python爬虫的过程中经常要模拟UserAgent, 因此自动生成UserAgent十分有用,fake-useragent是个很不错的第三方库,可以随机生成各种UserAgent。

在这里插入图片描述
欢迎关注微信公众号【程序猿编码】,添加本人微信号(17865354792),回复:领取学习资料。或者回复:进入技术交流群。网盘资料有如下:

在这里插入图片描述

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个可以爬取京东商品信息并进行可视化的Python爬虫示例代码,其中包括了设置代理和随机User-Agent的代码: ```python import requests from bs4 import BeautifulSoup import pandas as pd import matplotlib.pyplot as plt from fake_useragent import UserAgent url = "https://search.jd.com/Search?keyword=Python&enc=utf-8&wq=Python&pvid=74c9e6f6d2c14a4aaf3d2c3fb0c2b6b7" # 设置代理和随机User-Agent proxies = { 'http': 'http://127.0.0.1:1080', 'https': 'http://127.0.0.1:1080' } headers = { 'user-agent': UserAgent().random } response = requests.get(url, headers=headers, proxies=proxies) soup = BeautifulSoup(response.text, "html.parser") product_list = [] for item in soup.select('li.gl-item'): p_name = item.select('.p-name em')[0].text.strip() p_price = item.select('.p-price i')[0].text.strip() product_list.append({'name': p_name, 'price': float(p_price)}) df = pd.DataFrame(product_list) df = df.drop_duplicates() # 去重 df = df.sort_values(by='price', ascending=False) # 按价格排序 # 可视化 plt.figure(figsize=(10, 8)) plt.bar(df['name'], df['price']) plt.xticks(rotation=90) plt.xlabel('商品名称') plt.ylabel('价格(元)') plt.title('京东Python商品价格分布') plt.show() ``` 该代码引入了fake_useragent库,用于生成随机的User-Agent,可以有效避免被爬虫机制识别。同时,设置了一个本地代理,可以使用代理IP来访问京东,增加爬取成功的几率。 需要注意的是,代理IP的获取和使用需要谨慎,不要使用不可靠的代理,否则可能会导致爬取失败或者被封禁。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值