作者 | 猪哥

来源 | 裸睡的猪(ID:IT--Pig)

【导读】第一章主要讲解爬虫相关的知识如:http、网页、爬虫法律等,让大家对爬虫有了一个比较完善的了解和一些题外的知识点。今天这篇文章将是我们第二章的第一篇,我们从今天开始就正式进入实战阶段,后面将会有更多的实际案例。

爬虫系列文章的第一篇,猪哥便为大家讲解了HTTP原理,很多人好奇:好好的讲爬虫和HTTP有什么关系?其实我们常说的爬虫(也叫网络爬虫)就是使用一些网络协议发起的网络请求,而目前使用最多的网络协议便是HTTP/S网络协议簇。

一、Python有哪些网络库

在真实浏览网页我们是通过鼠标点击网页然后由浏览器帮我们发起网络请求,那在Python中我们又如何发起网络请求的呢?答案当然是库,具体哪些库?猪哥给大家列一下:

  • Python2: httplib、httplib2、urllib、urllib2、urllib3、requests

  • Python3: httplib2、urllib、urllib3、requests

Python网络请求库有点多,而且还看见网上还都有用过的,那他们之间有何关系?又该如何选择?

  • httplib/2:

这是一个Python内置http库,但是它是偏于底层的库,一般不直接用。

而httplib2是一个基于httplib的第三方库,比httplib实现更完整,支持缓存、压缩等功能。

一般这两个库都用不到,如果需要自己 封装网络请求可能会需要用到。

  • urllib/urllib2/urllib3:

urlliib是一个基于httplib的上层库,而urllib2和urllib3都是第三方库,urllib2相对于urllib增加一些高级功能,如:HTTP身份验证或Cookie等,在Python3中将urllib2合并到了urllib中。urllib3提供线程安全连接池和文件post等支持,与urllib及urllib2的关系不大。

  • requests:

requests库是一个基于urllib/3的第三方网络库,它的特点是功能强大,API优雅。由上图我们可以看到,对于http客户端python官方文档也推荐我们使用requests库,实际工作中requests库也是使用的比较多的库。

综上所述,我们选择选择requests库作为我们爬虫入门的起点。另外以上的这些库都是同步网络库,如果需要高并发请求的话可以使用异步网络库:aiohttp,这个后面猪哥也会为大家讲解。

二、requests介绍

希望大家永远记住:学任何一门语言,都不要忘记去看看官方文档。也许官方文档不是最好的入门教程,但绝对是最新、最全的教学文档!

1.首页

requests的官方文档(目前已支持中文)链接:

http://cn.python-requests.org

源代码地址:

https://github.com/kennethreitz/requests

从首页中让HTTP服务人类这几个字中我们便能看出,requests核心宗旨便是让用户使用方便,间接表达了他们设计优雅的理念。


注:PEP 20便是鼎鼎大名的Python之禅。

警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症、冗余代码症、重新发明轮子症、啃文档症、抑郁、头疼、甚至死亡。

2.功能特性

都说requests功能强大,那我们来看看requests到底有哪些功能特性吧:

  • Keep-Alive & 连接池

  • 国际化域名和 URL

  • 带持久 Cookie 的会话

  • 浏览器式的 SSL 认证

  • 自动内容解码

  • 基本/摘要式的身份认证

  • 优雅的 key/value Cookie

  • 自动解压

  • Unicode 响应体

  • HTTP(S) 代理支持

  • 文件分块上传

  • 流下载

  • 连接超时

  • 分块请求

  • 支持 .netrc

requests 完全满足今日 web 的需求。Requests 支持 Python 2.6—2.7以及3.3—3.7,而且能在 PyPy 下完美运行。

三、安装requests


pip 安装:

pip install requests

如果是pip3则使用

pip3 install requests

如果你使用anaconda则可以

conda install requests

如果你不想用命令行,可在pycharm中这样下载库

四、爬虫流程

下图是猪哥之前工作总结的一个项目开发流程,算是比较详细,在开发一个大型的项目真的需要这么详细,不然项目上线出故障或者修改需求都无法做项目复盘,到时候程序员就有可能背锅祭天。。。

言归正传,给大家看项目的开发流程是想引出爬虫爬取数据的流程:

  1. 确定需要爬取的网页

  2. 浏览器检查数据来源(静态网页or动态加载)

  3. 寻找加载数据url的参数规律(如分页)

  4. 代码模拟请求爬取数据

五、爬取某东商品页

猪哥就以某东商品页为例子带大家学习爬虫的简单流程,为什么以某东下手而不是某宝?因为某东浏览商品页不需要登录,简单便于大家快速入门!

1.第一步:浏览器中找到你想爬取的商品




ps:猪哥并不是在开车哦,为什么选这款商品?因为后面会爬取这款商品的评价做数据分析,是不是很刺激!

2.第二步:浏览器检查数据来源

打开浏览器调试窗口是为了查看网络请求,看看数据是怎么加载的?是直接返回静态页面呢,还是js动态加载呢?

鼠标右键然后点检查或者直接F12即可打开调试窗口,这里猪哥推荐大家使用Chrome浏览器,为什么?因为好用,程序员都在用!具体的Chrome如何调试,大家自行网上看教程!

打开调试窗口之后,我们就可以重新请求数据,然后查看返回的数据,确定数据来源。

3.第三步:寻找加载数据url的参数规律

我们可以看到第一个请求链接:https://item.jd.com/1263013576.html 返回的数据便是我们要的网页数据。因为我们是爬取商品页,所以不存在分页之说。

当然价格和一些优惠券等核心信息是通过另外的请求加载,这里我们暂时不讨论,先完成我们的第一个小例子!

4.第四步:代码模拟请求爬取数据

获取url链接之后我们来开始写代码吧

import requestsdef spider_jd():  """爬取京东商品页""" url = 'https://item.jd.com/1263013576.html'  try:    r = requests.get(url)        # 有时候请求错误也会有返回数据  # raise_for_status会判断返回状态码,如果4XX或5XX则会抛出异常   r.raise_for_status()    print(r.text[:500])    except:  print('爬取失败')if __name__ == '__main__':   spider_jd()

检查返回结果

至此我们就完成了某东商品页的爬取,虽然案例简单,代码很少,但是爬虫的流程基本差不多,希望想学爬虫的同学自己动动手实践一把,选择自己喜欢的商品抓取一下,只有自己动手才能真的学到知识!

六、requests库介绍

上面我们使用了requests的get方法,我们可以查看源码发现还有其他几个方法:post、put、patch、delete、options、head,他们就是对应HTTP的请求方法。

这里简单给大家列一下,后面会用大量的案例来用而后学,毕竟枯燥的讲解没人愿意看。

requests.post('http://httpbin.org/post', data = {'key':'value'})
requests.patch('http://httpbin.org/post', data = {'key':'value'})
requests.put('http://httpbin.org/put', data = {'key':'value'})
requests.delete('http://httpbin.org/delete')
requests.head('http://httpbin.org/get')
requests.options('http://httpbin.org/get')

注:httpbin.org是一个测试http请求的网站,能正常回应请求

对于HTTP的几种请求方法,没做过RestFul API的同学并不是很清楚每个请求方式表达的含义,这里给大家列一下:

  • GET:

    获取用户列表:

    http://project.company.com/api/v1/users

    • GET:

      获取单个用户:

      http://project.company.com/api/v1/users/{uid}

    • POST:

      创建单个用户:

      http://project.company.com/api/v1/users/{uid}

    • PUT:

      完全替换用户:

      http://project.company.com/api/v1/users/{uid}

    • PATCH:

      局部更新用户:

      http://project.company.com/api/v1/users/{uid}

    • DELETE:

      删除单个用户:

      http://project.company.com/api/v1/users/{uid}

想了解requests更多使用方法请参考:

http://cn.python-requests.org

后面猪哥也会用大量案例来一点一点学习requests库的一些使用技巧。

七、总结

今天为大家简单介绍了一下这个非常重要的库:requests,requests可以胜任很多简单的爬虫需求,它强大的功能以及优美的api得到一致的认同。

有人多同学会问:爬虫到什么境界才算是入门?你会熟练使用requests库去实现一些简单的爬虫功能就算入门,并不是说需要会各种框架才算是入门,相反能使用低级工具实现功能的才更具潜力!

如果你有 有趣的爬虫案例或者想法,务必在下方留言,让我看看你们的骚操作~

(*本文为 Python大本营转载文章,转载请联系作者)

精彩推荐

“只讲技术,拒绝空谈”!2019 AI开发者大会将于9月6日-7日在北京举行!这一届AI开发者大会有哪些亮点?一线公司的大牛们都在关注什么?AI行业的风向是什么?2019 AI开发者大会,倾听大牛分享,聚焦技术实践,和万千开发者共成长!

目前,大会盲订票限量发售中~扫码购票,领先一步!

推荐阅读:

  • 干货 | Python后台开发的高并发场景优化解决方案

  • 200行代码实现一个滑动验证码

  • 爬虫到底违法吗?这位爬虫工程师给出了答案

  • 收藏!本、硕、博、程序员必备神器

  • 阿里巴巴杨群:高并发场景下Python的性能挑战

  • 24式,加速你的Python

  • Python从入门到精通,这篇文章为你列出了25个关键技术点(附代码)

  • 500行Python代码打造刷脸考勤系统

你点的每个“在看”,我都认真当成了喜欢

Python爬虫的起点,一文轻松入门相关推荐

  1. python爬虫获取起点中文网人气排行Top100(快速入门,新手必备!)

    本篇博客小菌为大家带来的是用python爬虫获取起点中文网人气排行Top100的分享,希望大家能在学习的过程中感受爬虫的魅力!         我们先根据网址https://www.qidian.co ...

  2. pythonurllib爬虫教学_Python学习教程:这里是Python爬虫的起点,抢占资源啦

    原标题:Python学习教程:这里是Python爬虫的起点,抢占资源啦 今天跟大家出的这篇文章,是从爬虫的起点开始讲起,这里的Python学习教程,一篇文章带你贯穿爬虫始末!之前也够跟大家出过相关的P ...

  3. 这里是Python爬虫的起点,抢占资源啦(Python学习教程)

    今天跟大家出的这篇文章,是从爬虫的起点开始讲起,这里的Python学习教程,一篇文章带你贯穿爬虫始末!之前也够跟大家出过相关的Python相关的Python学习教程,伙伴们也可以翻阅一下以前的! 爬虫 ...

  4. python爬虫爬取百度文档

    使用python爬虫爬取百度文档文字 话不多说,直接上代码! import requests import reheaders = {"User-Agent": "Moz ...

  5. Python 爬虫中国知网论文过程中遇到的坑及解决办法

    假期,老师给布置了 Python 爬虫中国知网论文的任务,目前实现了登录和搜索功能,先写一下遇到的坑和解决办法吧. Python 爬虫中国知网论文过程中遇到的坑及解决办法 一. selenium 模块 ...

  6. Python爬虫的起点

    第一章主要讲解爬虫相关的知识如:http.网页.爬虫法律等,让大家对爬虫有了一个比较完善的了解和一些题外的知识点. 今天这篇文章将是我们第二章的第一篇,我们从今天开始就正式进入实战阶段,后面将会有更多 ...

  7. Python爬虫的起点!学爬虫从起点开始!

    第一章主要讲解爬虫相关的知识如:http.网页.爬虫法律等,让大家对爬虫有了一个比较完善的了解和一些题外的知识点. 今天这篇文章将是我们第二章的第一篇,我们从今天开始就正式进入实战阶段,后面将会有更多 ...

  8. Python爬虫扩展库scrapy选择器用法入门(一)

    关于BeutifulSoup4的用法入门请参考Python爬虫扩展库BeautifulSoup4用法精要,scrapy爬虫案例请参考Python使用Scrapy爬虫框架爬取天涯社区小说"大宗 ...

  9. python语言命名规则-一文轻松掌握python语言命名规范规则

    和C/C++.Java等语言一样,python在命名上也有一套约定俗成的规则,符合规范的命名可以让程序的可读性大大增加,从而使得代码的逻辑性增强,易于自己和其他协作者在以后的拓展中理解代码的意义,从而 ...

最新文章

  1. centos7安装pyenv
  2. Cloud for Customer根据后台数据实时刷新的逻辑调试
  3. Docker-machine创建虚机时停在虚机启动的提示上,并且创建的虚机显示Ip Not found...
  4. 史上最强技术电信诈骗蔓延!无法防范!只能等死!
  5. 用命令行查看mysql,利用命令行查看Mysql数据库
  6. 网件WNDR4300刷openwrt/LEDE固件
  7. 量子计算机交叉学,人工智能与量子物理交叉研究 有多少激动人心的事
  8. 每日一诗词 —— 临江仙·滚滚长江东逝水
  9. P3545 [POI2012]HUR-Warehouse Store [堆贪心]
  10. 「测试人的恶梦」测试用例设计之电梯、杯子、桌子、椅子、洗衣机
  11. 家里用服务器放在哪个位置,家用路由器放在什么位置比较合理?
  12. Linux | 可重入函数 | volatile | SIGCHLD信号
  13. 建网站选择网络诚信专属.xin域名,诚信赢天下!
  14. 深度特征融合---高低层(多尺度)特征融合
  15. Attiny416的复位系统
  16. 自学者福利!知乎上已获千赞,原理+实战+视频+源码
  17. Java2实用教程第五版+第四章习题答案
  18. 跨境电商亚马逊运用淘宝无货源店群模式?三点不可为
  19. Android应用开发之AbsoluteLayout(绝对布局)
  20. python操作Excel格式与下载

热门文章

  1. Linux添加开机自启动应用
  2. 配置console口认证(华为/思科)
  3. 【ps合成】给男票做个Q版大头像
  4. Assignment写作怎么正确有效地阅读?
  5. 2021-2027全球与中国预调鸡尾酒市场现状及未来发展趋势
  6. python基于PHP+MySQL的连锁商店仓库管理系统
  7. [附源码]计算机毕业设计Python的连锁药店销售管理系统(程序+源码+LW文档)
  8. 机器学习:朴素贝叶斯
  9. php aes解密中文,PHP AES加密解密算法
  10. van访谈_谷歌业务分析师访谈