Python3 网络爬虫(一):初识网络爬虫之夜探老王家

2020年4月15日10:55:49 12 1,667 °C
摘要

网络爬虫很简单,我会用生动有趣的例子,为大家讲解 Python3 网络爬虫,绝对干货满满!

Python3 网络爬虫(一):初识网络爬虫之夜探老王家

一、前言

3年前,我在 csdn 写过 Python3 网络爬虫系列教程,经过三年的积累,累计阅读量近 90W

Python3 网络爬虫(一):初识网络爬虫之夜探老王家

同时,我也在 Github 开源了所有 Python3 网络爬虫代码,累积获得 10.3k+ 的 star,4.1k+ 的 fork。Python3 网络爬虫(一):初识网络爬虫之夜探老王家

可以说,这个系列教程算是比较成功的,在全国的开源网络爬虫教程项目中,也是排在前几名的。

但是,由于时间太长了,陆陆续续,很多实战示例也早已失效

Python3 网络爬虫(一):初识网络爬虫之夜探老王家

网络爬虫,是一门比较通用的基础技术,各个领域都会有所涉及,比如我做视觉算法的,也需要用到网络爬虫,例如调用 API 接口清洗数据等,这本质也都是一个小的爬虫程序。

为了提供各位更好的学习示例,我决定重写这一系列教程,对一些失效的示例,重新找例子,并查缺补漏,完善这一些列教程。

2020年,最新版的 Python3 网络爬虫实战系列教程,我会首发在公众号个人网站上。

公众号:

Python3 网络爬虫(一):初识网络爬虫之夜探老王家

个人网站:https://cuijiahua.com/

下面进入正题,回到3年前最初的起点,开启 Python3 网路爬虫实战的第一篇:初识网络爬虫。

二、网络爬虫简介

网络爬虫,也叫网络蜘蛛(Web Spider)。它根据网页地址(URL)爬取网页内容,而网页地址(URL)就是我们在浏览器中输入的网站链接。

例如:https://www.baidu.com

URL 专业一些的叫法是统一资源定位符(Uniform Resource Locator),它的一般格式如下(带方括号[]的为可选项):

protocol :// hostname[:port] / path / [;parameters][?query]#fragment

URL 的格式主要由前个三部分组成:

  • protocol:第一部分就是协议,例如百度使用的就是https协议;
  • hostname[:port]:第二部分就是主机名(还有端口号为可选参数),一般网站默认的端口号为80,例如百度的主机名就是www.baidu.com,这个就是服务器的地址;
  • path:第三部分就是主机资源的具体地址,如目录和文件名等。

网络爬虫就是根据这个 URL 来获取网页信息的。

还是,以百度为例,举个简单的例子:

http://www.baidu.com:80

https://www.baidu.com:443

这两个 URL 都可以打开网页,区别在于一个是 http 协议,一个是 https 协议。

http 协议默认使用的端口是 80,https 协议默认使用的端口是 443。

每一个 URL 的背后,其实都是对应着一台服务器的,甚至成千上万台。

通俗一点讲,URL 就是每个服务器的地址。例如,老王家住在北京市朝阳区老李家住在北京市海淀区

你想串门溜达去,就得通过这个 URL 家庭地址,找到他们。

如果有一天,你想去老王家,跟他老婆聊聊天,你仅仅知道老王家住在北京市朝阳区是不够的。

因为,你还得知道他家在哪个楼,几单元,几零几。

对应 ULR 上,也就是你光知道 hostname 不够,你还得有个更详细的地址,那就得补充 path:

https://cuijiahua.com/blog/spider/

比如,cuijiahua.com 是我的 hostname,想找到爬虫系列的文章,还得去 blog 目录下的 spider 目录下找,这个就是具体的地址 path。

老王家的详细家庭住址知道了,如果你还想夜晚去,并且趁着老王不在,与老王的老婆聊聊天

Python3 网络爬虫(一):初识网络爬虫之夜探老王家

那这个情况就有点复杂了。不仅需要知道 protocol 、hostname 和 path,你还得满足一些条件,这个条件就是 [;parameters][?query]#fragment,这些东西。

比如,为了完成此次夜探老王家的目标,你可能大概需要这样的 URL:

https://chaoyanglaowang.com/2haolou/3danyuan/702/s?laowangzaiji=0&baitian=0

这个 URL 的意思就是,baitian=0表明是晚上,laowangzaiji=0表示老王不在家,在满足这个条件的时候,你进了2号楼3单元702的朝阳区老王家,就可以夜探老王家了。

?laowangzaiji=0&baitian=0,这是一种询问,在这个条件下访问。

通俗易懂了吧!

三、审查元素

在讲解爬虫内容之前,我们需要先学习一项写爬虫的必备技能:审查元素。

在浏览器的地址栏输入 URL 地址,在网页处右键单击,找到检查。(不同浏览器的叫法不同,Chrome 浏览器叫做检查,Firefox 浏览器叫做查看元素,但是功能都是相同的)

Python3 网络爬虫(一):初识网络爬虫之夜探老王家

我们可以看到,右侧出现了一大推代码,这些代码就叫做 HTML 。什么是 HTML ?举个容易理解的例子:我们的基因决定了我们的原始容貌,服务器返回的 HTML 决定了网站的原始容貌。

Python3 网络爬虫(一):初识网络爬虫之夜探老王家

为啥说是原始容貌呢?因为人可以整容啊!扎心了,有木有?那网站也可以"整容"吗?可以!请看下图:

Python3 网络爬虫(一):初识网络爬虫之夜探老王家

我能有这么多钱吗?显然不可能。我是怎么给网站"整容"的呢?就是通过修改服务器返回的 HTML 信息。我们每个人都是"整容大师",可以修改页面信息。我们在页面的哪个位置点击审查元素,浏览器就会为我们定位到相应的 HTML 位置,进而就可以在本地更改 HTML 信息。

再举个小例子:我们都知道,使用浏览器"记住密码"的功能,密码会变成一堆小黑点,是不可见的。可以让密码显示出来吗?可以,只需给页面"动个小手术"!以淘宝为例,在输入密码框处右键,点击检查。

Python3 网络爬虫(一):初识网络爬虫之夜探老王家

可以看到,浏览器为我们自动定位到了相应的 HTML 位置。将下图中的 password 属性值改为 text属性值(直接在右侧代码处修改):

Python3 网络爬虫(一):初识网络爬虫之夜探老王家

我们让浏览器记住的密码就这样显现出来了:

Python3 网络爬虫(一):初识网络爬虫之夜探老王家

说这么多,什么意思呢?浏览器就是作为客户端从服务器端获取信息,然后将信息解析,并展示给我们的。我们可以在本地修改 HTML 信息,为网页"整容",但是我们修改的信息不会回传到服务器,服务器存储的 HTML 信息不会改变。刷新一下界面,页面还会回到原本的样子。这就跟人整容一样,我们能改变一些表面的东西,但是不能改变我们的基因。

四、简单实例

网络爬虫的第一步就是根据 URL ,获取网页的 HTML 信息。在 Python3 中,可以使用 urllib.request requests 进行网页爬取。

  • urllib 库是 Python 内置的,无需我们额外安装,只要安装了 Python 就可以使用这个库。
  • requests 库是第三方库,需要我们自己安装。

requests 库强大好用,后续文章的实例,也都是以此为基础进行讲解。requests 库的 github 地址:

https://github.com/requests/requests

1、requests 安装

在 cmd 中,使用如下指令安装 requests :

或者:

2、简单示例

requests 库的基础方法如下:

Python3 网络爬虫(一):初识网络爬虫之夜探老王家

官方中文教程地址:点击查看

requests 库的开发者为我们提供了详细的中文教程,查询起来很方便。

首先,让我们看下 requests.get() 方法,它用于向服务器发起 GET 请求,不了解 GET 请求没有关系。

我们可以这样理解:get 的中文意思是得到、抓住,那这个 requests.get() 方法就是从服务器得到、抓住数据,也就是获取数据。让我们看一个例子(以fanyi.baidu.com为例)来加深理解:

requests.get() 方法必须设置的一个参数就是 url ,因为我们得告诉 GET 请求,我们的目标是谁,我们要获取谁的信息。运行程序看下结果:

Python3 网络爬虫(一):初识网络爬虫之夜探老王家

这,就是最简单的,网络爬虫。

五、总结

本文对网络爬虫的基础进行了讲解,此系列文章为该系列的开篇之作。

后续的文章,会以生动有趣的实例,带大家一起玩转 Python3 网络爬虫。

参考链接(我参考我自己):

  • https://blog.csdn.net/c406495762/article/details/78123502
  • https://blog.csdn.net/c406495762/article/details/58716886
weinxin
微信公众号
分享技术,乐享生活:微信公众号搜索「JackCui-AI」关注一个在互联网摸爬滚打的潜行者。
Jack Cui

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:12   其中:访客  6   博主  6

    • avatar 嘿嘿哈哈二傻 来自天朝的朋友 谷歌浏览器 Windows 10 湖北省荆州市 电信 2

      我要搞事情,下面的我都要:
      – 文本爬虫:小说,统计数据
      – 图片爬虫:图片(包括动图)
      – 视频爬虫
      – 购物网站爬虫
      请大佬在做爬虫教程的时候,记得着重讲讲如何解析html页面。
      谢谢大佬,辛苦啦!

      • avatar violinlee 来自天朝的朋友 火狐浏览器 Windows 10 广东省广州市 珠江宽频 0

        大佬棒棒,跟着你学!

        • avatar fight.. 来自天朝的朋友 谷歌浏览器 Windows 7 广西河池市 电信 0

          博主又更新了,赞!!!! 三年前多亏你的博客,才带我进入了爬虫行业,感谢!话说回来,博主,相比三年前,现在对于采集,aiohttp貌似比requests更好用,基于异步的aiomultiprocess,如果这一次更新会有些新的知识点,可以不可以讲讲你对aiohttp的理解

            • avatar Jack Cui Admin 来自天朝的朋友 谷歌浏览器 Windows 10 北京市 中国电信北京研究院

              @fight.. 哈哈,AIOHTTP好东西啊,我看一看~!感谢啦!

            • avatar 小迷弟 来自天朝的朋友 谷歌浏览器 Windows 10 山东省 电信 1

              这个系列多久一更新呀,学习中。。。

                • avatar Jack Cui Admin 来自天朝的朋友 谷歌浏览器 Windows 10 北京市 中国电信北京研究院

                  @小迷弟 下周一更新。

                • avatar Pluto4U 来自天朝的朋友 谷歌浏览器 Mac OS X 10_14_6 浙江省杭州市 电信 4

                  刚学完一些爬虫基础,想实现爬取淘宝某个店铺的商品信息爬取并保存到本地的数据库,不知能否写一下类似的案例

                    • avatar Jack Cui Admin 来自天朝的朋友 谷歌浏览器 Mac OS X 10_14_4 北京市 百度网讯科技联通节点

                      @Pluto4U 后面会写的~

                    • avatar Mr.Chan 来自天朝的朋友 谷歌浏览器 Windows 10 北京市 教育信息网 0

                      博主
                      您好
                      之前我在https://www.w3cschool.cn/python3/python3-enbl2pw9.html网站,学习如何获取小说。
                      运行结果才获取最后一段,估计失效。不知啥原因,下面各种注明网站,才找到贵网站。
                      我对数据分析方面感兴趣,本人是聋人,跟正常人相比,无论哪方面,如学习能力,理解能力等等,不是很高,我得慢慢学习ing
                      希望博主能及时更新,谢谢。我已经关注公众号,嘻嘻~~

                        • avatar Jack Cui Admin 来自天朝的朋友 谷歌浏览器 Mac OS X 10_14_4 北京市 百度网讯科技联通节点

                          @Mr.Chan 感谢支持~加油哦!祝福~