旅游 网站建设目标,网店美工的职责,和国外做贸易用什么网站,做网站需要会什么 知乎对于requests的爬虫库#xff0c;我们已经学到了尾声。 我们在这儿可以挖掘出更多的requests的使用小技巧。 一.cookie对象与字典的转换 在爬取目标cookie的时候#xff0c;我们可以将cookie信息进行简化处理。 现在做一个简单的代码验证看看#xff0c;使用百度的cookies我们已经学到了尾声。 我们在这儿可以挖掘出更多的requests的使用小技巧。 一.cookie对象与字典的转换 在爬取目标cookie的时候我们可以将cookie信息进行简化处理。 现在做一个简单的代码验证看看使用百度的cookies import requests responserequests.get(http://www.baidu.com) #获取百度的响应 response_cookieresponse.cookies #获取百度的cookies print(response_cookie) response_dictrequests.utils.dict_from_cookiejar(response_cookie) #将百度获取的cookie转换为字典 print(response_dict) 输出结果 RequestsCookieJar[Cookie BDORZ27315 for .baidu.com/]{BDORZ: 27315} 那么反过来切换呢 response_cookie_1requests.utils.cookiejar_from_dict(response_dict) print(response_cookie_1) 输出结果: RequestsCookieJar[Cookie BDORZ27315 for /] 我们可以分析此次的输出结果可以知道重新翻译过来url信息丢失了具有信息保护性。 二.url编码的解码处理 我们在做爬虫的过程中是经常会遇到我们输入的url被解码成另外一种数据形式。 例如:http://tieba.baidu.com/f?kw无限法则 我们在对这个网址进行爬虫处理之后在输出结果显示的时候已经编码成了这个形式: http%3a%2f%2ftieba.baidu.com%2ff%3fkw%3d%e6%97%a0%e9%99%90%e6%b3%95%e5%88%99 翻译的时候我们还得上网去翻译过来。那么requests正好也提供了这个功能能够完成翻译避免了你去网上翻译的过程。 现在就放一段代码看看 import requests url_1http%3a%2f%2ftieba.baidu.com%2ff%3fkw%3d%e6%97%a0%e9%99%90%e6%b3%95%e5%88%99 url_2requests.utils.unquote(url_1) print(url_2) 输出结果: http://tieba.baidu.com/f?kw无限法则 反过来也是一样的 url_3requests.utils.quote(url_2) print(url_3) 输出结果: http%3A//tieba.baidu.com/f%3Fkw%3D%E6%97%A0%E9%99%90%E6%B3%95%E5%88%99 所以我们总结起来就是这样 quote:对URL编码 unquote:对解码的URL进行解码 三.请求SSL证书验证解决 我们在做爬虫的时候会经常遇到网站请求SSL证书的验证这将是爬虫遇到的家常便饭。 那么我们如何跳过这个SSL证书呢在get参数中加入一个参数即可。 假设我们访问百度遇到了SSL证书问题我们要做的就是 responserequests.get(http://www.baidu.com,verifyFalse) 以上就是三个requests的使用小技巧当然requests库是强大的能做的不只是这些。 关于其他的用法我们在今后使用的时候会慢慢探索出来具有一定的自学能力是最好的。 回顾一下我们学习requests的过程我们可以做一个总结 ①填写正确的url形式是有协议IP地址端口和路径等组成的其中协议不能忘了写。 正确的url形式为http://www.baidu.com ②学会对自己的伪装准备一堆User-Agent一堆IP和一堆cookie。 选择代理IP时选端口跟自己网络端口符合的。 ③两种请求方式的公式和参数有如下 requests.get(url,headers?(存储User-Agent参数),params?(存储wd访问参数),proxies?(存储IP地址参数),cookies?(存储cookies参数),verify?(解决SSL证书验证)) requests.post(url,headers?(存储User-Agent参数),data?(存储form表单参数),proxies?(存储IP地址参数),cookies?(存储cookies参数),verify?(解决SSL证书验证)) 当然这些参数都是以字典的形式而作为参数。 ④显示源码最好的方式就是respsonse.content.decode()如果要将json文本转为python文本使用json库的json.loads()方法。 保存源码的方式是with open标准的格式为: with open ?(文件的名字)w(进入可读模式)encodingutf-8(不可缺,不然在编辑器上显示不出来)as f : f.write(response.content.decode()) 那么requests模块就学到这儿但是正确的学习方式是学以致用我将给自己布置下面两个作业 1.抓取绝地求生贴吧的前5页源码。 已成功完成运行截图如下 源码如下: import requestsclass TiebaSpider(): def __init__(self, tieba_name): self.tieba_name tieba_name self.url https://tieba.baidu.com/f?kw tieba_name ieutf-8pn{} self.proxies {http: http://139.196.90.80:80} self.headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6814.400 QQBrowser/10.3.3005.400} self.cookies { cookie: BIDUPSIDACDA08B4211ABB2C8501DB67D45C6354; PSTM1511497343; bdshare_firstime1511786525592; rpln_guide1; TIEBAUID0929173e72ad98f36fe7ebc6; TIEBA_USERTYPEe916512877b43f62b624ed45; BDUSSRuaHRBTnhZdDY3MTBKaWo3U0lKdkRES2Y0VGEyS2F0RW1BYXYyN3N0bWlIRXRjQVFBQUFBJCQAAAAAAAAAAAEAAABLXgnSxdzF3E1BU1RFUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKKPI1yijyNcMj; STOKEN5fc0d6f6e16857ed3e6abac93bd75cae1cf244d5fd9d4e106b3ecb9d56017894; localezh; BDORZB490B5EBF6F3CD402E515D22BCDA1598; BAIDUID4D17734C04368D8A9BDE5236D01D183E:FG1; Hm_lvt_98b9d8c2fd6608d564bf2ac2ae6429481547216027,1547272466,1547303935,1547367124; wise_device0; Hm_lpvt_98b9d8c2fd6608d564bf2ac2ae6429481547367145} def get_url_list(self, url): url_list [] for i in range(5): url_list.append(url.format(i * 50)) return url_list def parse_url(self, url): response requests.get(url, headersself.headers, proxiesself.proxies, cookiesself.cookies) return response.content.decode() def save_html(self, html, page_num): with open(self.tieba_name 第 str(page_num) 页, w, encodingutf) as f: f.write(html) def run(self): # 1.使用url_list成功存储五页源码 url_list self.get_url_list(self.url) # 2.获取响应 # 3.保存源码到html文件 page_num 1 for url in url_list: html self.parse_url(url) self.save_html(html, page_num) print(self.tieba_name 第 str(page_num) 页爬取成功!) page_num 1if __name__ __main__: tieba_spider TiebaSpider(绝地求生) tieba_spider.run() 2.使用搜狗翻译将英文翻译成中文。 完成失败。 总结原因搜狗采取了反爬虫在表单中去掉了翻译结果的参数。 我尝试使用正则表达式匹配出来结果但是技术不精匹配失败。 已经自闭下次再来。 转载于:https://www.cnblogs.com/Masterpaopao/p/10261558.html