对于requests的爬虫库,我们已经学到了尾声。

我们在这儿可以挖掘出更多的requests的使用小技巧。

一.cookie对象与字典的转换

在爬取目标cookie的时候,我们可以将cookie信息进行简化处理。

现在做一个简单的代码验证看看,使用百度的cookies:

import requests
response=requests.get("http://www.baidu.com")                                      #获取百度的响应
response_cookie=response.cookies                                                         #获取百度的cookies
print(response_cookie)
response_dict=requests.utils.dict_from_cookiejar(response_cookie)      #将百度获取的cookie转换为字典
print(response_dict)
输出结果:

RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
{'BDORZ': '27315'}

那么,反过来切换呢?

response_cookie_1=requests.utils.cookiejar_from_dict=(response_dict)

print(response_cookie_1)

输出结果:

<RequestsCookieJar[<Cookie BDORZ=27315 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_1="http%3a%2f%2ftieba.baidu.com%2ff%3fkw%3d%e6%97%a0%e9%99%90%e6%b3%95%e5%88%99"
url_2=requests.utils.unquote(url_1)
print(url_2)

输出结果:

http://tieba.baidu.com/f?kw=无限法则

反过来也是一样的:

url_3=requests.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证书问题,我们要做的就是:

response=requests.get("http://www.baidu.com",verify=False)

以上就是三个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"(进入可读模式),encoding="utf-8"(不可缺,不然在编辑器上显示不出来))as f :

    f.write(response.content.decode())

那么,requests模块就学到这儿,但是正确的学习方式是学以致用,我将给自己布置下面两个作业:

1.抓取绝地求生贴吧的前5页源码。

已成功完成,运行截图如下:

源码如下:

import requests

class TiebaSpider():    def __init__(self, tieba_name):        self.tieba_name = tieba_name        self.url = "https://tieba.baidu.com/f?kw=" + tieba_name + "&ie=utf-8&pn={}"        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": "BIDUPSID=ACDA08B4211ABB2C8501DB67D45C6354; PSTM=1511497343; bdshare_firstime=1511786525592; rpln_guide=1; TIEBAUID=0929173e72ad98f36fe7ebc6; TIEBA_USERTYPE=e916512877b43f62b624ed45; BDUSS=RuaHRBTnhZdDY3MTBKaWo3U0lKdkRES2Y0VGEyS2F0RW1BYXYyN3N0bWlIRXRjQVFBQUFBJCQAAAAAAAAAAAEAAABLXgnSxdzF3E1BU1RFUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKKPI1yijyNcMj; STOKEN=5fc0d6f6e16857ed3e6abac93bd75cae1cf244d5fd9d4e106b3ecb9d56017894; locale=zh; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID=4D17734C04368D8A9BDE5236D01D183E:FG=1; Hm_lvt_98b9d8c2fd6608d564bf2ac2ae642948=1547216027,1547272466,1547303935,1547367124; wise_device=0; Hm_lpvt_98b9d8c2fd6608d564bf2ac2ae642948=1547367145"}

    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, headers=self.headers, proxies=self.proxies, cookies=self.cookies)        return response.content.decode()

    def save_html(self, html, page_num):        with open(self.tieba_name + "第" + str(page_num) + "页", "w", encoding="utf") 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 += 1

if __name__ == "__main__":    tieba_spider = TiebaSpider("绝地求生")    tieba_spider.run()

2.使用搜狗翻译将英文翻译成中文。

完成失败。

总结原因:搜狗采取了反爬虫,在表单中去掉了翻译结果的参数。

我尝试使用正则表达式匹配出来结果,但是技术不精,匹配失败。

已经自闭,下次再来。

转载于:https://www.cnblogs.com/Masterpaopao/p/10261558.html

更多Requests的小技巧以及总结相关推荐

  1. lisp 任意点 曲线距离_数学篇|看完这篇,秒杀所有圆锥曲线小技巧

    今天为大家带来的是小袁老师为大家总结的圆锥曲线题目的解题技巧,有例题有讲解! 善用几何性质 圆锥曲线的几何性质可以说是基础中的基础,它以及它引申出的焦点三角形面积公式在题目中也是被广泛地用到. 首先我 ...

  2. 手机计算机的隐藏小技巧,涨知识!MIUI计算器原来有这么多隐藏小技巧,最后一个绝对想不到...

    原标题:涨知识!MIUI计算器原来有这么多隐藏小技巧,最后一个绝对想不到 计算器除了我们需要进行日常的计算以外,几乎是用不到的.但是MIUI中的计算器与普通计算器可不同,里面的隐藏小技巧足以让你震惊到 ...

  3. word手写字体以假乱真_Word小技巧|打印作文草稿纸

    前期介绍过一些Word使用中的小技巧,例如WORD快速查找的2个小技巧 https://www.iappi.cn/2019_08/20191147.html,使用Word创建九宫格图像 https:/ ...

  4. 内存占用小的手机输入法_华为手机输入法中6个超实用的小技巧,你没用过就太可惜了!...

    阅读本文前,请您先点击上面蓝色字体"财经史"再点击"关注",这样您就可以免费收到我们的最新内容了,每天都会有更新,完全是免费订阅,请放心关注. 想必大家对华为手 ...

  5. 你不知道的Windows小技巧~~

    看完本文将会让你学到更多windows的小技巧~~~~ 前方高能!!! ---------------------------------------------------------------- ...

  6. 原来微信还有这三个实用小技巧!简直太方便了

    微信我们天天都在用,隐藏的功能,你又知道多少?微信表情不够用?聊天内容太难找?那是你不知道这些神操作.下面微信的几个玩法你不一定知道的小技巧哦! 1.相信大家微信里的表情包都存了很多,以备斗图之用,可 ...

  7. 办公小技巧:word打印怎么做?

    word怎么打印?word最常用的地方就是内容编辑,每一个word文档的内容是我们精心编辑好的,当编辑好之后,如果你想要将其打印下来,该怎么做到?马上往下看吧! 第1步:打开word文档后,点击左上角 ...

  8. 用了华为手机多年,你却不知道的,10个手机实用小技巧

    哈喽,大家好,今天我们来说说华为手机,华为是目前国产手机热度最高的品牌,越来越多的人都在用华为手机,但是华为手机的10个实用小技巧你知道吗?学会这些小技能可以让你在使用手机时更加的方便,接下来我们一起 ...

  9. 短视频怎么获得高流量?简单小技巧,让你的短视频被更多人看到

    短视频怎么获得高流量?简单小技巧,让你的短视频被更多人看到 对于做短视频的小伙伴们来说,想要获得高流量,让更多人看到自己的短视频是毋庸置疑的.那么今天,我们就一起来学习一下关于短视频获得高流量的简单小 ...

最新文章

  1. libev源码解析——I/O模型
  2. 聊一聊:MyBatis和Spring Data JPA的选择问题
  3. 学编程又一火爆网站:哔哩哔哩
  4. 服务器重启后,启动SAP ERP的步骤
  5. make changes to the open source project?
  6. 【论文导读】DLP-KDD2019|BST---使用Transformer进行序列推荐
  7. 年度总结文章的抽奖结果公布
  8. jq查找字段忽略html标签,jQuery过滤HTML标签并高亮显示关键字的方法
  9. Redis 常用配置参数
  10. 再探正则表达式c++-html中搜索url
  11. Kubernentes
  12. python 图像的拉普拉斯变换中的数值问题_数字图像处理(第十章)
  13. 融资13亿后突然死亡!首款产品被苹果点赞,与谷歌竞赛的明星创业公司Anki倒闭...
  14. ITU-T G.1081 IPTV性能监测点 (Performance monitoring points for IPTV)
  15. mysql双向复制_MySQL 双向复制
  16. 132.Function Handing 函数
  17. 冬日魔幻之旅-seata+dubbo+nacos+springboot解决分布式事务的全网段唯一实践之作(上)
  18. 用牛顿法求算术平方根python
  19. FTP上传文件提示550错误原因分析。
  20. [Flink基础]--什么是流处理?

热门文章

  1. 虚拟机环境下DPDK运行时的一些错误解决
  2. Ubuntu 16.04下使用Wine安装Xshell 4和Xftp 4
  3. js中,实现对键盘按键的监听:
  4. Android项目笔记【项目管理统计图app】:使用github上的cardslib开源项目实现CardView(1)...
  5. ERP开发中应用字符串解析实现界面翻译智能化
  6. javascript数字验证(转)
  7. Direct3D学习_绘制
  8. c++二进制转十进制_二进制,八进制,十进制,十六进制转换详解~
  9. 最大公约数最小公倍数
  10. c语言变量相等问题穷举法,C语言穷举法经典例题.ppt