Python网络爬虫(二):Requests库

news/2024/7/19 11:31:40 标签: python, 爬虫, 开发语言

1 请求方式

        Requests模块常用的两种请求方式是GET和POST.

        1.1 GET请求

        GET请求可以在url中携带参数,以百度为例:

python"># 不带参数
https://www.baidu.com/
# 带参数wd
https://www.baidu.com/s?wd=iphone

         Requests实现GET请求,对于带参数的URL有两种请求方式:

python">import requests

# 第一种方式
response = requests.get('https://www.baidu.com/s?wd=iphone')

# 第二种方式
url = 'https://www.baidu.com/s'
params = {'wd':'iphone'}
response = requests.get(url, params=params)

         两种方式都是请求同一个url,但第一种方式更加简洁,如果参数是动态变化的,可以使用格式化字符串对url动态设置,例如f"https://www.baidu.com/s?wd={传入变量}"

        1.2 POST请求

        POST请求也就是提交表单,表单的数据内容就是POST的请求参数。POST请求的参数data的数据格式可以为字典、元组、列表和JSON格式。

        当向服务器发送请求后,服务器会返回相应的响应对象(response),包含服务器响应的信息。requests提供以下方法获取响应内容。

        

r.status_code响应状态码
r.raw原始响应体、使用r.raw.read()读取
r.content字节方式的响应体,需要进行解码
r.text字符串方式的响应体,会自动根据响应头部的字符编码进行解码
r.headers以字典对象存储服务器响应头,但这个字典比较特殊,字典键不区分大小写,若键不存在,则返回None。
r.json()Requests中内置的JSON解码器
r.raise_for_status()请求失败(非200响应),抛出异常
r.url获取请求链接
r.cookies获取请求后的cookies
r.encoding获取编码格式

2 复杂的请求方式 

        2.1 添加请求头

        请求头为字典形式,在requests中的参数名为headers,示例代码如下:

python">headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"
        }

requests.get("https://www.jd.com", headers=headers)

        2.2 使用代理ip

        代理ip的使用方法笔者将会在之后单独写文章介绍,这里只做演示。代理ip的使用方法与请求头的使用方法一致,需要设置proxies参数,示例代码如下:

python">import requests
proxies = {
    "http": "http://10.120.1.110:8888",
    "https": "http://10.120.1.110:8888",
    }

requests.get("https://www.jd.com/", proxies=proxies)

        2.3 证书验证

        通常设置关闭验证即可,即verify=False,默认情况下是True。示例代码如下:

python">import requests

url = "https://www.jd.com"
# 关闭证书验证
response = requests.get(url, verify=False)

   3 总结

        Requests是Python的一个很实用的HTTP客户端库,可完全满足如今编写网络爬虫程序的需求,是爬虫开发人员首选的爬虫库。其具有语法简单易懂,完全符合Python优雅和简洁的特性,在兼容性上完全兼容Python任何版本,具有较强的适用性。

        使用Requests发送请求时可以携带以下几种常见的参数:

python">import requests

url = 'https://www.jd.com'

# GET请求

response = requests.get(url, headers=headers, proxies=proxies, verify=False, cookies=cookies)

# POST 请求

response = requests.post(url, headers=headers, proxies=proxies, verify=False, cookies=cookies)

 


http://www.niftyadmin.cn/n/5466391.html

相关文章

全国青少年软件编程(Python)等级考试二级考试真题2023年12月——持续更新.....

青少年软件编程(Python)等级考试试卷(二级) 分数:100 题数:37 一、单选题(共25题,共50分) 1.给定字符串s,下列表示s最后一个字符的是?( ) A. s[:-1] B. s[1] C. s[0:-1] D. s[-1] 标准答案:D 试题解析:字符串正索引从左向右从0开始编号,字符串负索引从右向左从…

Java设计模式:代理模式的静态和动态之分(八)

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 在软件设计中,代理模式是一种常用的设计模式,它为我们提供了一种方式来控制对原始对象的访问。在Java中&a…

IntelliJ IDEA - 快捷键 Win Mac 对照表

基本 Ctrl CommandAlt Option WinMacCtrl YCommand DeleteCtrl WOption 方向键上Ctrl NCommand OCtrl F11Option F3Shift F11Command F3Ctrl SpaceControl SpaceCtrl 方向键Option 方向键Alt Control VAlt EnterOption EnterAlt InsertCommand NAlt 方…

uniapp通过蓝牙传输数据 (安卓)

在uni-app中,可以通过原生插件的方式来实现蓝牙传输数据的功能。以下是一般的步骤: 1. 创建一个原生插件 在uni-app项目的根目录下,创建一个原生插件的目录,比如"uni-bluetooth"。然后在该目录下创建一个"Androi…

从唯一序列码、单例模式到集群的思考

唯一序列码 在做实际业务开发中,不定时需要用到序列号的生成,要求为唯一序列码。 在实际的实现过程中,我常用的是两种方式:1、数据库自增序列;2:uuid. 如果是采用了mysql数据库,使用自带的数…

c++ 死锁检测与内存泄露

死锁检测与内存泄露 死锁检测 死锁 死锁是多线程并发执行时,竞争对方持有的资源而无法向前继续执行;一般线程进程长时间处于BLOCKED状态可能存在死锁的情况; 预防死锁 ​ 1. 避免循环等待条件:按照固定顺序申请资源、确保不会…

Vue-Next-Admin:适配手机、平板、PC的开源后台管理模板

摘要:随着移动设备和PC的普及,为了满足不同设备的需求,开发一个能够自适应手机、平板和PC的后台管理系统变得至关重要。本文将介绍一个基于Vue3.x、Typescript、Vite、Element Plus等技术的开源模板库——Vue-Next-Admin,帮助开发…

使用LangChain SQLChain连接LLM和SQL数据库

大家好,近年来大型语言模型(LLMs)因在多个领域的文本生成能力受到广泛关注。然而,LLMs有时会产生错误或生成无意义的文本,这种现象常被称为“幻觉”。例如,询问ChatGPT法国是什么时候赠送给立陶宛维尔纽斯电…