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 :

pip install requests

或者:

easy_install requests

2、简单示例

requests 库的基础方法如下:

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

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

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

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

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

# -*- coding:UTF-8 -*-
import requests

if __name__ == '__main__':
    target = "http://fanyi.baidu.com/"
    req = requests.get(url = target)
    req.encoding = 'utf-8'
    print(req.text)

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

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

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

五、总结

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

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

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

  • https://blog.csdn.net/c406495762/article/details/78123502
  • https://blog.csdn.net/c406495762/article/details/58716886

来源:

https://cuijiahua.com/blog/2020/04/spider-6.html

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?