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 头部信息,避免被目标网站识别出来是爬虫程序。