requests库学习案例
时间:2019-12-12
本文章向大家介绍requests库学习案例,主要包括requests库学习案例使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
requests库使用流程
使用流程/编码流程 1.指定url 2.基于requests模块发起请求 3.获取响应对象中的数据值 4.持久化存储
分析案例
需求:爬取搜狗首页的页面数据
# 爬取搜狗首页 import requests if __name__ == '__main__': # step_1:指定url sogou_url = 'https://www.sogou.com/' # step_2: 发起请求:使用get方法发起get请求,该方法会返回一个响应对象。参数url表示请求对应的url response = requests.get(url=sogou_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('爬取数据完毕!!!')
需求:爬取搜狗指定词条对应的搜索结果页面
# 爬取搜狗指定词条对应的搜索结果页面(简易网页采集器) # 反爬机制 # # User-Agent:请求载体的身份标识,使用浏览器发起的请求,请求载体的身份标识为浏览器, # 使用爬虫程序发起的请求,请求载体为爬虫程序。 # # UA检测:相关的门户网站通过检测请求该网站的载体身份来辨别该请求是否为爬虫程序, # 如果是,则网站数据请求失败。 # 因为正常用户对网站发起的请求的载体一定是基于某一款浏览器, # 如果网站检测到某一请求载体身份标识不是基于浏览器的,则让其请求失败。 # 因此,UA检测是我们整个课程中遇到的第二种反爬机制,第一种是robots协议。 # # UA伪装:通过修改/伪装爬虫请求的User-Agent来破解UA检测这种反爬机制 import requests # 指定搜索关键字 word = input('enter a word you want to search:') # 自定义请求头信息:UA伪装,将包含了User-Agent的字典作用到请求方法的headers参数中即可 headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36', } # 指定url,原始url可能是https://www.sogou.com/web?query=qq,发现该url携带了参数 url = 'https://www.sogou.com/web' # 封装get请求参数:如果请求携带了参数,则可以将参数封装到字典中结合这requests请求方法中的data/params参数进行url参数的处理 param = { 'query': word, } # 发起请求 response = requests.get(url=url, params=param, headers=headers) # 获取响应数据 page_text = response.text # 持久化存储 fileName = word + '.html' with open(fileName, 'w', encoding='utf-8') as fp: fp.write(page_text) print('爬取数据完毕!!!', fileName)
需求:爬取豆瓣电影分类排行榜中的电影详情数据
# 抓取豆瓣电影分类排行榜 - 动作片 import requests if __name__ == "__main__": # 指定ajax-get请求的url(通过抓包进行获取) url = 'https://movie.douban.com/j/chart/top_list?' # 定制请求头信息,相关的头信息必须封装在字典结构中 headers = { # 定制请求头中的User-Agent参数,当然也可以定制请求头中其他的参数 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36', } # 定制get请求携带的参数(从抓包工具中获取) param = { 'type': '5', 'interval_id': '100:90', 'action': '', 'start': '0', 'limit': '20' } # 发起get请求,获取响应对象 response = requests.get(url=url, headers=headers, params=param) # 获取响应内容 print(response.json())
爬取国家药品监督管理总局数据
#需求:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据http://125.35.6.84:81/xk/ import requests import json if __name__ == "__main__": # 指定ajax-post请求的url(通过抓包进行获取) # 首页中信息通过ajax获取 url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList' # 定制请求头信息,相关的头信息必须封装在字典结构中 headers = { # 定制请求头中的User-Agent参数,当然也可以定制请求头中其他的参数 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36', } pageNum = 3 all_id_list = [] for page in range(3, 5): data = { 'on': 'true', 'page': str(page), 'pageSize': '15', 'productName': '', 'conditionType': '1', 'applyname': '', 'applysn': '' } json_text = requests.post(url=url, data=data, headers=headers).json() # 详情页信息:url和域名一样 ,id不一样 # id值通过首页对应ajax请求得到的json串中获取 # 通过域名和id名拼接成新的url for dict in json_text['list']: id = dict['ID'] # 用于二级页面数据获取 # 下列详情信息可以在二级页面中获取 # name = dict['EPS_NAME'] # product = dict['PRODUCT_SN'] # man_name = dict['QF_MANAGER_NAME'] # d1 = dict['XC_DATE'] # d2 = dict['XK_DATE'] all_id_list.append(id) # 该url是一个ajax的post请求 print(len(all_id_list)) post_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById' for id in all_id_list: post_data = { 'id': id } response = requests.post(url=post_url, data=post_data, headers=headers) if response.headers['Content-Type'] == 'application/json;charset=UTF-8': # print(response.json()) # 进行json解析 json_text = response.json() print(json_text['epsName']+','+ json_text['businessPerson'])
原文地址:https://www.cnblogs.com/xiao-apple36/p/12030300.html
- Node.js新手必须知道的4个JavaScript概念
- HUDOJ-----1394Minimum Inversion Number
- 提升 Node.js 应用性能的 5 个技巧
- HDUOJ-----1166敌兵布阵
- HDUOJ------2492Ping pong
- HDUOJ----2489 Minimal Ratio Tree
- HDUOJ----2487Ugly Windows
- HDUOJ--------1003 Max Sum
- HDUOJ -----1864 最大报销额(动态规划)
- 行受影响 是什么意思
- c++课程设计(日历)
- 一个程序,让你理解运算符重载操作
- HDUOJ ---1423 Greatest Common Increasing Subsequence(LCS)
- 在运算符重载++,--,+=,-=...
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一天一大 leet(移除重复节点)难度:简单 DAY-26
- Spring Boot 项目瘦身指南,瘦到不可思议!
- BigData--Hadoop数据压缩
- 面试官问我什么是JMM
- django+nginx+gunicorn部署配置
- JVM的YGC,这次被它搞惨了!
- ubuntu修复linux和windows双系统下挂载ntfs硬盘出错问题
- 一天一大 leet(长度最小的子数组)难度:中等 DAY-28
- Qt音视频开发24-ffmpeg音视频同步
- django使用django-crontab实现定时任务
- 一天一大 leet
- git使用经验
- 最长重复子数组 (难度:中等)-Day20200701
- Presto系列 | Presto基本介绍
- 如何在腾讯云中使用ExternalName类型的Service