【python爬虫学习篇】请求模块requests

目录

1,请求模块requests

1.1请求方式

1.1.1,GET请求

1.1.2,爬取二进制数据

1.1.3,实现请求地址带参(GET带参请求)

 1.1.4,POST请求

1.2,复杂的请求模式

1.2.1,添加请求头

1.2.2, requests.exceptions.InvalidHeader: Invalid return character or leading space in header: User-Agent报错


1,请求模块requests

由于requests模块是第三方模块,所以在使用requests模块时需要通过执行pip install requests进行模块的安装。如果使用Anaconda,则不需要单独安装requests模块。

1.1请求方式

1.1.1,GET请求

在使用requests模块实现GET请求时可以使用俩种方式实现,一种带参数,另一种为不带参数,下面为不带参数实现GET请求以及对响应结果进行utf—8编码。

代码示例:

import requests
#发送网络请求
response=requests.get('https://www.baidu.com')
print('响应状态码:',response.status_code)
print('请求的网络地址为:',response.url)
print('头部信息为:',response.headers)
print('cookies信息为:',response.cookies)
#以文本形式打印网页源码
response.encoding='utf-8'           #进行utf-8编码,避免乱码
print('以文本形式打印网页源码:',response.text)

运行结果:

1.1.2,爬取二进制数据

使用requests模块中的get函数 不仅可以获取网页中的源码信息,还可以获取二进制文件。但是在获取二进制文件时,需要使用Response.content属性获取bytes类型的数据,然后将数据保存在本地文件中。

例如下载百度中的logo图片即可使用以下代码:

import requests                         #导入模块
#发送网络请求
response=requests.get('https://www.baidu.com/img/bd_logo1.png?where=super')
print(response.content)                 #打印二进制数据
with open('百度 logo.png','wb')as f:    #通过open函数将二进制数据写入本地文件
    f.write(response.content)           #写入

运行结果:

 

 存入logo为:

1.1.3,实现请求地址带参(GET带参请求)

如果需要为GET请求指定参数时,则可以直接将参数添加到请求地址URL的后面,然后用问号(?)进行分隔,如果一个URL地址中有多个参数,参数之间用(&)进行连接,

代码示例:

import requests
response1=requests.get('http://httpbin.org/get?name=Jake&age=30')
print('response1响应结果:\n',response1.text)
#requests模块提供了传递参数的方法,允许使用params关键字参数
#以一个字符串字典来提供这些参数
data={'name':'Mchsduu','age':'19'}
response2=requests.get('http://httpbin.org/get',params=data)
print('response1响应结果:\n',response2.text)

执行结果:

 1.1.4,POST请求

POST请求也叫做提交表单,表单中的数据内容就是对应的请求参数,使用requests模块实现POST请求时需要设置请求参数data。

import requests
import json
data ={
    '1':'努力迟早会派上用场。',
    '2':'必须相信自己。',
    '3':'成功就在眼前。'
}
#发送网络请求
response=requests.post('http://httpbin.org/post',data=data)
response_dict=json.loads(response.text)         #将响应的数据换为字典类型
print(response_dict)                            #打印转化中的响应数据

执行效果:

POST请求中的参数data的数据格式可以是列表,元组,字典或者JSON。

1.2,复杂的请求模式

1.2.1,添加请求头

有时候在请求一个网页内容时,发现无论怎么通过GET或者POST以及其他请求方式,都会出现403错误,这种现象多数是服务器拒绝了访问,因为这些网页为了防止恶意采集信息,所以使用了反爬虫设置,此时可以通过模拟浏览器头部信息来进行访问,这样就可以解决上述反爬设置的问题。

import requests#导入模块

url='https://www.baidu.com/'#爬取的url
#创建头部信息
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.2242 SLBChan/103'}
response=requests.get(url,headers=headers)#发送网络请求
print(response.status_code)#打印响应状态码

执行效果:

1.2.2, requests.exceptions.InvalidHeader: Invalid return character or leading space in header: User-Agent报错

就是请求头字符太长了,需要换行如:

 换行后如上图问题就解决了。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

致奋斗的自己

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值