接上篇《24、urllib获取网站电影排行》
上一篇我们讲解了如何使用urllib的get请求抓取某某电影排行榜信息。本篇我们来讲解如何使用urllib的post请求抓取某某快餐网站店铺数据。
一、某某快餐网站介绍
1、某某快餐网站
某某快餐店网址为:http://www.kfc.com.cn/kfccda/index.aspx:
作为全球最大的快餐连锁店之一,某某基以其独特的味道和创新的产品而备受消费者喜爱。作为一个时尚、现代和互联网化的品牌,某某基官网是与时俱进的,为广大消费者提供了更多的选择和方便。
在某某基官网上,用户可以轻松地浏览所有的产品,并了解每种菜品的详细信息和口味。还可以通过网上订购,在家中享用美食。此外,某某基官网还提供了专业的营养咨询和健康生活方式提示,以满足不同消费者的需求:
2、餐厅列表信息介绍
点击网站首页的“餐厅查询”,或这直接浏览器输入“http://www.kfc.com.cn/kfccda/storelist/index.aspx”地址,都可以看到某某快餐店餐厅的列表信息:
选择相应的城市,就可以查询到,结果是以从上到下的列表形式展示:
二、抓取餐厅列表信息
1、分析页面数据请求
我们按照上面网页的分析,准备抓取某某基餐厅列表第一页所有餐厅信息。
我们F12打开餐厅列表首页的源码信息,清空其中的内容,重新选择城市后,可以看到只有一条请求信息:
通过分析判断,这里的结果看起来就是餐厅列表的请求结果:
地址是“http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname”,是一个post请求:
请求参数有“cname”、“pid”、“pageIndex”、“pageSize”:
其中“cname”为要查询的城市名称,“pid”为上图“生日聚会”、“全天营业”等标签的id,“pageIndex”和“pageSize”为分页的页码和一页加载的数据量。
2、使用urllib抓取首页数据
我们已经确定了抓取的url地址为“http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname”,请求的参数也确定了,head参数我们观察到没有Cookie,只需要定义一个User-Agent即可:
# _*_ coding : utf-8 _*_
# @Time : 2023-06-29 11:01
# @Author : 光仔December
# @File : 抓取某某快餐网站店铺数据
# @Project : Python基础
import urllib.request
# 某某快餐店铺列表的API地址
url = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
# 发送HTTP POST请求需要定义请求体
# cname 是搜索城市名,pageIndex和pageSize为分页的页码和一页加载的数据量
data = {'cname': '郑州', 'pageIndex': 1, 'pageSize': 10}
# urlencode 将字典类型的数据data转换为URL参数形式的字符串(cname=%E9%83%91%E5%B7%9E&pageIndex=0&pageSize=10)
# .encode():将字符串类型的URL参数编码为bytes类型。由于HTTP请求中需要传递bytes类型的数据,因此需要使用该方法进行编码。
data = urllib.parse.urlencode(data).encode()
req = urllib.request.Request(url=url, headers=headers, data=data)
response = urllib.request.urlopen(req)
# 获取响应的数据
content = response.read().decode('utf-8')
# 将结果写入json文件,因为里面有中文,所以要指定encoding编码格式
fp = open('xxj.json', 'w', encoding='utf-8')
fp.write(content)
注:和get方式直接在url上拼接参数不同,post请求需要单独指定请求体。
结果,生成了一个json文件,里面就是第一页的餐厅信息:
分页获取就不再赘述,和之前获取电影列表一样。
至此,我们通过urllib成功获取到了某某快餐网站餐厅店铺数据。下一篇博文我们将学习如何处理urllib的异常。
参考:尚硅谷Python爬虫教程小白零基础速通教学视频
转载请注明出处:https://blog.csdn.net/acmman/article/details/131452923