python爬虫之requests模块的基本使用

  1. GET请求(基于ajax的GET请求也适用)
import requests

url = "https://www.baidu.com"
headers = {
	"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 "
	"(KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
	}
	
response = requests.get(url=url, headers=headers) # 对指定url发起请求并返回一个响应对象

# 以下为response响应对象的常用属性
response.text # 返回响应对象字符串类型的页面数据
response.content # 返回响应对象二进制(bytes)类型的页面数据
response.status_code # 返回响应状态码
response.headers # 返回响应头信息
response.url # 返回请求的url
  1. 带参数的GET请求
方式一:直接对带有参数的url发请求
import requests

url = "https://www.baidu.com/s?wd=中国" # 带参数的url
headers = {
	"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 "
	"(KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
	}

response = requests.get(url=url, headers=headers)

with open("test.html", "w", encoding="utf-8") as obj:
	obj.write(response.text)
方式二:把参数封装到字典中再发请求
import requests

url = "https://www.baidu.com/s"
headers = {
	"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 "
	"(KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
	}

params = {
	"wd": "中国"
	}
	
 # get函数中有个params参数就是请求参数的内容
response = requests.get(url=url, params=params, headers=headers)

with open("test.html", "w", encoding="utf-8") as obj:
	obj.write(response.text)
  1. POST请求(基于ajax的POST请求也适用)
    以登陆51job网站为例
    首先我们打开51job的登陆页面,按F12打开开发者工具
    为了能获取到登陆信息,需要先设置一下持续显示日志,在preserve log前面打勾
    在这里插入图片描述
    接下来输入正确的账号和密码,点击登录,查看右侧的抓包信息,找到 login.php 对应的信息
    在这里插入图片描述
    可以看到,登陆对应的请求为POST请求,第一行为对应的url。POST请求一定会携带参数,我们往下找
    在这里插入图片描述
    这里就是我们要找的请求参数了,接下来开始写代码
import requests

# 将请求参数转换为字典的函数
def formed_data(data):
	lis = data.split("\n")
	dic = {}
	for val in lis:
		lis_2 = val.split(":")
		dic[lis_2[0]] = lis_2[1]
	return dic


url = "https://login.51job.com/login.php"

headers = {
	"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 "
	"(KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
	}

# 请求参数
query = """lang:c
action:save
from_domain:i
loginname:***
password:***
verifycode:
isread:on"""

form_data = formed_data(query) # 转换为字典
# 这里需要使用post函数来发请求,post函数中的data参数就是请求参数的内容
response = requests.post(url=url, data=form_data, headers=headers)

with open("test.html", "w", encoding="utf-8") as obj:
	obj.write(response.text)

转换函数是本人临时写的,可以应对一般情况,免去了手动加引号的烦恼。
这时打开文件 会发现文件中出现了很多乱码
在这里插入图片描述
出现这种情况的原因是51job网页是用的是 gbk 的编码格式,而我的浏览器是以 utf-8 格式读取文件的,出现乱码是正常现象,那么如何解决呢?只需要修改最后的持久化存储步骤即可

with open("test.html", "w") as obj:
	# 使用content属性而不是text属性,解码之后写入文件
	obj.write(response.content.decode("gbk"))

还可以直接以bytes类型直接写入文件

with open("test.html", "wb") as obj: # 模式为wb
	obj.write(response.content) # 使用content属性

再打开文件就没有乱码了,并且可以看出是登陆之后的页面
在这里插入图片描述

以上就是requests模块的基本使用,欢迎指正
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值