python爬虫学习day3—KFC肯德基餐厅信息查询

##第零步

安装requests库以及了解AJAX请求

##第一步

打开肯德基餐厅信息查询 (kfc.com.cn)随便输入一个地址后发现页面没有整体刷新,并且点击下一页页面也仍然是局部刷新,因此判断是AJAX请求。

##第二步

F12打开控制台,点击网络(network),选择XHR(实现网页得局部刷新)或者叫Fetch/XHR。

选择一个地址后,我们可以得到

python爬虫学习day3—KFC肯德基餐厅信息查询_第1张图片

点击后我们可以得到:其url为

https://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname

请求方式为:POST 

响应标头Content-Type:text

表单数据为:

cname:安陆

pid:

pageIndex:1

pageSize:10

通过多次切换城市与点击下一页 不难看出 cnname为城市 pageIndex为第几页 

##第三步

首先,由于网站有UA检测反爬,我们进行UA伪装

headers = {"User-Agent": "自己浏览器的标识"}

输入url:

https://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname

 由于这是一个post请求,其中cnname为城市 pageIndex为第几页,因此我们还需要考虑将该城市所有页面内容都爬下来,因此可以选择设置一个较大的页数,cnnane让用户进行输入

here = input("输入地区:")
for i in range(1, 100):
    params = {"cname": here, "pid": "", "keyword": "", "pageIndex": i, "pageSize": "10"}
    response = requests.post(url, headers=headers, params=params)

由预览可以知道response.text是一个字符串形式的字典,并且有效内容存储在[Table1]下

因此我们需要将data转换成字典,然后我们进行判断,如果[Table1]下有值,则打印,如果没有值,则跳出循环。PS:持久化存储可见day2

    data = eval(response.text)
    data = data["Table1"]
    if data:
        print(data)
    else:
        print("打印已完成")
        break

##最后

以下是全部代码:

import requests
url = "https://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname"
headers = {"User-Agent": "xxxx"}
here = input("输入地区:")
for i in range(1, 100):
    params = {"cname": here, "pid": "", "keyword": "", "pageIndex": i, "pageSize": "10"}
    response = requests.post(url, headers=headers, params=params)
    data = eval(response.text)
    data = data["Table1"]
    if data:
        print(data)
    else:
        print("打印已完成")
        break

PS:网站的反爬机制并非一成不变,因此代码具有时效性,截至文章发出,代码仍然可用。

PS:大一新生学习第三天,勿喷。如有错误,烦请指正,谢谢!

你可能感兴趣的:(爬虫,学习,beautifulsoup)