爬一爬肯德基餐订北京分厅

88 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情

分析网址

百度一下肯德基官网,进入官网,最下面有个餐厅查询,然后点进去。选择按城市搜索。选择北京。打开控制台。然后点击network,可以看到一个网络请求的记录,如果没有,可以点击下一页,就可以看到。调用了这个地址http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname,参数如下,点击下一页,可以看到又多了一个数据。参数中pageIndex从1变为2.也就是说获取第几页的数据。这个pageindex就选择几,所有完全可以写一个循环从1到10获取9页的数据

{
    'cname': '北京',
    'pid': '',
    'pageIndex': 1,
    'pageSize': 20
}

过程

  1. 首先判断是不是在main函数中。创建一个for循环,让里面代码执行9次,并且拿到第几页的page参数。下面就是creat_request准备参数
if __name__ == '__main__':
    for page in range(1, 10):
        request = create_request(page)
        content = get_content(request)
        down_load(content, page)
  1. 这里值得注意⚠️的事post参数必须encode编码一下。否则就会失败,headers有时是可以忽略的。
def create_request( page ):
    headers = {
        'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36",
    }
    baseurl = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname"
    data = {
        'cname': '北京',
        'pid': '',
        'pageIndex': page,
        'pageSize': 20
    }
    data = urllib.parse.urlencode(data).encode("utf-8")
    return urllib.request.Request(url=url, data=data, headers=headers)
  1. 读取响应的数据,并且以utf-8编码转译
def get_content(request):
   response = urllib.request.urlopen(request)
   return response.read().decode('utf-8')
  1. 下载数据到本地,并且给每一页的数据的文件名里增加一下数据的页码,以便于区分

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

基本上一些简单的爬🐛就是这几步操作,不过是参数与参数之前的博弈。有些可能需要一些特殊的header,但是高级的爬虫我还不太会,可能也不允许会,涉及到犯罪的东西不能触碰。本技术仅是学习交流,切勿滥用,导致人家网站瘫痪。