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!!")
爬取到的结果:(仅作部分展示)