他叫 Kenneth Reitz。现就职于知名云服务提供商 DigitalOcean,曾是云计算平台 Heroku 的 Python 架构师,目前 Github 上 Python 排行榜第一的用户。(star 数超过了包括 google、tensorflow、django 等账号)

但他被更多路人所熟知的,恐怕还是他从一名技术肥宅逆袭成为文艺高富帅的励志故事:

看看他的个人主页 www.kennethreitz.org 上的标签:

除了程序员,还有摄影师、音乐家、演讲者……不怪在社交媒体上被称为“程序员届的网红”。

然而,作为一个严肃的技术号,今天我们不是要八卦他的开挂人生,而是他的代表作品: Requests

(如果你还是想看八卦,给你个传送门: 谁说程序员不是潜力股?让这位世界前五名的天才程序员来颠覆你三观!

  • *

Requests 自我定义为 HTTP for Humans让 HTTP 服务人类 ,或者说最人性化的 HTTP。言外之意,之前的那些 HTTP 库太过繁琐,都不是给人用的。(urllib 表示:怪我咯!)

尽管听上去有些自大,但实际上它的的确确配得上这个评价,用过的都说好。我在文首搬出它的网红作者,其实也仅仅是想吸引下你的眼球,然后告诉你,这真的是一个非常值得使用的库。“提升8倍”虽是我胡诌的数据,开发效率的提升却是杠杠滴。

我们先来看看它官网上的说法:

其他同样非常值得推荐的东西,如 PyCharm、Anaconda 等,我在推荐完之后往往得写上一些教程,并在后续不断解答使用者的问题。

而 Requests 却不同,它提供了官方中文文档,其中包括了很清晰的“快速上手”和详尽的高级用法和接口指南。以至于我觉得再把文档里面内容搬运过来都是一种浪费。对于 Requests,要做的仅仅是两件事:

  1. 告诉你有这样一个工具,用来开发爬虫很轻松
  2. 告诉你它的官方文档很好,你去读就可以了

到此为止,本篇的目的已经达到。不过为了更有说服力,以及照顾到一些暂时还不需要但以后可能会去看的同学,我还是再啰嗦几句,演示下 Requests 的威力。
安装

pip install requests 即可

请求网页

import requests
r = requests.get('http://httpbin.org/get')
print(r.status_code)
print(r.encoding)
print(r.text)
print(r.json())

只需一行代码就可以完成 HTTP 请求。然后轻松获取状态码、编码、内容,甚至按 JSON 格式转换数据。虽然这种简单请求用别的库也不复杂,但其实在内部,Requests 已帮你完成了 添加 headers、自动解压缩、自动解码 等操作。写过课程中“查天气”的同学,很可能踩过 gzip 压缩的坑,用 Requests 就不存在了。如果你发现获取的内容编码不对,也只需要直接给 encoding 赋值正确的编码后再访问 text,就自动完成了编码转换,非常方便。

想要 下载一张图片

r = requests.get("https://www.baidu.com/img/bd_logo1.png")
with open('image.png', 'wb') as f:f.write(r.content)

把返回结果的 content 保存在文件里就行了。

提交一个 POST 请求 ,同时增加 请求头、cookies、代理 等信息(此处使用的代理地址不是真实的,测试代码时需去掉):

import requests
url = 'http://httpbin.org/post'
cookies = dict(some_cookie='working')
headers = {'user-agent': 'chrome'}
proxies = {'http':'http://10.10.1.10:3128','https':'http://10.10.1.10:1080',
}
data = {'key1': 'value1', 'key2': 'value2'}
r = requests.get(url,data=data,cookies=cookies,proxies=proxies,headers=headers
)
print(r.text)

上述几个配置,如果使用自带的 urllib 库,代码要增加不少。

有时我们做爬虫时,需要保持 cookie 一致,比如登录后才可访问的页面。用 Session 会话对象 就可以实现:

s = requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get("http://httpbin.org/cookies")
print(r.text)

另外提两个常见小问题:
一个是关于 SSL ,也就是 https 证书的问题。如果碰到 HTTPS 证书无效导致无法访问的错误,可以尝试加参数 verify=False 忽略:

r = requests.get('https://www.12306.cn/', verify=False)
print(r.text)

另一个是对于设置了 自动跳转 的页面,默认会跟随跳转(但仅限于控制域名跳转,无法跟随 js 跳转),也可以加参数 allow_redirects=False 禁止:

r = requests.get('http://github.com/', allow_redirects=False)
print(r.status_code)
print(r.text)

上面两个例子,把参数去掉试试看效果。

其他更多详细内容不多说了,中文官网地址 cn.python-requests.org,顺着看一遍,写一遍,你就掌握这个爬虫神器了。

对了,作者今年又发布了个新的库 Requests-HTML: HTML Parsing for Humans,用来对抓取到的 HTML 文本进行处理。这是要把 bs4 也一并干掉的节奏啊。现在更新到 0.9 版本,密切关注中。

我们编程教室的不少演示项目如 电影票价查询、就业岗位分析、IP 代理池 里也都使用了 Requests 库,想了解的请在公众号(Crossin的编程教室)里回复 项目

════
其他文章及回答:

如何自学Python | 新手引导 | 精选Python问答 | Python单词表 | 区块链 | 人工智能 | 双11 | 嘻哈 | 爬虫 | 排序算法 | 我用Python | 高考 | 世界杯

欢迎搜索及关注: Crossin的编程教室

这个男人让你的爬虫开发效率提升8倍相关推荐

  1. 这个男人让你的python爬虫开发效率提升8倍

    他叫 Kenneth Reitz.现就职于知名云服务提供商 DigitalOcean,曾是云计算平台 Heroku 的 Python 架构师,目前 Github 上 Python 排行榜第一的用户.( ...

  2. 自从用了低代码开发,开发效率提升10倍

    "低代码"是近两年IT界最热门的话题之一.传统的应用开发对于企业来说逐渐难以适应快速变化的环境,低代码平台的出现有效缓和了当下的开发困境.而随着低代码技术的不断成熟,越来越多的企业 ...

  3. 龙蜥社区开源 coolbpf,BPF 程序开发效率提升百倍

    引言 BPF 是一个新的动态跟踪技术,目前这项技术正在深刻的影响着我们的生产和生活.BPF 在四大应用场景发挥着巨大作用: 系统故障诊断:它可以动态插桩透视内核. 网络性能优化:它可以对接收和发送的网 ...

  4. 思迈特软件Smartbi:掌控生产状况,报表开发效率提升30倍的秘密

    大数据给各个行业发展带来了新的机遇和挑战,烟草作为对国家财政税收贡献极大的传统行业,也开始探索大数据采集.分析和应用.从烟草行业的营销.物流.生产环节入手,利用大数据分析的报表工具为烟草企业经营决策提 ...

  5. 开发效率提升15倍!批流融合实时平台在好未来的应用实践

    简介:本文由好未来资深数据平台工程师毛祥溢分享,主要介绍批流融合在教育行业的实践.内容包括两部分,第一部分是好未来在做实时平台中的几点思考,第二部分主要分享教育行业中特有数据分析场景. 摘要:本文由好 ...

  6. 揭秘Android开发效率提升多倍的利器;Gradle

    Gradle是什么? Gradle是一种构建语言,目前是Android的默认构建工具,我们编写的编译脚本,其实就是玩Gradle的API,所以从它更底层的意义上看,是一个编程框架. 因为涉及的内容很多 ...

  7. 开发效率提升50%以上,爱奇艺官网主站的Nuxt实践

    01 背景 让每一个用户获取到稳定.及时的页面体验,是前端工程师们一直以来努力的方向. 作为一个拥有丰富内容资源的视频网站,爱奇艺官网主站需要频繁进行节目上线或者下线.各种活动配置等操作调整,对于页面 ...

  8. 不用亲手搭建型了!华人博士提出few-shot NAS,效率提升10倍

    [导读]你能找到最优的深度学习模型吗?还是说你会「堆积木」?最近,伍斯特理工学院华人博士在ICML 2021上发表了一篇文章,提出一个新模型few-shot NAS,效率提升10倍,准确率提升20%! ...

  9. 学会针对永洪API接口的性能测试,工作效率提升百倍

    性能测试是指针对产品的业务场景,通过设计场景和压力,对产品进行高并发量.大数据量的测试,主要目的是为了确定产品在高并发情况下的各项指标:平均处理时间,QPS,网络IO,磁盘读写等.永洪BI具有高耦合性 ...

最新文章

  1. 面试官问:服务的心跳机制与断线重连,Netty底层是怎么实现的?懵了
  2. k8S中的MySQL如何扩容_Kubernetes的etcd多节点扩容实战技巧
  3. Havel-Hakimi定理
  4. cookie存值和page分页
  5. C#编程利器之五:集合对象(Collections)
  6. 爬虫项目(四)---采集从01月22日以来全国各省疫情数据
  7. 一文搞懂JVM架构和运行时数据区,全网最新
  8. js 判断 浏览器 是否为 微信 浏览器
  9. 什么是word2vector
  10. 高仿人人android梦想版终极源码发送,人人Android客户端梦想版发布
  11. SEO优化篇 - 搜索引擎抓取href=#!锚点
  12. 12.go 源码文件
  13. iOS runtime实用篇解决常见Crash
  14. java创建环境变量是用户还是系统_5.Java环境变量配置
  15. 基于HTML仿华为手机网站电商项目的设计与实现
  16. 微信小程序图片自适应屏幕大小真的有效
  17. 学生网页作业——仿华为手机电子商城 (1页) HTML+CSS+JavaScript html网页制作期末大作业成品_网页设计期末作业
  18. 计算机c盘垃圾,详解win7怎么清理C盘垃圾
  19. html头像生成器,2020头像生成器
  20. 我所理解的JS ~~运算符

热门文章

  1. datagrid里面某一行双击打开代码
  2. UA OPTI512R 傅立叶光学导论 衍射例题
  3. UA MATH563 概率论的数学基础I 概率空间1 基本概念
  4. 组合恒等式2 五个基本的组合恒等式 更复杂的技巧与例题
  5. UA MATH636 信息论2 数据压缩
  6. UA Stat PhD Qualify Problems for Finite Sample Space Probability
  7. 工作四年的php程序员自述 一路走过来的风风雨雨
  8. 关于变量作用域的一点整理
  9. [jquery]if条件句
  10. [疑问]您没有调试该服务器的权限。验证您是服务器上Debuger Users组的成员。...