python爬虫练习--KFC餐厅地址


一、需求

此代码是为完成波波老师python爬虫视频作业所做
对应视频: 波波老师B站视频[P10] 对应up为:路飞学城IT

基本要求:
爬取指点地点的肯德基餐厅数据

进阶要求:
1.能够翻页爬取
2.能够爬取到本次搜索所有的餐厅数据,也就是一直爬到最后一个


二、代码

1. 引入库

# -*- codeing = utf-8 -*-
# @Time: 2020/12/22 0:38
# @Author: Si
# @File: test_kfc.py
# @Software: PyCharm


import requests
import json

2. main()

此处指定url,并在接收到获得的所有数据后进行持久化存储。

def main():
    #1.指定url
    url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'

    list_data_all = getData(url)
    # print(list_data)

    #6.持久化存储
    fp = open('./kfc.json','w',encoding='utf-8')
    json.dump(list_data_all,fp=fp,ensure_ascii=False)

    print('over')

3. getData()

构建输入为url,输出为所搜索到的全部KFC餐厅地址的json形式数据。
具体步骤为:

  1. UA伪装
  2. 封装data数据,此处可以改pageIndex的值来调节页数来达到在网页中翻页的目的。
  3. 请求url
  4. 获取响应数据
  5. 通过抓包到的网页编码,分析出餐厅总数及当前餐厅序号,当序号到达总数时,中断请求数据的循环。具体解释在代码后的备注里。
def getData(url):

    #2.UA伪装
    headers = {
        "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64;x64;rv: 84.0) Gecko / 20100101 Firefox / 84.0"
    }

    list_data_all = []
    city = input("请输入想搜索的城市")
    i = 0
    while True:
        i = i + 1
        #3.封装data数据
        data={
            'cname':'',
            'pid':'',
            'keyword': city ,
            'pageIndex': str(i),
            'pageSize': '10',
        }
        try:
            #4.请求url
            response = requests.post(url=url, data=data, headers=headers,)
            # print(response)
        except Exception as excep:
            print(excep,'111111')           #用数字快速定位出错位置
            break


        #5.获取响应数据
        list_data = response.json()
        list_data_all.append(list_data)

        try:
            rowcount = list_data['Table'][0]['rowcount']        #字典里'Table'标签的值,是个列表,取列表第一个元素,还是字典,取其中'rowcount'标签的值
            rownum= list_data['Table1'][-1]['rownum']           #-1 表示列表最后一位
            if rowcount == rownum:                              #据 F12 观察,每个对餐厅搜索的结果请求都会返回rowcount这个数据,也就是总餐厅数
                break                                           #每个餐厅的字典里都包括自己的序号,就是rownum
        except Exception as except2:
            print(except2,'22222222')       #用数字快速定位出错位置
            break



    return list_data_all

4. 收尾

if __name__ == "__main__":      #当程序执行时
#调用函数
    main()
    print('爬取完毕')

结语

如果对代码有疑问或其他问题,欢迎评论告诉我,我会常来看 (毕竟面向CSDN编程) 。我也是一个刚刚学习python的新手,希望在疫情期间迎头赶上,欢迎大家一起讨论,共同进步。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值