Python爬虫的起点

第一章主要讲解爬虫相关的知识如:http、网页、爬虫法律等,让大家对爬虫有了一个比较完善的了解和一些题外的知识点。
[图片上传失败...(image-71593a-1562547202449)]

今天这篇文章将是我们第二章的第一篇,我们从今天开始就正式进入实战阶段,后面将会有更多的实际案例。

爬虫系列文章的第一篇,猪哥便为大家讲解了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实现更完整,支持缓存、压缩等功能。一般这两个库都用不到,如果需要自己 封装网络请求可能会需要用到。[图片上传失败...(image-7eb1f2-1562547202449)]
  • urllib/urllib2/urllib3:urlliib是一个基于httplib的上层库,而urllib2和urllib3都是第三方库,urllib2相对于urllib增加一些高级功能,如:HTTP身份验证或Cookie等,在Python3中将urllib2合并到了urllib中。urllib3提供线程安全连接池和文件post等支持,与urllib及urllib2的关系不大。[图片上传失败...(image-a7211d-1562547202449)]
  • 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 install requests

如果是pip3则使用

pip3 install requests

如果你使用anaconda则可以

conda install requests

如果你不想用命令行,可在pycharm中这样下载库
[图片上传失败...(image-96dee7-1562547202449)]

四、爬虫流程

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

[图片上传失败...(image-8b667b-1562547202449)]

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

  1. 确定需要爬取的网页
  2. 浏览器检查数据来源(静态网页or动态加载)
  3. 寻找加载数据url的参数规律(如分页)
  4. 代码模拟请求爬取数据

五、爬取某东商品页

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

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

[图片上传失败...(image-c06665-1562547202449)]
[图片上传失败...(image-be3a2-1562547202449)]
[图片上传失败...(image-ffd806-1562547202449)]
ps:猪哥并不是在开车哦,为什么选这款商品?因为后面会爬取这款商品的评价做数据分析,是不是很刺激!

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

打开浏览器调试窗口是为了查看网络请求,看看数据是怎么加载的?是直接返回静态页面呢,还是js动态加载呢?
[图片上传失败...(image-6adbd1-1562547202449)]
鼠标右键然后点检查或者直接F12即可打开调试窗口,这里猪哥推荐大家使用Chrome浏览器,为什么?因为好用,程序员都在用!具体的Chrome如何调试,大家自行网上看教程!

打开调试窗口之后,我们就可以重新请求数据,然后查看返回的数据,确定数据来源。
[图片上传失败...(image-13903f-1562547202449)]

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

我们可以看到第一个请求链接:https://item.jd.com/1263013576.html 返回的数据便是我们要的网页数据。因为我们是爬取商品页,所以不存在分页之说。
[图片上传失败...(image-66ef9c-1562547202449)]

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

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

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

import requests


def 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的请求方法。
[图片上传失败...(image-12bb23-1562547202449)]
这里简单给大家列一下,后面会用大量的案例来用而后学,毕竟枯燥的讲解没人愿意看。

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的同学并不是很清楚每个请求方式表达的含义,这里给大家列一下:

想了解requests更多使用方法请参考:http://cn.python-requests.org

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

七、总结

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • urllib and urllib2 区别 –博主提示:下面的是python2中的用法,python3需要做出相应...
    sunnyRube阅读 1,399评论 0 1
  • B/S 结构定义 浏览器-服务器(Browser/Server)结构,简称B/S结构,与C/S结构不同,其客户端不...
    semlinker阅读 1,586评论 2 12
  • Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scrapy,这里最后也详细...
    楚江数据阅读 1,461评论 0 6
  • 这是小洋子的日更小故事,也是一个名为努力的小故事…这还是一个和007和日更群和个人品牌群有关的小故事~ 今天,是小...
    章鱼小洋子阅读 2,628评论 40 34
  • 一 她和他五岁认识,二十五岁分开,这中间有20年他们一起走过,当时不觉得怎么样,现在才发现原来那甜蜜与忧伤交织的二...
    滢滢张阅读 628评论 0 4