【Python从入门到进阶】25、urllib获取快餐网站店铺数据

news/2024/7/19 8:40:40 标签: python, 爬虫, post请求, encode, urllib

接上篇《24、urllib获取网站电影排行》
上一篇我们讲解了如何使用urllib的get请求抓取某某电影排行榜信息。本篇我们来讲解如何使用urllibpost请求抓取某某快餐网站店铺数据。

一、某某快餐网站介绍

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即可:

python"># _*_ 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


http://www.niftyadmin.cn/n/482095.html

相关文章

AI 音乐大模型:谷歌、微软、Meta 和 OpenAI 如何用 AI 创作音乐?

音乐是人类最古老也最普遍的艺术形式之一,它能够表达我们的情感、想法和文化。音乐的创作过程既有艺术性,也有逻辑性,它涉及到词曲、旋律、节奏、结构、风格等多个方面。随着人工智能(AI)技术的发展,越来越…

php字符不可选状态,jQuery_JQuery ID选择器中的不能包含特殊字符(=,@ etc.),最近在开发一个界面时发现了 - phpStudy...

JQuery ID选择器中的不能包含特殊字符(, etc.)最近在开发一个界面时发现了某些特殊情况下ID选择器就会出现无效的情况,经查原来是的动态生成的Dom 元素的ID中包含“”导致(你可能会问为什么会在ID中有“”号,我只能说这种情况虽然不多&#x…

网站php文件权限,网站目录权限设置

一、创建 web 运行用户groupadd wwwuseradd -g www www二、网站目录文件权限的设置对网站的安全至关重要,下面简单介绍网站目录文件权限的基本设定。我们假设http服务器运行的用户和用户组是www,网站用户为www,网站根目录是/usr/local/apache2/htdocs。1…

apache php解析漏洞,apache解析漏洞及修复方法

apache对文件后缀的解析方法是”.”后边的都是后缀,从后到前,如果后缀无效,会解析前一个,例如 1.php.x1.x2.x3 他会先解析x3,不存在解析x2,不存在解析x1,都不存在就只能解析php了。如图:定义后缀,但是不可能所有后缀都定义吧&…

缺乏php5apache2_4,学习猿地-没有php5apache2_4.dll怎么办

没有“php5apache2_4.dll”是因为PHP下载的版本不对,其解决办法就是去官网下载“php 5.5 thread safe”版本的PHP即可。apache配置 php中没有php5apache2_4.dll今天,在win7系统下安装ApachePHPMySQL时,终于体会到了版本多也不一定是好事&…

php循环删除指定文件内容,php实现遍历目录并删除指定文件中指定内容

现在正坐在安静的寝室里,寒假俨然已经离我而去了……今天发的是我寒假里搞的最后一次学习,之后的时间就一直在看海贼王了。以前写过一个C语言的遍历目录复制文件的程序,很长很复杂,现在用PHP一样可以实现遍历目录,而代…

php提取字符串连接,如何从PHP中的字符串中提取URL?

我正在使用PHP的“simplexml_load_file”从Flickr获取一些数据.我的目标是获取照片网址.我能够得到以下值(分配给PHP变量):codewrecker posted a photo:我怎样才能提取它的这一部分?http://farm3.static.flickr.com/2298/2302759205_4fb109f367_m.jpg万一…

php smarty 生成 静态,Smarty生成静态文件

第一步在修改Smary.class.php文件,增加以下代码public function makeHtmlFile($file_name, $content) { //目录不存在就创建if (!file_exists (dirname($file_name))) {if (!mkdir (dirname($file_name), 0777)) {die($file_name."目录创建失败!&qu…