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对应的请求数据包,进行局部搜索:

        • 搜索到:这组被搜索的数据不是动态加载的,可以直接爬取
        • 没有搜到:这组数据是动态加载的,不可以直接爬取。
    • 如何捕获动态加载的数据?
      • 基于抓包工具进行全局搜索,最终可以定位到动态加载数据对应的数据包。
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': '大学城'},
]}
#获取企业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模块的基本使用的更多相关文章

  1. 爬虫requests模块 1

    让我们从一些简单的示例开始吧. 发送请求¶ 使用 Requests 发送网络请求非常简单. 一开始要导入 Requests 模块: >>> import requests 然后,尝试 ...

  2. requests 模块

    发送请求 使用Requests发送网络请求非常简单. 一开始要导入Requests模块: >>> import requests 然后,尝试获取某个网页.本例子中,我们来获取Gith ...

  3. requests模块--python发送http请求

    requests模块 在Python内置模块(urllib.urllib2.httplib)的基础上进行了高度的封装,从而使得Pythoner更好的进行http请求,使用Requests可以轻而易举的 ...

  4. Python requests模块学习笔记

    目录 Requests模块说明 Requests模块安装 Requests模块简单入门 Requests示例 参考文档   1.Requests模块说明 Requests 是使用 Apache2 Li ...

  5. Python高手之路【八】python基础之requests模块

    1.Requests模块说明 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2  ...

  6. Python requests模块

    import requests 下面就可以使用神奇的requests模块了! 1.向网页发送数据 >>> payload = {'key1': 'value1', 'key2': [ ...

  7. 基于python第三方requests 模块的HTTP请求类

    使用requests模块构造的下载器,首先安装第三方库requests pip install requests 1 class StrongDownload(object): def __init_ ...

  8. 使用requests模块爬虫

    虽然干技术多年了,但从没有写过博客,想来甚是惭愧,本篇作为我博客的第一篇,也是测试篇.不为写的好,只为博诸君一眸而已. 使用python爬虫,有几个比较常用的,获取html_content的模块url ...

  9. [实战演练]python3使用requests模块爬取页面内容

    本文摘要: 1.安装pip 2.安装requests模块 3.安装beautifulsoup4 4.requests模块浅析 + 发送请求 + 传递URL参数 + 响应内容 + 获取网页编码 + 获取 ...

  10. python爬虫之requests模块介绍

    介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:requests库发送请求将网页内容下 ...

随机推荐

  1. Flink批处理读取Hive写入MySql

    把hive 表stu77 的数据写入 mysql 表test_stu 中. 中间可以加自己的逻辑. import org.apache.flink.table.api.EnvironmentSetti ...

  2. 逆袭故事|从“点点点”到月薪17K,这个女孩子做到啦

    姓:XXX,XX VIP 学员,一名自动化测试工程师!之前在某大型培训机构转行学习软件测试时就是木子老师的学生,她也一直关注木子老师的动态,后来知道木子老师打算开设测试开发高级提升班,等开了班就报名了 ...

  3. 怎样用Java 8优雅的开发业务

    怎样用Java 8优雅的开发业务 目录 怎样用Java 8优雅的开发业务 函数式编程 流式编程 基本原理 案例 优雅的空处理 新的并发工具类CompletableFuture 单机批处理多线程执行模型 ...

  4. Centos8 Docker+Nginx部署Asp.Net Core Nginx正向代理与反向代理 负载均衡实现无状态更新

    首先了解Nginx 相关介绍(正向代理和反向代理区别) 所谓代理就是一个代表.一个渠道: 此时就涉及到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称 ...

  5. ProGuard使用文档

    介绍 是一个对于Java字节码的免费的压缩器,优化器,混淆器和审核器: l  它检测并删除未使用的类,字段,方法和属性. l  它优化字节码并删除未使用的指令. l  它重命名其余类.字段和方法使用短 ...

  6. CentOS7 实战源码部署nginx网站服务器

    简介:实战演练nginx网站服务器的搭建 nginx 简介: Nginx是一款高性能的 HTTP 和反向代理服务器   Nginx的优点: 1.高并发量:根据官方给出的数据,能够支持高达 50,000 ...

  7. qt界面设计

    需求 需要不同界面同样的位置有上下的公共部分 分解 在WPF中我亦接触到需要这样做的程序.在wpf中我将上下公共部分作为界面基类,其它界面都继承这个基类.我用qt准备定义一个stackedpanel, ...

  8. PLA-机器学习基石2

    转自:http://blog.csdn.net/u013455341/article/details/46747343 在<机器学习基石>这门课里面也进入了第一讲的内容,这次学习到的是Pe ...

  9. Qt学习笔记-制作一个文本编辑器

    创建一个MainWindow工程.添加一个TextEdit.垂直布局. 在menu上面创建新的action. 在新建的时候判断文本有没有被修改. 下面,将某个文件打开读入到TextEdit中. 保存文 ...

  10. Service Mesh——微服务中的流量管理中间件

    Service Mesh--微服务中的流量管理中间件 摘自-https://zhuanlan.zhihu.com/p/28794062 Service mesh 与 Cloud Native Kube ...