1 def get_ua(self):
2         first_num = random.randint(99, 103)
3         third_num = random.randint(0, 5060)
4         fourth_num = random.randint(0, 140)
5         os_type = ['(Windows NT 6.1; WOW64)', '(Windows NT 10.0; WOW64)', '(X11; Linux x86_64)', '(Macintosh; Intel Mac OS X 10_14_5)']
6         chrome_version = 'Chrome/{}.0.{}.{}'.format(first_num, third_num, fourth_num)
7         ua = ' '.join(['Mozilla/5.0', random.choice(os_type), 'AppleWebKit/537.36', '(KHTML, like Gecko)', chrome_version, 'Safari/537.36'])
8         return ua

返回结果           :Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.2631.83 Safari/537.36

浏览器复制结果:Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36
 
解析:

这个函数是一个 Python 类的方法,返回一个随机生成的 User-Agent 字符串,用于模拟浏览器请求时的 User-Agent 头部信息。下面是对该函数的解释:

  • first_num = random.randint(99, 103):生成一个范围在 99 到 103 之间的随机整数,作为 Chrome 浏览器的主版本号。
  • third_num = random.randint(0, 5060):生成一个范围在 0 到 5060 之间的随机整数,作为 Chrome 浏览器的次版本号。
  • fourth_num = random.randint(0, 140):生成一个范围在 0 到 140 之间的随机整数,作为 Chrome 浏览器的修订版本号。
  • os_type = ['(Windows NT 6.1; WOW64)', '(Windows NT 10.0; WOW64)', '(X11; Linux x86_64)', '(Macintosh; Intel Mac OS X 10_14_5)']:定义了一个包含多个操作系统类型的列表。
  • chrome_version = 'Chrome/{}.0.{}.{}'.format(first_num, third_num, fourth_num):使用前面生成的主、次、修订版本号,生成 Chrome 浏览器的版本号字符串。
  • ua = ' '.join(['Mozilla/5.0', random.choice(os_type), 'AppleWebKit/537.36', '(KHTML, like Gecko)', chrome_version, 'Safari/537.36']):使用前面生成的操作系统类型和浏览器版本号,拼接出完整的 User-Agent 字符串。其中,Mozilla/5.0 是一个固定的字符串,表示浏览器类型;AppleWebKit/537.36 和 Safari/537.36 分别表示浏览器内核和 Safari 浏览器的版本号。
    使用这个函数可以方便地生成随机的 User-Agent 字符串,用于模拟不同的浏览器和操作系统类型,增加爬虫的隐蔽性。

 

 1  def init_requests_parameters(self, url, is_proxy=False):
 2         # cookie
 3         self.cookie = self.get_cookies(url, is_proxy)
 4         cookie = ";".join([f'{key}={value}' for key,value in self.cookie.items()])
 5         # headers
 6         raw_headers = f"""
 7         Cookie: {cookie}
 8         Host: www.nmpa.gov.cn
 9         User-Agent: {self.get_ua()}"""
10         raw_headers = bytes(raw_headers, encoding="utf-8")
11         self.headers = headers_raw_to_dict(raw_headers)

这个函数是一个 Python 类的方法,用于初始化 HTTP 请求的参数,包括 Cookie 和 User-Agent 头部信息。下面是对该函数的解释:

    • url:需要请求的 URL 地址。
    • is_proxy=False:是否使用代理服务器,默认不使用。
    • self.cookie = self.get_cookies(url, is_proxy):调用 get_cookies 方法获取指定 URL 地址的 Cookie 信息,并将其保存到类属性 self.cookie 中。
    • cookie = ";".join([f'{key}={value}' for key,value in self.cookie.items()]):将类属性 self.cookie 中的 Cookie 字典转换成字符串格式,方便后续在 HTTP 请求头部中使用。
    • raw_headers = f"""Cookie: {cookie}\nHost: www.nmpa.gov.cn\nUser-Agent: {self.get_ua()}""":构造一个包含 Cookie、Host 和 User-Agent 头部信息的原始字符串。
    • raw_headers = bytes(raw_headers, encoding="utf-8"):将原始字符串转换成字节串格式。
    • self.headers = headers_raw_to_dict(raw_headers):调用 headers_raw_to_dict 函数将字节串格式的头部信息转换成 Python 字典格式,并将其保存到类属性 self.headers 中。

      在这个函数中,首先调用 get_cookies 方法获取 Cookie 信息,然后构造了一个包含 Cookie、Host 和 User-Agent 头部信息的原始字符串,最后将其转换成 Python 字典格式,方便后续在 HTTP 请求头部中使用。这样,我们就可以在发送 HTTP 请求时自动带上 Cookie 和 User-Agent 头部信息,避免被目标网站识别出来是爬虫程序。