python爬虫实例——获取肯德基餐厅位置

学了python爬虫也有一段时间了,试着写了一小段代码看看自己掌握的程度, 目标是准确爬取到肯德基在指定城市的所有餐厅位置,话不多说,直接上代码:

import requests #导入库
if __name__ == "__main__":
    #指定url
    url = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword"

首先要做的就是导入requests库,接下来按照爬取步骤就是得到url链接了,这个链接是从肯德基官网得到的,首先打开网站,接着按F12进入检查模式

依次点击完之后发现下面并没有显示任何数据,这时我们在网站的查询栏里随便输入一个城市,来看看会出现什么

划到最下面

在网站点击查¥查询之后会出来一组数据,点开就能得到爬虫需要的很多数据了。

  • Request URL: 后面的链接就是发送请求的url。
  • Request Method: POST 告诉我们这个请求是属于post请求,而不是get请求。
  • Content-Type: text/plain; charset=utf-8 这个代表的是数据类型为text/plain,所以后面就不能用json。
  • User-Agent: 这个就是我们用来UA伪装的数据了,等会也会使用到。
  • From Data:
    • cname: #这里是空的所以不用管
    • pid: #也是空的所以不用管
    • keyword: 深圳 #我刚刚查询的是深圳,所以这里显示了一个深圳,表示这个是关键词
    • pageIndex: 1 #这个表示的页码
    • pageSize: 10 #这个是每页显示的地址数量

分析完之后可以接着开始写代码了:

import requests #导入库
if __name__ == "__main__":
    #指定url
    url = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword"
#自定义查询
    kw = input("请输入要查询的城市:")
    keyword = kw
    #编辑参数
    data = {
         'cname':'',
         'pid':'',
         'keyword': kw, #查询关键字
         'pageIndex': '1',#页码
         'pageSize': '100'#每页显示的地址数量
    }

由于我不想固定的只获取到某个地区的数据,所以在这里把keyword参数写成用户自定义的类型,其它参数可以不变,如果想获取到当前地区所有的地址的话,可以把'pageSize'的值附高一点

接下来就是进行UA伪装,把我们获取到的User-Agent:写到代码里面就可以了,接着发送请求,这里注意一下刚刚看到网页是用的post请求,所以我们下面也需要使用post来发送请求:

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

发送完请求会得到返回数据,把数据保存下来。到此整个代码就结束了。最后运行一下看看会不会报错,是否准确得到了自己想要的数据。我把完整代码放到下面,可以参考一下:

import requests #导入库

if __name__ == "__main__":
    #指定url
    url = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword"
    #自定义查询
    kw = input("请输入要查询的城市:")
    keyword = kw
    #编辑参数
    data = {
         'cname':'',
         'pid':'',
         'keyword': kw, #查询关键字
         'pageIndex': '1',#页码
         'pageSize': '100'#每页显示的地址数量
    }
    #UA伪装
    headers = {'User-Agent': '填入自己的伪装地址'}
    #发送请求
    response = requests.post(url=url,data=data,headers=headers)
    #获取数据
    list_data = response.text

    #数据化保存
    filename = kw + 'kfc.html'
    with open(filename,'w',encoding='utf-8') as fp:
        fp.write(list_data)

    print(filename,"获取完毕!!")
LEAVE A REPLY
loading