0%

python网络爬虫之爬虫基础(下)

1.requests模块的安装与导入

前面内容讲到,网页爬虫能够获取网页上的信息,要使用Python来爬取网页内容,需要安装requests模块,该模块可以用于获取网络数据。

由于requests模块是Python的第三方模块,需要额外安装,安装requests模块非常简单,在电脑终端输入代码:pip install requests

  1. 前面介绍了URL结构。

    那么对于爬虫来说,要获取下图网页中的内容,就需要网页的URL。

    复制链接的方法如下图所示,打开网页,点击链接框,右键选择复制。
    https://nocturne-spider.baicizhan.com/2020/07/29/example-post-3/

    img

2.请求网页内容

  1. requests.get()函数可用于模拟浏览器请求网页的过程,在Python语言中使用该函数,就能够获取网页数据。

    get()函数中传入要访问网页的URL,就像浏览器打开URL一样。

    例如,获取夜曲编程首页的链接就要写:
    requests.get(“https://np.baicizhan.com/")

    img

    requests.get()是获取网页信息的主要函数,使用该函数获取案例网页的URL,会返回一个Response对象,也就是前面说到的响应消息。

    使用print输出响应消息会得到Response [200]表示响应消息中状态码为200,说明此次浏览器的请求执行成功。

    这里使用requests.get()方法获取案例URL网页数据,并输出返回内容。

  2. 前面提到requests.get()函数是模拟浏览器请求网页的过程,那么,怎样查看浏览器中的请求方法呢?

    复制的链接为https://nocturne-spider.baicizhan.com/2020/07/29/example-post-3/,总结上述步骤。

    关于浏览器,我们推荐使用Chrome浏览器。

    刚刚的操作步骤需要我们掌握,(现在看到的网页结构看起来确实有点复杂)。

    但是,不要着急,在后续的课程学习和项目练习中,你将逐渐熟悉并掌握网页结构。

    img

  3. 在浏览器中查看Response Headers中的信息就能够找到status:200,状态码200代表此次请求执行成功。

    img

    使用.status_code属性就可以查看状态码,这里输出的状态码数据类型是整型哦。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 使用import导入requests模块
    import requests

    # 将网页链接赋值给url
    url = "https://nocturne-spider.baicizhan.com/2020/07/29/example-post-3/"

    # 使用requests.get()方法获取url的内容,将结果赋值给response
    response = requests.get(url)

    # 使用.status_code属性获取状态码,并赋值给statusCode
    statusCode = response.status_code

    # 输出statusCode
    print(statusCode)
  4. 在前面的课程中学到状态码代表服务器执行的结果,状态码种类多样。

    例如:下面代码中的URL是错误的,当使用requests.get()请求URL时,就会返回404,404(Not Found)表示服务器无法找到请求的资源。

  5. 而只有状态码返回为200时,才能够成功获取到网页内容。

    为满足上面的运行逻辑,我们要使用条件判断语句if..else先判断状态码,当状态码等于200时,再进行下一步操作。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 使用import导入requests模块
    import requests

    # 将网页链接赋值给url
    url = "https://nocturne-spider.baicizhan.com/2020/07/29/example-post-3/"

    # 使用requests.get()方法获取url的内容,将结果赋值给response
    response = requests.get(url)

    # TODO 使用if语句判断.status_code属性获取的状态码等于200时
    if response.status_code == 200:
    # TODO 输出response.status_code
    print(response.status_code)
    # TODO 不满足条件时
    else:
    # TODO 输出:请求数据失败
    print("请求数据失败")

3.获取网页内容

  1. 通过请求URL,已经获取到了Web服务器返回的信息,那这些信息怎样才能呈现出来呢?

    这里就要用到.text属性,该属性能够将获取到的网页信息提取出来。

    由于网页内容较多,我们这里可以用切片的方法,先输出前1000个字符。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # 使用import导入requests模块
    import requests

    # 将网页链接赋值给url
    url = "https://nocturne-spider.baicizhan.com/2020/07/29/example-post-3/"

    # 使用requests.get()方法获取url的内容,将结果赋值给response
    response = requests.get(url)

    # 使用if语句判断.status_code属性获取的状态码等于200时
    if response.status_code == 200:
    # 使用.text属性获取网页前1000个字符的内容,并赋值给content
    content = response.text[:1000]
    # 输出content
    print(content)

    # 不满足if的条件时
    else:
    # 输出 请求数据失败
    print("请求数据失败")
  2. 仔细观察刚刚输出的内容,不像我们日常接触的Python语言。

    这是HTML语言,全称为HyperText Markup Language,超文本标记语言,它用来定义网页内容和结构。

    HTML是由一系列的标签组成,这些标签组合起来就是我们浏览器看到的网页。

    img

  3. 接下来会讲解HTML的标签和属性,后面课程会根据标签和属性去查找文本内容,HTML知识点我们了解即可。

    对照观察下图内容和右侧代码。

    img

    img

  4. 标签:是用来标记内容块的,主要有两种形式成对出现和单独出现。

    1. 成对出现的标签
      <开始标签>内容<结束标签>
      结束标签只比开始标签多一个斜杠”/“。img

    2. 1. <html></html>表明这是一个网页文档。
      
      2. <head></head>标签用于定义文档的头部信息,这些信息不会展示在网页中。
      
      3. <body></body>标签用于定义文档的主体,包含网页的图片、文字、链接、视频等多种展现形式。
      
      1
      2

      3. 单独标签
      第9、10、11行的<br>就是单独出现的标签,表示换行。 标签是可以嵌套的,例如<head>元素中嵌套了<title></title>成对标签。 在<body>元素中嵌套了多个成对标签和单独标签。
    3. 属性:用于丰富表现形式,一般放在开始标签里,并且以属性名=”属性值”的形式展现。

      例如:第7行<h1>标签中,align="center",这里center属性值的作用就是让h1标签的内容居中。

      属性还可以描述内容的颜色、边框等等。

      img右侧的内容,就是前面用.text属性获取到的网页源代码。

  5. 到这里我们就完成了网页爬虫基础内容的学习。再来思考课前要回答的问题:

    1. 爬虫的原理是什么
    2. 从哪里爬取网页内容
    3. 爬到的内容长什么

4.总结

HTML是构成网页的标记语言。

URL指定了要访问文档的具体地址。

HTTP协议规定了文档的传递方式。

爬虫就是根据URL,通过HTTP协议去获取HTML内容。

img

img