Python 网页下载

125 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情

网页下载详解

下载网页涉及对 URL 发出 HTTP GET 请求,这是所有网络浏览器的基本操作。我们首先快速回顾一下下载网页操作的不同部分,更具体的说,可以将其分为三个不同的部分:

  • 使用 HTTP 协议,这涉及请求的结构方式
  • 使用 GET 方法,这是最常见的 HTTP 方法
  • 描述页面地址的完整统一资源定位系统 (Uniform Resource Locator, URL),包括服务器(例如:www.example.com )和路径(例如:/page)。

用户通过浏览器发送请求,然后通过互联网路由到服务器并由服务器处理,然后服务器发送响应至浏览器(或客户端)。响应包含一个状态码(如果一切正确,响应码通常为 200 )以及带有响应结果的正文(通常是带有 HTML 页面的文本)。

网页下载的绝大部分由用于执行请求的 HTTP 客户端自动处理。在本节中,我们将学习如何发起一个简单 HTTP 请求以获取目标网页。

HTTP 请求和响应中也可以包含标头。标头中包含有关请求本身的重要信息,例如请求的总大小、内容的格式、请求的时间日期以及使用的浏览器或服务器。

使用 requests 库下载网页

本节,我们将使用 request 库实现网页下载,使用 request 库可以非常简单的获取网页非常简单。 requests 的安装与其它第三方库相同:

$ pip install requests

我们以下载掘金个人主页 juejin.cn/user/119674… 为例讲解如何使用 Python 下载网页。

首先,导入 requests 模块,定义所需下载网页 URL

>>> import requests
>>> url = 'https://juejin.cn/user/1196744246822605'

使用get方法向服务器发送请求。请求的操作非常简单,只需使用 GET 方法通过 URL 执行请求:

>>> response = requests.get(url)

检查返回的状态码:

>>> response.status_code
200

检查结果的内容:

>>> response.text
'<!doctype html>\n<html data-n-head-ssr lang="zh" data-n-head="%7B%22lang%22:%7B%22ssr%22:%22zh%22%7D%7D">\n  <head >\n    <title>盼小辉丶 的个人主页 - 动态 - 掘金</title><meta data-n-head="ssr" charset="utf-8">
...

下载结果

检查请求标头和响应标头:

>>> response.request.headers
{'User-Agent': 'python-requests/2.24.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
>>> response.headers
{'Server': 'Tengine', 'Content-Type': 'text/html; charset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Date': 'Fri, 05 Aug 2022 05:44:44 GMT', ...  'Timing-Allow-Origin': '*', 'EagleId': '6f3e6e2316596782834461481e'}

请求头和响应头

可以在 request 属性中检查完整的请求:

>>> response.request.url
'https://juejin.cn/user/1196744246822605'
>>> response.request
<PreparedRequest [GET]>