这个男人让你的爬虫开发效率提升8倍
他叫 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,要做的仅仅是两件事:
- 告诉你有这样一个工具,用来开发爬虫很轻松
- 告诉你它的官方文档很好,你去读就可以了
到此为止,本篇的目的已经达到。不过为了更有说服力,以及照顾到一些暂时还不需要但以后可能会去看的同学,我还是再啰嗦几句,演示下 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倍相关推荐
- 这个男人让你的python爬虫开发效率提升8倍
他叫 Kenneth Reitz.现就职于知名云服务提供商 DigitalOcean,曾是云计算平台 Heroku 的 Python 架构师,目前 Github 上 Python 排行榜第一的用户.( ...
- 自从用了低代码开发,开发效率提升10倍
"低代码"是近两年IT界最热门的话题之一.传统的应用开发对于企业来说逐渐难以适应快速变化的环境,低代码平台的出现有效缓和了当下的开发困境.而随着低代码技术的不断成熟,越来越多的企业 ...
- 龙蜥社区开源 coolbpf,BPF 程序开发效率提升百倍
引言 BPF 是一个新的动态跟踪技术,目前这项技术正在深刻的影响着我们的生产和生活.BPF 在四大应用场景发挥着巨大作用: 系统故障诊断:它可以动态插桩透视内核. 网络性能优化:它可以对接收和发送的网 ...
- 思迈特软件Smartbi:掌控生产状况,报表开发效率提升30倍的秘密
大数据给各个行业发展带来了新的机遇和挑战,烟草作为对国家财政税收贡献极大的传统行业,也开始探索大数据采集.分析和应用.从烟草行业的营销.物流.生产环节入手,利用大数据分析的报表工具为烟草企业经营决策提 ...
- 开发效率提升15倍!批流融合实时平台在好未来的应用实践
简介:本文由好未来资深数据平台工程师毛祥溢分享,主要介绍批流融合在教育行业的实践.内容包括两部分,第一部分是好未来在做实时平台中的几点思考,第二部分主要分享教育行业中特有数据分析场景. 摘要:本文由好 ...
- 揭秘Android开发效率提升多倍的利器;Gradle
Gradle是什么? Gradle是一种构建语言,目前是Android的默认构建工具,我们编写的编译脚本,其实就是玩Gradle的API,所以从它更底层的意义上看,是一个编程框架. 因为涉及的内容很多 ...
- 开发效率提升50%以上,爱奇艺官网主站的Nuxt实践
01 背景 让每一个用户获取到稳定.及时的页面体验,是前端工程师们一直以来努力的方向. 作为一个拥有丰富内容资源的视频网站,爱奇艺官网主站需要频繁进行节目上线或者下线.各种活动配置等操作调整,对于页面 ...
- 不用亲手搭建型了!华人博士提出few-shot NAS,效率提升10倍
[导读]你能找到最优的深度学习模型吗?还是说你会「堆积木」?最近,伍斯特理工学院华人博士在ICML 2021上发表了一篇文章,提出一个新模型few-shot NAS,效率提升10倍,准确率提升20%! ...
- 学会针对永洪API接口的性能测试,工作效率提升百倍
性能测试是指针对产品的业务场景,通过设计场景和压力,对产品进行高并发量.大数据量的测试,主要目的是为了确定产品在高并发情况下的各项指标:平均处理时间,QPS,网络IO,磁盘读写等.永洪BI具有高耦合性 ...
最新文章
- 面试官问:服务的心跳机制与断线重连,Netty底层是怎么实现的?懵了
- k8S中的MySQL如何扩容_Kubernetes的etcd多节点扩容实战技巧
- Havel-Hakimi定理
- cookie存值和page分页
- C#编程利器之五:集合对象(Collections)
- 爬虫项目(四)---采集从01月22日以来全国各省疫情数据
- 一文搞懂JVM架构和运行时数据区,全网最新
- js 判断 浏览器 是否为 微信 浏览器
- 什么是word2vector
- 高仿人人android梦想版终极源码发送,人人Android客户端梦想版发布
- SEO优化篇 - 搜索引擎抓取href=#!锚点
- 12.go 源码文件
- iOS runtime实用篇解决常见Crash
- java创建环境变量是用户还是系统_5.Java环境变量配置
- 基于HTML仿华为手机网站电商项目的设计与实现
- 微信小程序图片自适应屏幕大小真的有效
- 学生网页作业——仿华为手机电子商城 (1页) HTML+CSS+JavaScript html网页制作期末大作业成品_网页设计期末作业
- 计算机c盘垃圾,详解win7怎么清理C盘垃圾
- html头像生成器,2020头像生成器
- 我所理解的JS ~~运算符
热门文章
- datagrid里面某一行双击打开代码
- UA OPTI512R 傅立叶光学导论 衍射例题
- UA MATH563 概率论的数学基础I 概率空间1 基本概念
- 组合恒等式2 五个基本的组合恒等式 更复杂的技巧与例题
- UA MATH636 信息论2 数据压缩
- UA Stat PhD Qualify Problems for Finite Sample Space Probability
- 工作四年的php程序员自述 一路走过来的风风雨雨
- 关于变量作用域的一点整理
- [jquery]if条件句
- [疑问]您没有调试该服务器的权限。验证您是服务器上Debuger Users组的成员。...