第二十六篇 request模块使用
心得:requests模块还是比较好用的,运用起来简单,而且结合python,爬取网页数据,那简直分分钟的事情。
requests请求一般分为两种请求方式:
1 get请求:一般用来请求数据,获取数据,获取搜狗网页主页。
#导包
import requests#step_1:指定url
url = 'https://www.sogou.com/'
#step_2:发起请求:使用get方法发起get请求,该方法会返回一个响应对象。参数url表示请求对应的url
response = requests.get(url=url)
#step_3:获取响应数据:通过调用响应对象的text属性,返回响应对象中存储的字符串形式的响应数据(页面源码数据)
page_text = response.text
#step_4:持久化存储
with open('./sogou.html','w',encoding='utf-8') as fp:fp.write(page_text)
print('爬取数据完毕!!!')
2 post请求:一般用来提交表单,提交数据,需要用到post请求。
爬取百度翻译:
针对url进行分析,发现当我输入单词之后网页没有发生变话,但已经出现了相应的解释,从这点可以看出这是一个动态加载的网页,需要去ajax页面去查找对应的网址。而且它时post请求,并携带了参数为你输入的单词。
import requests
import jsonpost_url="https://fanyi.baidu.com/sug" #查找对应的ajax网址words=input("please input words:") #模拟输入参数data={"kw":words} #传参数#请求头,模拟电脑浏览器的访问方式
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"
}
#发起请求
r=requests.post(url=post_url,data=data,headers=headers)j=r.json() #只有网页数据是json文件,才可以使用这种方法
print(j['data'][0]['v'])filename=words+".json"
with open("./requests_1028/"+filename,"w",encoding="utf-8") as f: #持久化存储json.dump(j,f,ensure_ascii=False) #json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False:print("over")
请求的方式,得按照网页指定得方式去发出,负责无效。网页的请求头会有一个:Request Method: 请求方法,它指定哪一种我们用哪一种去发出请求
网页数据一般分为两种:
静态网页:
静态网页,一般只需要根据相应的请求来发出请求,就会返回正常的数据,一般由html,css语言编写而成,抓取的难度比较简单。之后一章我会分享出对,抓取的数据进行解析,主要针对的就是静态网页。
动态加载网页:
动态加载网页又称为ajax请求,真正的数据url往往藏在NETWORK->XHR页面下。需要我们进行相关的动作来取得此网址。动态网页的数据一般为json的数据格式,我们抓取下来之后当作字典来处理里面的数据。
来看一个豆瓣网站分析:
爬取排行榜电影的评分和名称
当向下滑动鼠标的时候,有新的数据刷新出来,也有心得url数据,我们惊奇的发现了正是我们需要的电影数据。是一个get请求,并且携带参数,这下我们可以来写程序了。
#coding=utf-8
import requests
import jsondou_url="https://movie.douban.com/j/chart/top_list"
params={"type": "19", #5动作 #11剧情 24喜剧 20恐怖 10悬疑 19惊悚"interval_id": "100:90","action": "","start": "0", #从第几部电影去取"limit": "1000" #一次取多少部电影
}
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36"
}
response=requests.get(url=dou_url,params=params,headers=headers)
#print(response.json())
for i in response.json():#for k,v in i.items():if float(i['score']) >= 9:print(i['title']+" : "+str(i['score']))
爬取了惊悚电影评分为9以上的电影,看看结果:
PS C:\Users\TianJian\Desktop\python> & C:/Users/TianJian/AppData/Local/Microsoft/WindowsApps/python.exe c:/Users/TianJian/Desktop/python/requests_1028/豆瓣电影高分.py
蝙蝠侠:黑暗骑士 : 9.2
洞 : 9.2
黑镜:圣诞特别篇 : 9.1
搏击俱乐部 : 9.0
红辣椒 : 9.0
小丑 : 9.0
肯德基上海店面地址爬取:
#coding=utf-8
#阿贾克斯请求:如果url没变,页面发生变化
import requests
import jsonken_url="http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx"
params={"op":"keyword","cname":"", "pid":"", "keyword": "上海","pageIndex": "1","pageSize": "100"
}
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36"
}res=requests.post(url=ken_url,params=params,headers=headers)print(res.text)with open("./kendeji.text","w",encoding="utf-8") as f:f.write(res.text)
化妆品监管公司爬取
#coding=utf-8
import requests
import jsonhua_url="http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList"
hua2_url="http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById"
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36"
}
res_list=[]def hua2(use_id):hua2_url="http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById"params={"id": use_id}headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36"}res=requests.post(url=hua2_url,params=params,headers=headers)return res.json()for page in range(1,6):page=str(page)params={"on": "true","page": page,"pageSize": "15","productName":"", "conditionType": "1","applyname":"", "applysn":"" }res=requests.post(url=hua_url,params=params,headers=headers)r=json.loads(res.text) #等价于 res.json() json格式一定要加载为python格式,才可以当作字典去使用
# with open("./huazhuang.json","w",encoding="utf-8") as f:
# f.write(res.text)for i in r['list']:for m,n in i.items():if m=="ID":result=hua2(n)res_list.append(result)print(n,end=" ")if m=="EPS_NAME":print(n)
with open("./huainfo.json","w",encoding="utf-8") as fp:json.dump(res_list,fp,ensure_ascii=False)
#print(r["list"])
#http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById
#http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById
请求返回的数据格式:
当我们发起请求之后,会获得返回的结果,我们用那种格式去接收,需要了解接收数据的类型是什么。
text
字符串文本格式的数据,尝尝用作 r.text
json
ajax网页的数据,常常为json格式,我们用 r.json() 会将数据直接解析为字典
content
当网页的数据为文件包,比如为图片,mp3, 视频等等数据时,我们需要用二进制数来进行接收,接收之后再用它原来的格式进行存储,才能保证数据的完整。r.content
json数据的用法:
json.load()
加载json文件数据为python可调用的字典数据,常用于导入文件时使用
with open("lixi.json","r") as f:p=json.load(f)
json.loads()
将json数据格式转化为字典,尝尝用于得到的url返回值为json数据格式。
r=request.post(url,data=data)
result=r.loads(r) #被转换后可正常使用
json.dump()
用来将本地的字典数据,存储为字典格式文件。
with open("./requests_1028/"+filename,"w",encoding="utf-8") as f: #持久化存储json.dump(j,f,ensure_ascii=False) #json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False:
json.dumps()
json.dumps是将一个Python数据类型列表进行json格式的编码解析,
>>> import json
>>> print json.dumps('中国')
"\u4e2d\u56fd"
第二十六篇 request模块使用相关推荐
- 生日祝福小程序_广告配音剪映零基础入门教程第二十六篇:如何给朋友制作生日祝福视频...
经常听到小伙伴问到生日祝福视频怎么做,当然我想既然要为他人做生日祝福视频,那么这个人必定是自己身边比较重要的人,而生日又是每个人都是非常重要的,在这种充满意义的时刻,我们想给自己极其重要的人送上一份祝 ...
- 第二十六篇 面向对象初识
一. 三大编程范式 前面学完了Python的基本语法,能写Python代码, 而且可以处理工作中的一些问题,今天开始就要进入面向对象的学习了.首先,了解下三大编程范式,编程范式就是编程方法论,表明的是 ...
- 第二十五篇 hashlib模块(* *)
用于加密相关的操作,Python 3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法. 加密复杂程度: SHA1 ...
- SpringBoot非官方教程 | 第二十六篇: sprinboot整合elk,搭建实时日志平台
转载请标明出处: 原文首发于https://www.fangzhipeng.com/springboot/2017/07/11/sprinboot25-elk/ 本文出自方志朋的博客 这篇文章主要介绍 ...
- “约见”面试官系列之常见面试题第二十六篇之vue-router的hash和history(建议收藏)
这篇文章主要介绍了Vue-router 中hash模式和history模式的区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 Vue-router 中hash模式和hi ...
- Python之路(第十六篇)xml模块、datetime模块
一.xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单, xml比较早,早期许多软件都是用xml,至今很多传统公司如金融行业的很多系统的接口还主要 ...
- 第二十六篇 -- 学习第四十天打卡20190803
学习书籍<剑桥商务英语中级词汇精选>乱序版 Day06 Day35coordinate [kəʊ'ɔːdɪneɪt] v.调整,协调 [kəʊ'ɔːdɪnət] n.坐标:配套服装例:De ...
- 第二十六篇:USB3.0高带宽ISO(48KBytes/125us)实战
USB3.1技术已经推出, 10Gbps的速率足以满足数据, HD视频传输的要求. 要步入USB3.1的研发, 还得将USB3.0的基础打扎实. 微软提供的SUPER MUTT只包含一个接口0, 其下 ...
- 轻轻松松学习SpringBoot2:第二十六篇: Spring Boot和Redis整合(完整版)
前面我们讲了Spring Boot和Mongodb数据库整合,今天说一下和另一个nosql的整合:redis redis安装就不说了,例子用的是win10版的redis(去git上下载,然后解压,然后 ...
最新文章
- Linux下高并发socket最大连接数所受的各种限制
- 原生YII2 增删改查的一些操作(非ActiveRecord)
- pandas一维度数据操作
- 零基础自学python看什么书-学习Python可以看书籍学习吗?老男孩Python入门课程
- sizeof 和 strlen
- base64图片保存获取本地路径
- 【python 5】正则表达式
- gridview 简单的分页
- VS2010中水晶报表安装应用及实例
- Tomcat下载安装
- 自动跳转网页html代码大全,网页跳转代码大全 网站直接跳转代码
- Gitlab 登录报422错误,账号密码是对的?
- sqlite3 java 内存,嵌入式数据库SQLite与Java
- Docker的privileged的作用
- 三层交换机 no switchport 命令
- 服务器pytorch环境配置
- java.lang.NoClassDefFoundError: org/openjdk/jol/info/ClassLayout
- Ultra Mobile Paygo美国手机号教程
- 赛门铁克召开2010财年中国合作伙伴高峰会
- 看月亮爬上来 失眠的时候听听