Python-101
  • 介绍
  • KickOff Party
    • 1.1 教学目的
    • 1.2 软件和工具
    • 1.3 课前自学
  • Python 简介
    • 2.1 数据工程介绍
    • 2.2 Python 介绍
    • 2.3 Python 语法
    • 2.4 Python 请求
    • 2.5 Python 语法进阶
  • 爬虫
    • 3.1 HTML
    • 3.2 爬虫实战
    • 3.3 选学:JSON 简介
    • 3.4 选学:爬虫的难点
  • 数据处理
    • 4.1 初见数据处理
    • 4.2 数据处理应用实例
    • 4.3 选学:Pandas
  • Demo练习
  • 大作业
  • 分享与后续学习建议
Powered by GitBook
On this page
  • HTTP 简介
  • 使用 Chrome 开发者工具查看请求
  • Requests 的使用

Was this helpful?

  1. Python 简介

2.4 Python 请求

Cooking time: 15 mins active / 20 mins passive

Tasks For Instructors: 请讲师简单介绍 Python 发请求,HTTP知识。 本节稍微了解一下便可

HTTP 简介

HTTP 是超文本传输协议(hypertext transfer protocol)的缩写。

(常见语病:「HTTP 协议」。「P」和「协议」同义重复了,只用「HTTP」即可)

HTTP 规定了客户端和服务器之间传输网页和文件的办法。

客户端:例如浏览器、爬虫、手机应用。 服务器:用网址定位,一般运行于一台电脑上的 80 或者 443 端口。

在 HTTP 语境下,网页或文件一般统称资源(resource)。

HTTP 请求由以下部分组成:

  • 请求行,包含请求动作(verb)和请求路径,HTTP 的版本,例如 GET /images/logo.gif HTTP/1.1

  • 多个请求头,例如告诉服务器我希望获得中文的响应 accept-language: zh

  • 一个空行

  • 可选的消息体 (body)

常用的 HTTP 请求动作(verb)有

  • GET 一般用来获取一个资源,例如 GET /images/logo.gif HTTP/1.1。

  • POST 一般用来提交一个资源,常用于表单提交或登录。

(verb 的使用只是一种惯例,也有网站不遵守的)

HTTP 响应由以下部分组成:

  • 响应行,包含 HTTP 版本和响应代码,例如 HTTP/2 200

  • 多个响应头,例如告诉客户端消息体的格式 content-type: image/gif

  • 一个空行

  • 可选的消息体

常见的响应代码

  • 2XX 正常工作,如 200 OK, 201 Created

  • 3XX 重定向,如 302 跳转,304 网页没变化

  • 4XX 客户端出问题了,如 400 非法请求,404 资源没找到

  • 5XX 服务器出问题了,如 500 服务器内部错误, 504 后台服务超时

使用 Chrome 开发者工具查看请求

打开菜单:视图 -> 开发者 -> 开发者工具,选择 "网络" 栏,刷新页面

Requests 的使用

import requests
response = requests.get('https://c.xkcd.com/random/comic/')
print(response.text) # 打印网页的 HTML 源代码

可以看到以 <!DOCTYPE html> 开头的 HTML 内容,下面我们先讲解一下 Python 进阶语法,然后再介绍如何从 HTML 中提取信息。

如果请求的是一张图片,图片文件往往包含大量的非字符数据,需要用 response.content 获得内容

response = requests.get('https://ws4.sinaimg.cn/large/006tNbRwly1fwict5oyqdj31kw1kw124.jpg')
with open("crawled_image.jpg", 'wb') as f:
    f.write(response.content)

因为写入的是二进制数据,这里的 open 使用了 'wb' 参数表明用二进制输出流写文件。

requests 还提供了方便的方法获取网页上的所有链接:

response.links
Previous2.3 Python 语法Next2.5 Python 语法进阶

Last updated 6 years ago

Was this helpful?

是一个方便的 HTTP 请求库。

Requests