ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

requests模块之KFC餐厅信息查询

2021-05-03 14:33:47  阅读:318  来源: 互联网

标签:请求 keyword url 信息 KFC 模块 餐厅 requests


Ps : 参考博文 https://blog.csdn.net/qq_38330148/article/details/113930949

一、需求分析

  • 需求 :通过输入关键字对肯德基餐厅信息进行爬取
  • 分析 :
    1、如图所示,搜索肯德基网站的首页,会发现最下面的功能栏中有餐厅查询一栏,点击进入会出现图2中的页面,我们可以在搜索栏中输入想要查询信息的城市名称,即可出现该城市的KFC餐厅相关信息
    image
    image
    2、比如说,我们输入北京进行搜素,该页面便会出现大量在北京的KFC餐厅信息,包括名称、地址、餐厅详情等等;我们的需求就是通过输入城市关键字,搜索该城市的相关KFC餐厅信息。在这里,细心的小伙伴会发现,当我们在搜索栏输入城市进行查询时,会发现其实地址栏的url并未改变,那应该很快反应到,这个信息页面应该就是ajax响应了。
    image
    3、于是F12打开开发者模式,就可以发现在根据城市搜索信息时确实会有XHR的请求响应,并且发现这是个POST请求,并且其中有5个请求参数,其中有个keyword的参数,很明显这就是用户搜索的城市关键字,在代码实现时我们只需将此参数进行封装请求即可,同时pageIndex和pageSize表示信息展示的起始页和页面数,这个可以自行控制。
    image
    image
    4、该请求的response响应结果正是指定城市的餐厅信息,只不过是json格式,我们将其进行提取标准化即可打印显示,或者也可持久化存储(这个供读者自行完成)。
    5、基础的流程已经分析清楚,接下来便可动手编码了。

二、关键字对肯德基餐厅进行爬取编码

  • 编码
# coding  : utf-8
import requests
import json

def KFC_spider(url=None, keyword='北京'):
    """
    根据关键字爬取KFC餐厅信息
    :param url: url链接
    :param keyword: 地址关键字
    :return:
    """
    if url is None:
        print("url should not be None!")
        return
    # 1.指定url
    url = url
    # 2.UA伪装
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'
    }
    # 3.设置请求参数
    params = {
        'cname': '',
        'pid': '',
        'keyword': keyword,
        'pageIndex': '1',
        'pageSize': '10'
    }
    # 4.发送请求
    response = requests.post(url=url, data=params, headers=headers)
    # 5.获取响应数据
    page_text = response.json()
    # 持久化存储
    fileName = keyword + ".json"
    fp = open(fileName, 'w', encoding='utf-8')
    json.dump(page_text, fp=fp, ensure_ascii=False)
    for data in page_text["Table1"]:
        print("序号:{}, 店名:{}, 地址:{}, 信息:{}".format(data["rownum"], data["storeName"], data["addressDetail"], data["pro"]))
    print("{}KFC餐厅信息爬取成功!".format(keyword))

if __name__ == '__main__':
    # 指定url
    url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
    # 输入地址关键字
    keyword = input("enter your address want to search:")
    # 爬取餐厅信息
    KFC_spider(url, keyword)
  • 执行结果
enter your address want to search:乐亭
序号:1, 店名:乐亭大东方, 地址:乐亭县城区中心社区金融街以北、发展大道以西大东方购物广场一层101号, 信息:Wi-Fi,店内参观
序号:2, 店名:乐亭大东方, 地址:乐亭县城区中心社区金融街以北、发展大道以西大东方购物广场一层101号, 信息:Wi-Fi,店内参观
乐亭KFC餐厅信息爬取成功!
  • 注意项 :
    如图所示,该异步加载页面的请求中,虽然已经包含请求参数,但是url中仍然有一个显式的参数,与之前的get()方法是不同的:如果将请求参数封装到params中,url中即可省略;但是这里的POST不同,因此该显式的参数无法或缺,否则数据请求将无法完成。
    image

标签:请求,keyword,url,信息,KFC,模块,餐厅,requests
来源: https://www.cnblogs.com/dai-zhe/p/14727401.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有