心得: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模块使用相关推荐

  1. 生日祝福小程序_广告配音剪映零基础入门教程第二十六篇:如何给朋友制作生日祝福视频...

    经常听到小伙伴问到生日祝福视频怎么做,当然我想既然要为他人做生日祝福视频,那么这个人必定是自己身边比较重要的人,而生日又是每个人都是非常重要的,在这种充满意义的时刻,我们想给自己极其重要的人送上一份祝 ...

  2. 第二十六篇 面向对象初识

    一. 三大编程范式 前面学完了Python的基本语法,能写Python代码, 而且可以处理工作中的一些问题,今天开始就要进入面向对象的学习了.首先,了解下三大编程范式,编程范式就是编程方法论,表明的是 ...

  3. 第二十五篇 hashlib模块(* *)

    用于加密相关的操作,Python 3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法. 加密复杂程度: SHA1  ...

  4. SpringBoot非官方教程 | 第二十六篇: sprinboot整合elk,搭建实时日志平台

    转载请标明出处: 原文首发于https://www.fangzhipeng.com/springboot/2017/07/11/sprinboot25-elk/ 本文出自方志朋的博客 这篇文章主要介绍 ...

  5. “约见”面试官系列之常见面试题第二十六篇之vue-router的hash和history(建议收藏)

    这篇文章主要介绍了Vue-router 中hash模式和history模式的区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 Vue-router 中hash模式和hi ...

  6. Python之路(第十六篇)xml模块、datetime模块

    一.xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单, xml比较早,早期许多软件都是用xml,至今很多传统公司如金融行业的很多系统的接口还主要 ...

  7. 第二十六篇 -- 学习第四十天打卡20190803

    学习书籍<剑桥商务英语中级词汇精选>乱序版 Day06 Day35coordinate [kəʊ'ɔːdɪneɪt] v.调整,协调 [kəʊ'ɔːdɪnət] n.坐标:配套服装例:De ...

  8. 第二十六篇:USB3.0高带宽ISO(48KBytes/125us)实战

    USB3.1技术已经推出, 10Gbps的速率足以满足数据, HD视频传输的要求. 要步入USB3.1的研发, 还得将USB3.0的基础打扎实. 微软提供的SUPER MUTT只包含一个接口0, 其下 ...

  9. 轻轻松松学习SpringBoot2:第二十六篇: Spring Boot和Redis整合(完整版)

    前面我们讲了Spring Boot和Mongodb数据库整合,今天说一下和另一个nosql的整合:redis redis安装就不说了,例子用的是win10版的redis(去git上下载,然后解压,然后 ...

最新文章

  1. Linux下高并发socket最大连接数所受的各种限制
  2. 原生YII2 增删改查的一些操作(非ActiveRecord)
  3. pandas一维度数据操作
  4. 零基础自学python看什么书-学习Python可以看书籍学习吗?老男孩Python入门课程
  5. sizeof 和 strlen
  6. base64图片保存获取本地路径
  7. 【python 5】正则表达式
  8. gridview 简单的分页
  9. VS2010中水晶报表安装应用及实例
  10. Tomcat下载安装
  11. 自动跳转网页html代码大全,网页跳转代码大全 网站直接跳转代码
  12. Gitlab 登录报422错误,账号密码是对的?
  13. sqlite3 java 内存,嵌入式数据库SQLite与Java
  14. Docker的privileged的作用
  15. 三层交换机 no switchport 命令
  16. 服务器pytorch环境配置
  17. java.lang.NoClassDefFoundError: org/openjdk/jol/info/ClassLayout
  18. Ultra Mobile Paygo美国手机号教程
  19. 赛门铁克召开2010财年中国合作伙伴高峰会
  20. 看月亮爬上来 失眠的时候听听

热门文章

  1. VTK中oberver 和 command 的信息机制详解
  2. 蓝湖怎么切图标注_如何用蓝湖做自动标注 ?
  3. app软件开发现状及前景
  4. C语言程序设计第五次作业——循环结构1
  5. opensatck 分布式路由模式DVR部署
  6. 猿创征文 | Git的良心教程
  7. 戴尔服务器安装ESXI
  8. 什么是Armbian
  9. HTML网页设计期末课程大作业 ~中国茶文化5页面带轮播(HTML+CSS+JS)~ 学生网页设计作业源码
  10. 《 种子用户方法论》读书笔记