request模块
1 概述
需要安装request模块。
pip install requests
2 GET请求
2.1 爬取百度首页
有些网站是要审核http请求头部的,所以需要构造某些http请求头部字段。
#导入网络请求的第三方模块 import requests #通过requests模拟发送网络请求 ''' #百度返回200 r = requests.get("https://www.baidu.com") print(r) ''' #模拟构造headers请求头信息 headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' } #豆瓣网返回418,会拒绝请求,这是因为豆瓣会检查user-agent参数。除了第一个url参数,后面参数必须指明参数名称 r = requests.get("https://www.douban.com",headers=headers) print(r) print(r.headers)
2.2 构造带参数的请求
使用谷歌的审核元素,查看网络中的http请求参数。打开谷歌浏览器,输入需要查看的网址,右键检查。
#导入网络请求的第三方模块 import requests #构建参数的字典 kw = { 'wd':'python' } headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' } r = requests.get('https://www.baidu.com/s?',params=kw,headers=headers) print(r) #手动设置编码格式 r.encoding = 'utf-8' #查看响应内容,reponse.text返回的是unicode格式的数据。 #print(r.text) #查看响应内容,reponse.content返回的字节流数据 #print(r.content) #查看完整url地址 #print(r.url) #查看响应头部字符编码 #print(r.encoding) #查看响应码 #print(r.status_code) with open("mybaidu.html", mode="w", encoding='utf-8') as f: f.write(r.text) print("over!!")
3 POST请求
import requests url = 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php' data = { 'log':'ceshi', 'pwd':'123456', 'wp-submit':'登录', 'redirect_to':'https://wordpress-edu-3autumn.localprod.oc.forchange.cn', } headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' } r = requests.post(url,data=data,headers=headers) r.encoding = 'utf-8' print(r.text) with open("post.html", mode="w", encoding='utf-8') as f: f.write(r.text)
4 处理json数据
商品评论是json数据。如下:
import requests #这是京东商品评论区的内容,是json格式的数据。 url = 'https://api.m.jd.com/?appid=item-v3&functionId=pc_club_productPageComments&client=pc&clientVersion=1.0.0&t=1682673372857&loginType=3&uuid=122270672.386066106.1672191342.1678343802.1682673339.7&productId=11936238&score=0&sortType=5&page=1&pageSize=10&isShadowSku=0&rid=0&fold=1' print(requests.get(url).json())