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': '',
'interval_id': '100:90',
'action': '',
'start': '',
'limit': ''
}
# 发起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': '',
'productName': '',
'conditionType': '',
'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'])
requests库学习案例的更多相关文章
- python requests库学习笔记(上)
尊重博客园原创精神,请勿转载! requests库官方使用手册地址:http://www.python-requests.org/en/master/:中文使用手册地址:http://cn.pytho ...
- python 之Requests库学习笔记
1. Requests库安装 Windows平台安装说明: 直接以管理员身份打开cmd运行界面,使用pip管理工具进行requests库的安装. 具体安装命令如下: >pip instal ...
- python requests库学习笔记(下)
1.请求异常处理 请求异常类型: 请求超时处理(timeout): 实现代码: import requestsfrom requests import exceptions #引入exc ...
- python3 requests库学习笔记(MOOC网)
奏:HTTP协议对资源的操作 方法说明:GET 请求获取URL位置的资源HEAD 请求获取URL位置资源的响应消息报告,即获得该资源的头部信息POST 请求向URL位置的资源后附加新的数据PUT 请求 ...
- python requests库学习
Python 第三方 http 库-Requests 学习 安装 Requests 1.通过pip安装 $ pip install requests 2.或者,下载代码后安装: $ git clone ...
- Python Requests 库学习笔记
概览 实例引入 import requests response = requests.get('https://www.baidu.com/') print(type(response)) prin ...
- 【python 】Requests 库学习笔记
概览 实例引入 import requests response = requests.get('https://www.baidu.com/') print(type(response)) prin ...
- Python3中requests库学习01(常见请求示例)
1.请求携带参数的方式1.带数据的post data=字典对象2.带header的post headers=字典对象3.带json的post json=json对象4.带参数的post params= ...
- python网络爬虫(三)requests库的13个控制访问参数及简单案例
酱酱~小编又来啦~
随机推荐
- httprunner学习22-正则表达式提取(extract)与校验(validate)
前言 有些接口返回的并不是json格式的内容,返回的是html或者xml格式的内容,这种就不能用前面的 content.的方法去提取了. httprunner 支持正则表达式提取(extract)参数 ...
- 使用JS的 FileReader 读取本地文本文件(可兼容各种浏览器)
最近需要在客户端操作文件,看到网上有 FileReader 对象,链接:https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader 还是直接 ...
- Python库的使用之-Sys模块
Python标准库之sys模块使用详解,讲解了使用sys模块获得脚本的参数.处理模块. 使用sys模块操作 模块搜索路径.使用sys模块查找内建模块.使用sys模块查找已导入的模块,重定向输出以及重定 ...
- RabbitMQ 的 docker 镜像使用
RabbitMQ 的 docker 镜像使用 1.下载镜像(management版本的才带有web管理界面) docker pull rabbitmq:3.7.18-management 2.创建容器 ...
- 重构之字段改名 UML行为图 用例图 时序图&协作图 状态图&活动图 依恋情结
简单的使用一下字段改名 为什么使用字段改名: 你在一个软件上做的工作越多,对这个软件的数据的理解就越深刻,你需要把这些理解融入到代码中.利用名字的解释作用,让代码更容易被理解. 如何找到该变量的所 ...
- 一个.java文件中是否可以有多个类
前段时间,有个同事问到我这个问题:一个.java文件中是否可以有多个类? 答案:可以有多个类,但最多只能有一个被public修饰的class. 且若这个.java文件中有一个public类型的clas ...
- MongoDB shell 1 数据库方法
方法名 描述 db.cloneDatabase() 从指定主机上克隆数据库 db.currentOp() 显示当前正在进行的操作 db.commandHelp() 返回数据库命令的帮助信息 db.cr ...
- 【转载】java.util.ServiceConfigurationError: com.sun.tools.attach.spi.AttachProvider
https://blog.csdn.net/zqz_zqz/article/details/80922164 window上运行以下代码获取jvm进程: List<VirtualMachineD ...
- Traefik 2.0 发布了
Traefik 2.0 发布了,包含了很多不错的行特性 tcp 路由(同时也支持sni 路由) 参考配置 tcp: routers: to-db-1: entrypoints: - web-secur ...
- cogs 944. [東方S3] 藤原妹红
二次联通门 : cogs 944. [東方S3] 藤原妹红 /* cogs 944. [東方S3] 藤原妹红 最小生成树 + 树形dp 首先对原图跑最下生成树 后建出一棵树 在树上进行dp 先走到叶子 ...