Python爬虫教程

第一章: 初学乍练-Python快速入门

第二章: 初窥门径-从全局把握网络爬虫

第三章: 爬虫数据-网页与JSON

第四章: 爬虫核心-HTTP协议

第五章: 手到擒来-数据的抓包

第六章: 利刃出鞘-HTTP请求库

第七章: 尘埃落定-数据的解析

第八章: 逆向初探-JS逆向

第九章: 爬虫进阶-Selenium, 中间人拦截

第十章:斗转星移-常用的反爬策略及应对方法

首页 > Python爬虫教程 > 第二章: 初窥门径-从全局把握网络爬虫 > 2.3节: 使用requests发起HTTP请求

2.3节: 使用requests发起HTTP请求

薯条老师 2021-02-07 10:03:46 236447 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

2.3.1 requests模块简介

2.2节中讲到了HTTP协议,那么该如何模拟客户端的HTTP请求呢?这里先简单介绍下Python中的requests模块,使用该模块提供的方法就可以模拟客户端的HTTP请求。我们在学习Python模块时,可以先从它的名称含义来进行初步理解。requests是一个英文单词,它的中文释义就有请求的意思。

HTTP协议的请求方法主要有:GET,POST, PUT,DELETE。在本节教程中,会详细地讲解如何利用Python中的requests模块发送HTTP GET,以及POST请求。

requests模块遵循的Python开发哲学:

Beautiful is better than ugly.(美丽优于丑陋)

Explicit is better than implicit.(直白优于含蓄)

Simple is better than complex.(简单优于复杂)

Complex is better than complicated.(复杂优于繁琐)

Readability counts.(可读性很重要)

2.3.2 requests模块的安装

安装requests模块非常简单,直接使用Python中的PIP大法。此法名声远播,建议每一个Python程序员都学会它。我们现在进入windows命令行,在命令行中执行如下命令:

pip install requests

命令执行成功以后,进入Python交互模式,在交互模式中执行import requests,以测试是否安装成功:

D:\>python

Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)] on win32

Type "help", "copyright", "credits" or "license" for more information.

>>> import requests

同学们在进行以上操作之前,必须先在windows中安装好Python解释器,以及将Python解释器添加至系统环境变量PATH中。对于Python的安装,windows命令行的操作,Python的交互模式,pip命令的用法不是很熟悉的同学,可以学习薯条老师的Python零基础入门指南》这本教程。关注微信公众号:【薯条编程】,即可领取这本PDF电子书。

2.3.3 requests的get方法

requests模块的get方法,可以直接在Python交互模式中进行查找:

>>> import requests

>>> help(requests.get)

Help on function get in module requests.api:

 

get(url, params=None, **kwargs)

    Sends a GET request.

 

    :param url: URL for the new :class:`Request` object.

    :param params: (optional) Dictionary, list of tuples or bytes to send

        in the query string for the :class:`Request`.

    :param \*\*kwargs: Optional arguments that ``request`` takes.

    :return: :class:`Response <Response>` object

:rtype: requests.Response

从交互模式的输出可知,get方法主要定义了两个参数,分别是url以及params。url参数用来传递字符串类型的URL。params参数用来定义GET请求中的参数,它是一个字典类型, 默认值为None。get方法的返回值是一个Response对象,Response对象的常用属性见下表:

属性名

描述

encoding

表示响应内容的字符编码,也可以直接对该属性赋值,以设置编码。

text

返回字符串类型的响应体

content

返回字节流类型的响应体

headers

字典类型,存储的是http服务器的响应头

status_code

表示http服务器的响应状态码

ok

布尔值,表示是否操作成功

requests.get方法的代码实例:

# __desc__ = 通过requests模块的get方法发起HTTP GET请求
 
# 使用requests模块,必须先执行import进行导出
import requests
 
# www.chipscoco.com为薯条老师的个人博客,可授权进行合法抓取
URL = "http://chipscoco.com/?id=9"
response = requests.get(URL)
 
# http状态码为200,说明请求成功
if response.status_code == 200:
    # 输出http服务器的响应头
    print(response.headers)
    # 输出字符串类型的响应体
    print(response.text)
    
    """
    response.headers的输出:
    {'Date': 'Sun, 21 Jun 2020 00:12:17 GMT', 'Server': 'Apache/2.4.6 (CentOS) PHP/5.4.16', 
    'X-Powered-By': 'PHP/5.4.16', 'X-XSS-Protection': '1; mode=block', 'Keep-Alive': 'timeout=5, max=100', 
    'Connection': 'Keep-Alive', 'Transfer-Encoding': 'chunked', 'Content-Type': 'text/html; charset=utf-8'}
    """

response.text的输出为网页的HTML源码,源码部分内容如下图所示:

1612663962(1).jpg 

爬虫程序在抓取网页成功以后,需要进一步对HTML内容进行解析,以获取所需的数据。关于HTML的解析,会在后续的教程中进行详细讲解。同学们现在只需初步掌握requests模块的get方法,以理解爬虫的抓取过程。

2.3.4 requests的post方法

requests模块的post方法,同样可以在交互模式中进行查找:

>>> import requests

>>> help(requests.post)

Help on function post in module requests.api:

 

post(url, data=None, json=None, **kwargs)

    Sends a POST request.

 

    :param url: URL for the new :class:`Request` object.

    :param data: (optional) Dictionary, list of tuples, bytes, or file-like

        object to send in the body of the :class:`Request`.

    :param json: (optional) json data to send in the body of the :class:`Request`.

    :param \*\*kwargs: Optional arguments that ``request`` takes.

    :return: :class:`Response <Response>` object

    :rtype: requests.Response:rtype: requests.Response

从help的输出可知,post方法主要定义了三个参数,分别是url,data, json。url参数用来传递字符串类型的URL。data是一个可选参数,用来传递字典,参数列表,字节流,以及文件类型的对象。json也是一个可选参数,会自动将字典类型的对象转换为json格式。

data参数与json参数均用来定义POST请求中的请求参数,关于data参数与json参数的区别,会在后续教程中进行详细讲解。post方法的返回值是一个Response对象,Response对象的常用属性,已在2.3.3节中进行讲解,不再赘述。

requests.post方法的代码实例:

# __desc__ = 通过requests模块的post方法发起HTTP POST请求
 
import requests
 
""" 
(1) 站点的登录通常发起的是HTTP的POST请求
在本节的代码实例中,以京东商城的登录作为例子
"""
 
URL = "https://passport.jd.com/new/login.aspx"
 
"""
(1) 定义一个全局的data对象,用来传递登录请求所需传递的参数
(2) 京东商城PC页面的登录远不止这些参数,而且涉及到参数的加密,在本节的代码中,仅演示如何发起POST请求,
     在后续的教程中会详细讲解如何模拟站点登录
"""
 
data = {
"uuid": "7c52477f-66af-4902-8429-51d51f6b38c4",
"loginname": "18819353206",
"nloginpwd":"Thvm9iAfZ/MhW8VbEDSscBJtwxLLXCKki4g="
}
 
# 发起POST请求,参数data用来传递请求参数
response = requests.post(URL, data)
 
# 登录失败,代码实例仅演示如何发起POST请求

2.3.5 知识要点

(1) 在交互模式中可通过help来查看模块方法的定义

(2) 通过requests模块,可以向http服务器发起http请求。

(3) 使用requests模块的get方法发起HTTP GET请求,使用requests模块的post方法发起HTTP POST请求

2.3.6 最具实力的小班培训

薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,包拿Offer
(3) 数据分析高薪就业班,月薪11K-15K, 免费领取课程大纲
(4)
Python大数据挖掘,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取Python学习资料:


欢迎 发表评论: