python爬虫实例: 对指定城市kfc餐厅信息的爬取

python爬虫实例: 对指定城市kfc餐厅信息的爬取

要求:爬取指定 kfc 餐厅数据

kfc餐厅查询的url:http://www.kfc.com.cn/kfccda/storelist/index.aspx




分析: 由于餐厅信息是Ajax请求的动态数据,所以从原url爬取的数据是不会有想要城市的kfc餐厅的信息

解决方法:找到真正发送请求的对象->f12查找



f12查找到真正发送请求的url

这边我们可以分析真正要发送请求的url, 同时也可获得一些比较有用的信息(例如发送请求的方式为post。)



并找到发送请求的表单数据。

至此准备工作已经完成,可以爬取我们想要的信息。

代码如下:

import requests
import json
# 用json的方式保存我们爬取到的信息

if __name__ == "__main__":
    # weblistnum 用来获取实际有多少页(实际页码数)
    def weblistnum():
        page_text = response.text
        webdata = json.loads(page_text)
        nump = webdata['Table'][0]['rowcount']
        return nump//10 + (nump % 10 > 0)
    limitnum = i = 1
    position = input()
    while True:
        url = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword"

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

        data = {
            "cname": "",
            "pid": "",
            "keyword": position,
            "pageIndex": i,
            "pageSize": 10
        }

        response = requests.post(url=url, data=data, headers=headers)

        page = response.json()

        if 1 == i:
            limitnum = weblistnum()

        fp = open("kfc_restaurant_position.json", "a", encoding='utf-8')
        json.dump(page, fp=fp, ensure_ascii=False)
        fp.close()
        if limitnum == i:
            break
        i += 1
    print("got it!!")

爬取到的结果:(仅作部分展示)

posted @ 2022-08-18 21:52  对讲鸡  阅读(111)  评论(0编辑  收藏  举报