requests模块 简单使用 – Python量化投资

requests模块 简单使用

目录

requests模块 简单使用

简单了解 requests模块

  • 什么是requests模块?
    • Python中封装好的一个基于网络请求的模块。
  • requests模块的作用?
    • 用来模拟浏览器发请求
  • requests模块的环境安装:
    • pip install requests
  • requests模块的编码流程:
    • 1.指定url
    • 2.发起请求
    • 3.获取响应数据
    • 4.持久化存储

使用requests模块 爬取搜狗首页源码数据

#爬取搜狗首页的页面源码数据
import requests
#1.指定url
url = 'https://www.sogou.com/'
#2.请求发送get:get返回值是一个响应对象
response = requests.get(url=url)
#3.获取响应数据
page_text = response.text #返回的是字符串形式的响应数据
#4.持久化存储
with open('sogou.html','w',encoding='utf-8') as fp:
    fp.write(page_text)

实现一个简易的网页采集器

#实现一个简易的网页采集器 爬取搜狗搜索结果
#需要让url携带的参数动态化
import requests
url = 'https://www.sogou.com/web'
#实现参数动态化
wd = input('enter a key:')
params = {
    'query':wd
}
#在请求中需要将请求参数对应的字典作用到params这个get方法的参数中
response = requests.get(url=url,params=params)
page_text = response.text
fileName = wd+'.html'
with open(fileName,'w',encoding='utf-8') as fp:
    fp.write(page_text)
 
#执行结果
#输入 enter a key:郭楷丰
上述代码执行后发现:
1.出现了乱码
2.数据量级不对

解决乱码问题

import requests
url = 'https://www.sogou.com/web'
#实现参数动态化
wd = input('enter a key:')
params = {
    'query':wd
}
#在请求中需要将请求参数对应的字典作用到params这个get方法的参数中
response = requests.get(url=url,params=params)
response.encoding = 'utf-8' #修改响应数据的编码格式
page_text = response.text
fileName = wd+'.html'
with open(fileName,'w',encoding='utf-8') as fp:
    fp.write(page_text)
    
#执行结果    
enter a key:jay
UA检测:门户网站通过检测请求载体的身份标识判定改请求是否为爬虫发起的请求
UA伪装:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36

解决UA检测问题

import requests
url = 'https://www.sogou.com/web'
#实现参数动态化
wd = input('enter a key:')
params = {
    'query':wd
}
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
#在请求中需要将请求参数对应的字典作用到params这个get方法的参数中
response = requests.get(url=url,params=params,headers=headers)
response.encoding = 'utf-8' #修改响应数据的编码格式
page_text = response.text
fileName = wd+'.html'
with open(fileName,'w',encoding='utf-8') as fp:
    fp.write(page_text)

  • UA检测 是一种反爬机制,判断访问是否合法

requests模块 爬取豆瓣电影的详情数据

#爬取的是豆瓣电影中电影的详情数据
https://movie.douban.com/typerank?type_name=%E7%88%B1%E6%83%85&type=13&interval_id=100:90&action=
#分析:当滚动条被滑动到页面底部的时候,当前页面发生了局部刷新(ajax的请求)
动态加载的页面数据
 - 是通过另一个单独的请求请求到的数据
    
import requests
url = 'https://movie.douban.com/j/chart/top_list'
start = input('您想从第几部电影开始获取:')
limit = input('您想获取多少电影数据:')
dic = {
    'type': '13',
    'interval_id': '100:90',
    'action': '',
    'start': start,
    'limit': limit,
}
response = requests.get(url=url,params=dic,headers=headers)
page_text = response.json() #json()返回的是序列化好的实例对象
for dic in page_text:
    print(dic['title']+':'+dic['score'])

  • 页面分析流程

requests模块 爬取肯德基餐厅查询结果

#肯德基餐厅查询http://www.kfc.com.cn/kfccda/storelist/index.aspx
import requests
url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
for page in range(1,2):
    data = {
        'cname': '',
        'pid': '',
        'keyword': '西安',
        'pageIndex': str(page),
        'pageSize': '5',
    }
    response = requests.post(url=url,headers=headers,data=data)
    print(response.json())
  • 分析页面

  • 爬取数据

{
    'Table': [{
        'rowcount': 33
    }],
    'Table1': [{
        'rownum': 1,
        'storeName': '东大街(西安)',
        'addressDetail': '东大街53号',
        'pro': '24小时,Wi-Fi,点唱机,礼品卡',
        'provinceName': '青海省',
        'cityName': '西宁市'
    }, {
        'rownum': 2,
        'storeName': '同安',
        'addressDetail': '同安区西安路西安广场一层二层',
        'pro': '24小时,Wi-Fi,点唱机,礼品卡,生日餐会',
        'provinceName': '福建省',
        'cityName': '厦门市'
    }, {
        'rownum': 3,
        'storeName': '成义',
        'addressDetail': '西安路60号民勇大厦一楼',
        'pro': '24小时,Wi-Fi,点唱机,店内参观,礼品卡',
        'provinceName': '辽宁省',
        'cityName': '大连市'
    }, {
        'rownum': 4,
        'storeName': '罗斯福',
        'addressDetail': '西安路139号1号',
        'pro': 'Wi-Fi,点唱机,店内参观,礼品卡',
        'provinceName': '辽宁省',
        'cityName': '大连市'
    }, {
        'rownum': 5,
        'storeName': '贺兰山(西安)',
        'addressDetail': '游艺东街6号一层',
        'pro': '24小时,Wi-Fi,店内参观,礼品卡,生日餐会',
        'provinceName': '宁夏',
        'cityName': '石嘴山市'
    }]
}
#可以根据自己需求,获取想要的数据

练习题

  • 需求

    • 爬取药监总局中相关企业的详情信息http://125.35.6.84:81/xk/
  • 需求分析

  • 如何检测页面中是否存在动态加载的数据?
    • 基于抓包工具实现
      • 先捕获网站请求后所有的数据包
      • 在数据包中定位到地址栏所对应请求的数据包,在response选项卡对应的数据中进行局部搜索(页面中的某一组内容)
        • 可以搜索到:爬取的数据不是动态加载的
        • 没有搜索到:爬取的数据是动态加载的
      • 如何定位动态加载的数据在哪个数据包中呢?
        • 进行全局搜索
作 者:郭楷丰

出 处:https://www.cnblogs.com/guokaifeng/

声援博主:如果您觉得文章对您有帮助,可以点击文章右下角 推荐一下。您的鼓励是博主的最大动力!

自 勉:生活,需要追求;梦想,需要坚持;生命,需要珍惜;但人生的路上,更需要坚强。带着感恩的心启程,学会爱,爱父母,爱自己,爱朋友,爱他人。
https://www.cnblogs.com/guokaifeng/p/11494192.html

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论