千家信息网

Python如何爬取肯德基

发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,这篇文章主要为大家展示了"Python如何爬取肯德基",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Python如何爬取肯德基"这篇文章吧。准备工作查看肯德
千家信息网最后更新 2025年11月15日Python如何爬取肯德基

这篇文章主要为大家展示了"Python如何爬取肯德基",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Python如何爬取肯德基"这篇文章吧。

准备工作

查看肯德基官网的请求方法:post请求。

X-Requested-With: XMLHttpRequest 判断得肯德基官网是ajax请求

通过这两个准备步骤,明确本次爬虫目标:
ajax的post请求肯德基官网 获取上海肯德基地点前10页。

分析

获取上海肯德基地点前10页,那就需要先对每页的url进行分析。

第一页

# page1# http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname# POST# cname: 上海# pid:# pageIndex: 1# pageSize: 10

第二页

# page2# http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname# POST# cname: 上海# pid:# pageIndex: 2# pageSize: 10

第三页依次类推。

程序入口

首先回顾urllib爬取的基本操作:

# 使用urllib获取百度首页的源码import urllib.request# 1.定义一个url,就是你要访问的地址url = 'http://www.baidu.com'# 2.模拟浏览器向服务器发送请求 response响应response = urllib.request.urlopen(url)# 3.获取响应中的页面的源码 content内容# read方法 返回的是字节形式的二进制数据# 将二进制数据转换为字符串# 二进制-->字符串  解码 decode方法content = response.read().decode('utf-8')# 4.打印数据print(content)
  • 定义一个url,就是你要访问的地址

  • 模拟浏览器向服务器发送请求 response响应

  • 获取响应中的页面的源码 content内容

if __name__ == '__main__':    start_page = int(input('请输入起始页码: '))    end_page = int(input('请输入结束页码: '))    for page in range(start_page, end_page+1):        # 请求对象的定制        request = create_request(page)        # 获取网页源码        content = get_content(request)        # 下载数据        down_load(page, content)

对应的,我们在主函数中也类似声明方法。

url组成数据定位

爬虫的关键在于找接口。对于这个案例,在预览页可以找到页面对应的json数据,说明这是我们要的数据。

构造url

不难发现,肯德基官网的url的一个共同点,我们把它保存为base_url

base_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'

参数

老样子,找规律,只有'pageIndex'和页码有关。

data = {        'cname': '上海',        'pid': '',        'pageIndex': page,        'pageSize': '10'    }

post请求

  • post请求的参数 必须要进行编码

data = urllib.parse.urlencode(data).encode('utf-8')

  • 编码之后必须调用encode方法

  • 参数放在请求对象定制的方法中:post的请求的参数,是不会拼接在url后面的,而是放在请求对象定制的参数中

所以将data进行编码

data = urllib.parse.urlencode(data).encode('utf-8')

标头获取(防止反爬的一种手段)

即 响应头中UA部分。

User Agent,用户代理,特殊字符串头,使得服务器能够识别客户使用的操作系统及版本,CPU类型,浏览器及版本,浏览器内核,浏览器渲染引擎,浏览器语言,浏览器插件等。

 headers = {        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Edg/94.0.992.38'    }

请求对象定制

参数,base_url,请求头都准备得当后,就可以进行请求对象定制了。

 request = urllib.request.Request(base_url,  headers=headers, data=data)

获取网页源码

把request请求作为参数,模拟浏览器向服务器发送请求 获得response响应。

 response = urllib.request.urlopen(request)    content = response.read().decode('utf-8')

获取响应中的页面的源码,下载数据

使用 read()方法,得到字节形式的二进制数据,需要使用 decode进行解码,转换为字符串。

content = response.read().decode('utf-8')

然后我们将下载得到的数据写进文件,使用 with open() as fp 的语法,系统自动关闭文件。

def down_load(page, content):    with open('kfc_' + str(page) + '.json', 'w', encoding='utf-8') as fp:        fp.write(content)

全部代码

# ajax的post请求肯德基官网 获取上海肯德基地点前10页# page1# http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname# POST# cname: 上海# pid:# pageIndex: 1# pageSize: 10# page2# http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname# POST# cname: 上海# pid:# pageIndex: 2# pageSize: 10import urllib.request, urllib.parsedef create_request(page):    base_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'    data = {        'cname': '上海',        'pid': '',        'pageIndex': page,        'pageSize': '10'    }    data = urllib.parse.urlencode(data).encode('utf-8')    headers = {        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Edg/94.0.992.38'    }    request = urllib.request.Request(base_url, headers=headers, data=data)    return requestdef get_content(request):    response = urllib.request.urlopen(request)    content = response.read().decode('utf-8')    return contentdef down_load(page, content):    with open('kfc_' + str(page) + '.json', 'w', encoding='utf-8') as fp:        fp.write(content)if __name__ == '__main__':    start_page = int(input('请输入起始页码: '))    end_page = int(input('请输入结束页码: '))    for page in range(start_page, end_page+1):        # 请求对象的定制        request = create_request(page)        # 获取网页源码        content = get_content(request)        # 下载数据        down_load(page, content)

爬取后结果

以上是"Python如何爬取肯德基"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

肯德 肯德基 数据 上海 浏览器 浏览 参数 方法 源码 对象 内容 页码 二进制 字符 字符串 服务器 页面 服务 输入 地点 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 我的世界服务器卡管理员 优酷合一网络技术 服务器端口开的多安全隐患大吗 db块保存在线的数据库 印度尼西亚网络安全局 门户网站数据库设计 数据库系统概论笔记排版 怎么用数据库创建一个图书馆 健康卡亲情号数据库连接失败 网络安全法知识问答题 网络安全法实施的目的与意义 服务器数据库只读怎么修改 嵌入式软件开发怎么转管理岗 理科不好能学软件开发吗 百纳网络技术有限公司 数据库日志却一直报错 dhcp服务器设置为自动吗 照片数据库 网络技术基础课程总结与收获 服务器是什么东西啊 服务器端口开的多安全隐患大吗 数据库 存储时间 数据库对象的大致作用 河北软件开发者一般在哪里找 国内网络安全背景 河北共筑网络安全防线 软件测试数据库面试题15题答案 阿里服务器 ipv6 怎么免费万方数据库 现代数据库审计应具备什么
0