requests模块使用
requests介绍
python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高,
作用是模拟浏览器发请求。
requests模块的编码流程
- 指定URL
- 发送请求
- 获取相应数据
- 持久化存储
环境安装
pip install requests
实战编码
需求:爬取搜狗首页的页面数据
import requests
# 一、指定url
url = 'https://www.sogou.com/'
# 二、发送请求
# 三、用get请求返回一个响应对象
response = requests.get(url=url)
# 获取响应数据
page_text = response.text
# 四、持久化存储
with open('sougou.html', 'w', encoding='utf-8') as fp:
fp.write(page_text)
实战巩固
1、爬取搜狗指定词条对应的搜索结果页面
分析
请求方式为:GET方式
请求url为:https://www.sogou.com/web
响应头返回的 Content-Type 类型为: text/html
携带的参数:其中 query
为我们搜索的内容
代码
import requests
# UA伪装:将对应的 User-Agent 封装到一个字典(请求头)中
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.50'
}
url = 'https://www.sogou.com/web'
# 处理url携带的参数:封装到字典中
kw = input("输入关键词\n")
param = {
'query': kw
}
# 对指定的url发起的请求对应的url是携带参数的,并且请求过程中处理了参数
response = requests.get(url=url, params=param, headers=headers)
page_text = response.text
fileName = kw+'.html'
# 持久化存储
with open(fileName, 'w', encoding='utf-8') as fp:
fp.write(page_text)
2、破解百度翻译
分析
请求方式为:POST方式
请求url为:https://fanyi.baidu.com/sug
响应头返回的 Content-Type 类型为: application/json
携带的参数:其中 kw
为我们搜索的单词
代码
import json
import requests
# UA伪装:将对应的 User-Agent 封装到一个字典中
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.50'
}
url = 'https://fanyi.baidu.com/sug'
kw = input('翻译输入:\n')
data = {
'kw': kw
}
response = requests.post(url=url, data=data, headers=headers)
# 获取响应数据:json方法返回的是一个json对象(如果确实响应数据类型为json类型才能使用:Content-Type: application/json)
result = response.json()
# 输出翻译结果
print('翻译结果:')
for word in result['data']:
print(word['k'], word['v'])
# 持久化存储
fp = open('{}.json'.format(kw), 'w', encoding='utf-8')
json.dump(result, fp=fp, ensure_ascii=False)
3、爬取豆瓣电影分类排行榜
分析
请求方式为:GET方式
请求url为:https://movie.douban.com/j/chart/top_list
响应头返回的 Content-Type 类型为: application/json
携带的参数:
type
:分类对应的编号
start
: 开始的排名(排名从0开始)
limit
: 排名的个数
代码
import json
from unittest import result
import requests
url = 'https://movie.douban.com/j/chart/top_list'
# UA伪装:将对应的 User-Agent 封装到一个字典中
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.50'
}
param = {
'type': '24',
'interval_id': '100:90',
'action': '',
'start': '0',
'limit': '100'
}
response = requests.get(url=url, params=param, headers=headers)
result = response.json()
# 输出结果
for moive in result:
print('排名:{0},电影名:{1}'.format(moive['rank'], moive['title']))
# 持久化存储
fp = open('douban.json', 'w', encoding='utf-8')
json.dump(result, fp=fp, ensure_ascii=False)
作业:肯德基餐厅信息爬取
需求:在肯德基餐厅信息查询网站爬取餐厅信息
输入:城市
输出:餐厅名称、餐厅地址、详情
代码:
import json
import requests
from fake_useragent import UserAgent
url = 'https://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
keyword = input('请输入要查询的城市:')
# 请求携带参数
data = {
'cname': '',
'pid': '',
'keyword': keyword,
'pageIndex': '1',
'pageSize': 10000
}
# 随机UA伪装
headers = {
'User-Agent': UserAgent().random
}
# 获取响应数据
response = requests.post(url=url, headers=headers, data=data)
reture_data = response.text
# 持久化存储
fp1 = open('肯德基餐厅信息.json', 'w', encoding='utf-8')
json.dump(obj=reture_data, fp=fp1, ensure_ascii=False)
fp1.close()
# 数据可视化
result = json.loads(reture_data)
fp2 = open('肯德基餐厅表.csv', 'w', encoding='utf-8')
fp2.write('编号,餐厅名称,餐厅地址\n')
for pos in result['Table1']:
fp2.write('{0},{1},{2}\n'.format(
pos['rownum'], pos['storeName'], pos['addressDetail']))
fp2.close()
print('总共有{0}个结果,数据保存成功'.format(result['Table'][0]['rowcount']))
版权属于:瞌学家 所有,转载请注明出处
本文链接:https://www.songonline.top/archives/137/
友情提示: 如果文章部分链接出现404,请留言或者联系博主修复。