【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)

运行结果:

【python爬虫学习篇】请求模块requests_第1张图片

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)           #写入

运行结果:

 【python爬虫学习篇】请求模块requests_第2张图片

 存入logo为:

【python爬虫学习篇】请求模块requests_第3张图片

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)

执行结果:

【python爬虫学习篇】请求模块requests_第4张图片

【python爬虫学习篇】请求模块requests_第5张图片

 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)#打印响应状态码

执行效果:

【python爬虫学习篇】请求模块requests_第6张图片

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

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

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

你可能感兴趣的:(学习,python,爬虫)