9. 用fake_useragent库随机获取一个UserAgent

安迪python学习笔记 安迪python学习笔记 2023-06-19 00:11 发表于云南


  • 1. 类的知识回顾

  • 2. fake_useragent库的作用

  • 3. fake_useragent库的安装

  • 4. fake_useragent的常用方法

  • 5. fake_useragent.UserAgent-生获取随机的User-Agent字符串

  • 6. UserAgent类的其他方法

  • 7. 代码实操


1. 类的知识回顾

  1. 定义类。

    • class 类名:
  2. 创建对象:使用类名创建一个对象,也称为实例化对象。

    • 对象 = 类名( )
  3. 调用方法:通过实例对象调用类中的方法,实现具体的功能。

    • 对象.方法名( )

【基本框架】

class 类名:
    属性1 = 初始值1
    属性2 = 初始值2
    def 方法1(self, 参数1, 参数2, ...):            
    def 方法2(self, 参数1, 参数2, ...):
           
对象 = 类名( )
对象.方法1()

【代码示例】

# 类名为Person
class Person:
    # 属性为name和age
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 方法为say_hello
    def say_hello(self):
        print("Hello, my name is", self.name)

# 实例化类创建对象
person1 = Person("Tom"20)

# 调用对象的方法
person1.say_hello()

【终端输出】

Hello, my name is Tom

【代码解析】

def __init__(self, name, age):
    self.name = name
    self.age = age

__init__是Python类的构造函数,用于初始化对象的属性。

当创建一个类的实例时,__init__方法会自动调用,可以在该方法中定义实例的属性和方法。

这里它有两个参数:name和age。

在对象被创建时,这些参数将被传递给构造函数,并将它们分别赋值给对象的属性self.name和self.age。

这样,每个对象都将有自己的name和age属性,可以在类的其他方法中使用。

def say_hello(self):
    print("Hello, my name is", self.name)

这是一个自定义方法,方法名为say_hello,它有一个参数self。

self代表当前对象,即调用该方法的对象。

self.name表示当前对象的名字属性。

该方法的功能是打印出一条问候语,包括对象的名字。

# 实例化类创建对象
person1 = Person("Tom"20)

【实例化类创建对象语法】

对象 = 类名( )

  • person1:对象名
  • Person:类名
  • 参数1:Tom
  • 参数2:20

这是一个Python类的实例化操作,创建了一个名为"Tom",年龄为20的Person对象。

在实例化类创建对象时,需要传递两个参数name和age,这样才能初始化对象的属性。

# 调用对象的方法
person1.say_hello()

在调用对象的方法时,不需要传递任何参数,因为方法中已经可以访问对象的属性。

例如,person1.say_hello()中的self指的就是person1对象本身,可以通过self.name访问对象的name属性。

【温馨提示】

类名通常采用驼峰命名法,属性和方法的命名采用下划线命名法。

【驼峰命名法】

驼峰命名法(Camel Case)是一种命名规范,用于将多个单词组合成一个单词,以便于阅读和理解。

其中每个单词的首字母都大写,其余的字母小写。

驼峰命名法名称来源于它的形状,类似于驼峰的背部。

【举例说明】

今天我们要学一个库,库名为fake_useragent。

fake_useragent库中有一个重要的类UserAgent可以随机生成一个User-Agent字符串。

UserAgent是类名。

user[ˈjuːzə]:用户。

agent[ˈeɪdʒənt]:代理人。

UserAgent就是由user和agent构成。

这两个单词合并在一起作为类名时,他们都首字母U和A需要大写,因此有UserAgent类。

这就是驼峰命名法。

2. fake_useragent库的作用

fake[feɪk]:伪造的。

fake_useragent 库是一个用于生成随机的 User-Agent 的 Python 库。

它可以帮助开发者在爬取网页时伪装成不同的浏览器,从而避免被网站识别为爬虫并被封禁。

该模块提供了多种生成 User-Agent 的方式,包括随机选择常见浏览器、随机生成浏览器版本号、随机选择操作系统等。

使用 fake_useragent 模块可以提高爬虫的稳定性和安全性。

【总结】

fake_useragent是一个Python库,用于生成随机的User-Agent头部信息,以模拟不同的浏览器和操作系统。

它可以用于爬虫、自动化测试、反爬虫等场景。

3. fake_useragent库的安装

fake_useragent是一个第三方库,使用前需要安装。

【安装命令】

pip install fake_useragent

【带镜像源的安装命令】

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ fake_useragent

第三方库安装可参考下面的链接:

73. python第三方库安装教程(超详细

4. fake_useragent的常用方法

【常用方法】

  1. UserAgent:获取随机的User-Agent字符串。
  2. Chrome:获取随机的Chrome浏览器User-Agent字符串。
  3. Firefox:获取随机的Firefox浏览器User-Agent字符串。
  4. Safari:获取随机的Safari浏览器User-Agent字符串。
  5. IE:获取随机的IE浏览器User-Agent字符串。
  6. Edge:获取随机的Edge浏览器User-Agent字符串。
  7. Opera:获取随机的Opera浏览器User-Agent字符串。
  8. random:获取随机的任意浏览器User-Agent字符串。
  9. update:更新User-Agent池。
  10. headers:获取随机的HTTP请求头部信息。
  11. get:获取指定浏览器的User-Agent字符串。
  12. load:从指定文件中加载User-Agent池。
  13. path:指定User-Agent池文件的路径。
  14. fallback:指定User-Agent池为空时的备用User-Agent字符串。
  15. VERSION:获取fake_useragent的版本号。

5. fake_useragent.UserAgent-生获取随机的User-Agent字符串

# 导入fake_useragent库中的UserAgent类
from fake_useragent import UserAgent

# 实例化UserAgent类创建了一个UserAgent对象
# 实例化对象语法:对象 = 类名( )
ua = UserAgent()

# 输出ua,可以看到ua是一个UserAgent对象
print(ua)

# 调用ua的random方法,获取随机的User-Agent头部信息 
# 调用方法语法:对象.方法名( )
print(ua.random)

【终端输出】

<fake_useragent.fake.FakeUserAgent object at 0x000001A0DD73AEB0>
Mozilla/5.0 (X11; U; Linux i686; rv:1.8.0.1) Gecko/20060124 Firefox/1.5.0.1

【返回值】

终端输出一个随机的User-Agent字符串。

每次点击运行,得到的结果都不一样。

【代码解析】

from fake_useragent import UserAgent

导入fake_useragent库中的UserAgent类。

ua = UserAgent()

实例化对象语法:对象 = 类名( )

实例化UserAgent类创建了一个UserAgent对象。

u = UserAgent对象

print(ua.random)

调用方法语法:对象.方法名( )

通过调用UserAgent对象的方法来获取不同的User-Agent头部信息.

ua.random:获取随机的User-Agent头部信息。

【总结】

上面的代码在每次运行时,User-Agent头部信息都会随机生成,可以模拟不同的浏览器和操作系统,增加爬虫的隐蔽性。

6. UserAgent类的其他方法

  • ua.chrome:获取Chrome浏览器的User-Agent头部信息
  • ua.firefox:获取Firefox浏览器的User-Agent头部信息
  • ua.safari:获取Safari浏览器的User-Agent头部信息
  • ua.ie:获取IE浏览器的User-Agent头部信息
  • ua.random:获取随机的User-Agent头部信息
# 导入fake_useragent库中的UserAgent类
from fake_useragent import UserAgent

# 实例化UserAgent类创建了一个UserAgent对象
ua = UserAgent()

# 调用ua的任意方法
# 调用方法语法:对象.方法名( )
chrome_ua = ua.chrome
firefox_ua = ua.firefox
safari_ua = ua.safari
ie_ua = ua.ie
random_ua = ua.random

print("Chrome浏览器的User-Agent:", chrome_ua)
print("Firefox浏览器的User-Agent:", firefox_ua)
print("Safari浏览器的User-Agent:", safari_ua) 
print("ie浏览器的User-Agent:", ie_ua) 
print("随机生成一个User-Agent:", random_ua) 

【终端输出】

Chrome浏览器的User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.215 Safari/535.1
Firefox浏览器的User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; es-ES; rv:1.9.1.9) Gecko/20100315 Firefox/3.5.9 GTB5 (.NET CLR 3.5.30729)
Safari浏览器的User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/312.1 (KHTML, like Gecko) Safari/312
ie浏览器的User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 3.0)
随机生成一个User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; es-es) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10

【第2个Firefox浏览器的User-Agent解析】

  • Mozilla/5.0:表示浏览器类型为 Mozilla,版本为 5.0。
  • (Windows; U; Windows NT 6.0; es-ES; rv:1.9.1.9):表示操作系统为 Windows NT 6.0,语言为西班牙语(es-ES),浏览器版本为 1.9.1.9。
  • Gecko/20100315:表示浏览器内核为 Gecko,版本为 20100315。
  • Firefox/3.5.9:表示浏览器为 Firefox,版本为 3.5.9。
  • GTB5:表示用户安装了 Google 工具栏。
  • (.NET CLR 3.5.30729):表示用户安装了 .NET Framework 3.5。

7. 代码实操

在爬虫程序的请求中使用fake_useragent随机生成一个User-Agent。

【代码示例】

# 导入requests库
import requests
# 从fake_useragent库导入UserAgen类
from fake_useragent import UserAgent

url = 'http://www.baidu.com'

# 实例化UserAgent类创建了一个UserAgent对象
# 实例化对象语法:对象 = 类名( )
ua = UserAgent()

# headers变量名,数据类型为字典
# 字典的键为User-Agent
# 字母的名为ua.random
# ua是上面生成的一个UserAgent对象
# random是UserAgent类的一个方法,作用是随机生成一个User-Agent
headers = {'User-Agent': ua.random}

# response变量名,这里是一个响应对象,
# response包含服务器返回的状态码、响应头和响应体等信息。
# requests库名
# get是requests库的一个方法,作用是向网页发送请求
# url采纳表示要请求的网址
# headers传递的是请求头信息
response = requests.get(url=url, headers=headers)

print(type(response))
print(response)

【终端输出】

<class 'requests.models.Response'>
<Response [200]>

【查看Response对象的7个属性】

# 导入requests库
import requests
# 从fake_useragent库导入UserAgen类
from fake_useragent import UserAgent

url = 'http://www.baidu.com'

# 实例化UserAgent类创建了一个UserAgent对象
# 实例化对象语法:对象 = 类名( )
ua = UserAgent()

# headers变量名,数据类型为字典
# 字典的键为User-Agent
# 字母的名为ua.random
# ua是上面生成的一个UserAgent对象
# random是UserAgent类的一个方法,作用是随机生成一个User-Agent
headers = {'User-Agent': ua.random}

# response变量名,这里是一个响应对象,
# response包含服务器返回的状态码、响应头和响应体等信息。
# requests库名
# get是requests库的一个方法,作用是向网页发送请求
# url采纳表示要请求的网址
# headers传递的是请求头信息
response = requests.get(url=url, headers=headers)

print("response的类型", type(response))
print("HTTP响应的状态码", response.status_code)
print("HTTP响应的编码方式", response.encoding)
print("HTTP响应的推测编码方式", response.apparent_encoding)
print("HTTP请求对象", response.request)
print("HTTP响应的URL地址", response.url)
#print(response.text)
#print(response.content)

【终端输出】

response的类型 <class 'requests.models.Response'>
HTTP响应的状态码 200
HTTP响应的编码方式 utf-8
HTTP响应的推测编码方式 utf-8
HTTP请求对象 <PreparedRequest [GET]>
HTTP响应的URL地址 http://www.baidu.com/
  • response.status_code:HTTP响应的状态码,输出200表示访问网页成功。
  • response.encoding:HTTP响应的编码方式。
  • response.apparent_encoding:HTTP响应的推测编码方式。
  • response.request:HTTP请求对象
  • response.url:HTTP响应的URL地址
  • response.text:HTTP响应的文本内容
  • response.content:HTTP响应的二进制内容

最后2个输出的是网页的文本内容,因为太占篇幅,这里不做输出,有需要的自己查看。


收录于合集 #网络爬虫
 34
上一篇8. 手动构建User-Agent用户代理池下一篇10. 爬虫实战:爬取链家房源数据、可选择爬取城市、结果保存到mysql、mongodb、Excel、csv、JSON中

微信扫一扫
关注该公众号