requests模块的基本使用
requests模块的基本使用
- 基于网络请求的模块。
- 环境的安装:pip install requests
- 作用:模拟浏览器发起请求
- 分析requests的编码流程:
- 1.指定url
- 2.发起了请求
- 3.获取响应数据
- 4.持久化存储
- 需求:爬取搜狗首页的页面源码数据
import requests
#1.指定url
url = 'https://www.sogou.com/'
#2.发起请求,get的返回值是一个响应对象
response = requests.get(url)
#3.获取响应数据,text属性返回的是字符串形式的响应数据
page_text = response.text
#4,持久化存储
with open('./sogou.html','w',encoding='utf-8') as fp:
fp.write(page_text)
- 需求:简易的网页采集器
url = 'https://www.sogou.com/web?query=人民币'
response = requests.get(url)
page_text = response.text
with open('./人民币.html','w',encoding='utf-8') as fp:
fp.write(page_text)
- 上述代码出现的问题:
- 出现了乱码
- 数据的量级不够
- 处理乱码
url = 'https://www.sogou.com/web?query=人民币'
response = requests.get(url)
#修改响应数据的编码格式
response.encoding = 'utf-8'
page_text = response.text
with open('./人民币.html','w',encoding='utf-8') as fp:
fp.write(page_text)
处理数据量级的问题:
遇到了对应的反爬机制
反爬机制:UA检测
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36' # 代理用户信息,这个数据时浏览器的信息,是请求数据的头部信息,
反反爬策略:UA伪装
UA伪装的实现:
- 1.定义一个字典
- 2.在字典中进行相关请求头信息的伪装
- 3.将该字典作用到get方法的headers参数中即可
UA检测被作用到了大量的网站中,因此日后,爬虫程序编写中一定要直接加上UA的操作
url = 'https://www.sogou.com/web?query=人民币'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
response = requests.get(url,headers=headers)#UA伪装
#修改响应数据的编码格式
response.encoding = 'utf-8'
page_text = response.text
with open('./人民币.html','w',encoding='utf-8') as fp:
fp.write(page_text)
- 最终实现
- 请求参数的动态化
- 实现:
- 1.定义一个字典
- 2.字典中的键值就是url携带的参数
- 3.将字典作用到get方法的params参数中
url = 'https://www.sogou.com/web'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
#参数动态化
wd = input('enter a key word:')
param = {
'query':wd
}
response = requests.get(url,headers=headers,params=param)#UA伪装
#修改响应数据的编码格式
response.encoding = 'utf-8'
page_text = response.text
fileName = wd+'.html'
with open(fileName,'w',encoding='utf-8') as fp:
fp.write(page_text)
print(fileName,'爬取成功!!!')
enter a key word:波晓张
波晓张.html 爬取成功!!!
- 需求:爬取豆瓣电影的详情数据
- 分析:
- 更多的电影数据是通过将滚轮滑动到底部后发起了ajax请求请求到的电影数据
- 对ajax请求的url进行捕获
- 对ajax请求的url进行请求发送
url = 'https://movie.douban.com/j/chart/top_list'
fp = open('./movieData.txt','a+',encoding='utf-8')
for i in range(0,10):
param = {
'type': '13',
'interval_id': '100:90',
'action': '',
'start': str(i*20),
'limit': '20',
}
response = requests.get(url=url,params=param,headers=headers)
#json()将json串进行序列化
movie_list = response.json()
for dic in movie_list:
name = dic['title']
score = dic['score']
fp.write(name+':'+score+'\n')
print('第{}页数据爬取成功!'.format(i))
fp.close()
第0页数据爬取成功!
第1页数据爬取成功!
第2页数据爬取成功!
第3页数据爬取成功!
第4页数据爬取成功!
第5页数据爬取成功!
第6页数据爬取成功!
第7页数据爬取成功!
第8页数据爬取成功!
第9页数据爬取成功!
- 肯德基餐厅查询http://www.kfc.com.cn/kfccda/storelist/index.aspx
- 分析:
- 动态加载数据
- 动态加载数据
- 概念:通过其他/另一个请求请求到的数据
- 特性:可见非可得
- 判定相关的页面数据是否为动态加载的数据?
- 基于抓包工具定位到浏览器地址栏url对应的请求数据包,进行局部搜索:
- 搜索到:这组被搜索的数据不是动态加载的,可以直接爬取
- 没有搜到:这组数据是动态加载的,不可以直接爬取。
- 基于抓包工具定位到浏览器地址栏url对应的请求数据包,进行局部搜索:
- 如何捕获动态加载的数据?
- 基于抓包工具进行全局搜索,最终可以定位到动态加载数据对应的数据包。
import requests
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
data = {
'cname': '',
'pid': '',
'keyword': '广州',
'pageIndex': '1',
'pageSize': '10',
}
url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
response = requests.post(url=url,headers=headers,data=data)
pos_data = response.json()
pos_data
{'Table': [{'rowcount': 27}],
'Table1': [{'addressDetail': '广州路104号',
'cityName': '南京市',
'pro': '24小时,Wi-Fi,点唱机,店内参观,礼品卡,生日餐会',
'provinceName': '江苏省',
'rownum': 1,
'storeName': '广州'},
{'addressDetail': '天河路123号广州购书中心负一层',
'cityName': '广州市',
'pro': '24小时,Wi-Fi,点唱机,礼品卡',
'provinceName': '广东省',
'rownum': 2,
'storeName': '购书中心'},
{'addressDetail': '广州南站三楼B区餐饮夹层(B26-B27检票口上方)',
'cityName': '广州市',
'pro': '礼品卡',
'provinceName': '广东省',
'rownum': 3,
'storeName': '南站二'},
{'addressDetail': '小谷围广州大学城广州大学生活区商业中心首层A1028及二层A2009',
'cityName': '广州市',
'pro': '24小时,Wi-Fi,点唱机,店内参观,礼品卡',
'provinceName': '广东省',
'rownum': 4,
'storeName': '大学城'},
]}
- 药监总局数据爬取,爬取的是每一家企业的详情数据
- 分析:
- 打开了某一家企业的详情页面,看到了企业的详情数据
- 判定改家企业的详情数据是否为动态加载的?
- 进行局部搜索
- 没有搜索到,说明数据是动态加载出来的
- 捕获动态加载的数据?
- 全局搜索,定位到了动态加载数据对应的数据包,提取出了url和请求参数
- 进行局部搜索
- 成功的捕获到了一家企业对应的详情数据
- 通过上述方式继续分析第二家企业,发现:
- 捕获每一家企业的id
- 在首页中,通过抓包工具对企业名称进行搜索,对应的数据包中发现了企业名称和id
#获取企业id
ids = [] #存储所有企业的id
url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
for page in range(1,6):
data = {
'on': 'true',
'page': str(page),
'pageSize': '15',
'productName': '',
'conditionType': '1',
'applyname': '',
'applysn': '',
}
company_datas_json = requests.post(url=url,headers=headers,data=data).json()
for dic in company_datas_json['list']:
_id = dic['ID']
ids.append(_id)
detail_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
for _id in ids:
data = {
'id':_id
}
company_json = requests.post(url=detail_url,headers=headers,data=data).json()
print(company_json['epsName'],company_json['epsProductAddress'])
亳州嘉禾药业有限公司 安徽省亳州市谯城区三官工业街168号
倍斯柔(广东)生物科技有限公司 佛山市三水区乐平镇西乐大道东39号登骏数码城二期厂房B3号301A、401A、501A单元(住所申报)
佛山市方方洁生物科技有限公司 广东省佛山市南海区丹灶镇塱心工业区吴伟升厂房自编A座1楼、2楼(住所申报)
青岛尚合生物科技有限公司 山东省青岛市莱西市夏格庄文昌路8号
山东暨肽生物医药科技有限公司 山东省烟台市福山区振华街879号
淳安千岛湖诚达实业有限公司 浙江省杭州市淳安县千岛湖镇永和路321号1幢2楼
浙江好妆化妆品有限公司 浙江省金华市义乌市廿三里街道安商路37号
美尚美生物技术(广州)有限公司 广州市花都区花山镇启源大道6号4栋304房
广州市联盈日用化妆品有限公司 广州市花都区赤坭镇白坭经济社内
浙江绿岛科技有限公司 海润街道工业大道5号
广州市三荣化妆品有限公司 广州市白云区江高镇塘荔路3号A1栋、B栋
广州市欣俊颜化妆品有限公司 广州市白云区白云湖街夏茅向西大道十九社工业区自编一号五楼
广州甲美生物科技有限公司 广州市白云区均禾街石马村旺发大街自编25号
广州卡丝蓝化妆品有限公司 广州市白云区江高镇神山雄郭西路128号3栋101房、201房
广州市绿色春天化妆品科技研发有限公司 广州市白云区均禾街罗岗工业区企业路23号
requests模块的基本使用的更多相关文章
- 爬虫requests模块 1
让我们从一些简单的示例开始吧. 发送请求¶ 使用 Requests 发送网络请求非常简单. 一开始要导入 Requests 模块: >>> import requests 然后,尝试 ...
- requests 模块
发送请求 使用Requests发送网络请求非常简单. 一开始要导入Requests模块: >>> import requests 然后,尝试获取某个网页.本例子中,我们来获取Gith ...
- requests模块--python发送http请求
requests模块 在Python内置模块(urllib.urllib2.httplib)的基础上进行了高度的封装,从而使得Pythoner更好的进行http请求,使用Requests可以轻而易举的 ...
- Python requests模块学习笔记
目录 Requests模块说明 Requests模块安装 Requests模块简单入门 Requests示例 参考文档 1.Requests模块说明 Requests 是使用 Apache2 Li ...
- Python高手之路【八】python基础之requests模块
1.Requests模块说明 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 ...
- Python requests模块
import requests 下面就可以使用神奇的requests模块了! 1.向网页发送数据 >>> payload = {'key1': 'value1', 'key2': [ ...
- 基于python第三方requests 模块的HTTP请求类
使用requests模块构造的下载器,首先安装第三方库requests pip install requests 1 class StrongDownload(object): def __init_ ...
- 使用requests模块爬虫
虽然干技术多年了,但从没有写过博客,想来甚是惭愧,本篇作为我博客的第一篇,也是测试篇.不为写的好,只为博诸君一眸而已. 使用python爬虫,有几个比较常用的,获取html_content的模块url ...
- [实战演练]python3使用requests模块爬取页面内容
本文摘要: 1.安装pip 2.安装requests模块 3.安装beautifulsoup4 4.requests模块浅析 + 发送请求 + 传递URL参数 + 响应内容 + 获取网页编码 + 获取 ...
- python爬虫之requests模块介绍
介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:requests库发送请求将网页内容下 ...
随机推荐
- 开源OLAP引擎对比
什么是olap 01.绝大多数请求都是读请求 02.数据以相当大的批次(>1000行)更新,而不是单行更新;或者它根本没有更新 03.数据已添加到数据库,但不会进行修改 04.对于读取,每次查询 ...
- Python实现多个pdf文件合并
背景 由于工作原因,经常需要将多个pdf文件合并后打印,有时候上网找免费合并工具比较麻烦(公司内网不能访问公网),于是决定搞个小工具. 具体实现 需要安装 PyPDF2 pip install PyP ...
- 使用CentOS8搭建私有NAS存储的一些建议
对于超过2TB的硬盘来说只能考虑GPT分区表,因此还是建议使用EFI来安装系统. 对于超过2TB的硬盘来说应该选择LVM,然后磁盘末尾预留出至少100G的空间用于将来方便维护安装个Windows系统之 ...
- Json转换值类型字段为空字符串时报错问题
问题 在写Webservices时,碰到的问题. 定义的类 public class User { public string sID { get; set; } public int? iAge { ...
- 熬夜肝了这篇Spring Cloud Gateway的功能及综合使用
前言 SpringCloud 是微服务中的翘楚,最佳的落地方案. Spring Cloud Gateway 是 Spring Cloud 新推出的网关框架,之前是 Netflix Zuul.网关通常在 ...
- 个人MySQL的事务特性原理学习笔记总结
目录 个人MySQL的事务特性原理笔记总结 一.基础概念 2. 事务控制语句 3. 事务特性 二.原子性 1. 原子性定义 2. 实现 三.持久性 1. 定义 2. 实现 3. redo log存在的 ...
- SQL语句中case,when,then的用法
用法如下bai: 复制代码 SELECT s.s_id, s.s_name, s.s_sex, CASE WHENs.s_sex='1'THEN'男' WHENs.s_sex='2'THEN'女' E ...
- Oracle 使用MERGE INTO 语句 一条语句搞定新增编辑
MERGE INTO RDP_CHARTS_SETTING T1 USING (SELECT '10001' AS PAGE_ID, 'test' AS CHART_OPTION FROM DUAL) ...
- Arduino IDE开发ESP8266-01S连接MQTT服务器 控制继电器点亮LED
准备条件: 1.Arduino IDE 2.ESP-01S模块 2.MQTT服务器 3.手机热点或路由器热点 Wi-Fi芯片 默认订阅的主题是 "开关控制" 当你发送主题 &q ...
- 一文掌握XSS
目录 XSS跨站脚本攻击 1.什么叫跨站脚本攻击? 2.XSS跨站脚本攻击的原理 3.XSS跨站脚本攻击的目的是什么? 4.XSS跨站脚本攻击出现的原因 5.XSS跨站脚本攻击的条件 1.有输入有输出 ...