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. Numpy的学习4-array的合并

    import numpy as np A = np.array([1, 1, 1]) B = np.array([2, 2, 2]) print(np.vstack((A, B))) # vertic ...

  2. 性能监控工具nmon及nmon_analyser的使用

    nmon和nmon_analyser下载地址: http://nmon.sourceforge.net/pmwiki.php?n=Site.Download   使用步骤: 1.nmon 根据系统版本 ...

  3. Azure Service Bus(二)在NET Core 控制台中如何操作 Service Bus Queue

    一,引言 上一篇讲到关于 Azure ServiceBus 的一些概念,讲到 Azure Service Bus(服务总线),其实也叫 "云消息服务",是微软在Azure 上提供的 ...

  4. 海选与包装,Python中常用的两个高阶函数(讲义)

    一.filter(function, iterable) - 过滤("海选") # 判断落在第一象限的点[(x1, y1), (x2, y2)...] points = [(-1, ...

  5. CI/CD自动化发版系统设计简介

    转载自:https://www.cnblogs.com/wellful/archive/2004/01/13/10604151.html 版本迭代是每一个互联网公司必须经历的,尤其是中小型公司,相信不 ...

  6. 5.innodb B+tree索引

    索引基础 索引是数据结构 1.图例 2.B+tree 特征 1.非叶子节点不保存数据,只用来索引,数据都保存在叶子节点 2.查询任何一条数据,查询的索引深度都是一样的 3. B+ 树中各个页之间是通过 ...

  7. [leetcode]53Maximum Subarray动态规划经典题目:最大子串问题

    /** * Find the contiguous subarray within an array (containing at least one number) * which has the ...

  8. codeforces 1438D,思路非常非常巧妙的构造题

    大家好,欢迎来到codeforces专题. 今天选择的问题是contest1438的D题,全场通过人数为1325人.一般在codeforces当中千人通过的题难度都不算太高,但是这题有点例外,虽然没有 ...

  9. stm32之定时器彻底研究

    分类: C/C++ 这里介绍两种方式使用stm32的定时器:直接操作寄存器和使用st的官方的库文件. 相比较而言,直接操作定时器比较简洁,对着寄存器看十分明了.而使用库文件有一点晕头转向. (个人观点 ...

  10. 别再费劲去找后台的前端框架了,2021 年就用 Fantastic-admin 吧

    前言 你知道光是基于 Vue 的后台框架在 Github 上有多少个仓库么? 如果你搜索 vue admin 会得到 13120 个仓库,如果用 vue 后台 会得到 7596 个仓库,如果把两者结合 ...