一、需求
此代码是为完成波波老师python爬虫视频作业所做
对应视频: 波波老师B站视频[P10] 对应up为:路飞学城IT
基本要求:
爬取指点地点的肯德基餐厅数据
进阶要求:
1.能够翻页爬取
2.能够爬取到本次搜索所有的餐厅数据,也就是一直爬到最后一个
二、代码
1. 引入库
# -*- codeing = utf-8 -*-
# @Time: 2020/12/22 0:38
# @Author: Si
# @File: test_kfc.py
# @Software: PyCharm
import requests
import json
2. main()
此处指定url,并在接收到获得的所有数据后进行持久化存储。
def main():
#1.指定url
url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
list_data_all = getData(url)
# print(list_data)
#6.持久化存储
fp = open('./kfc.json','w',encoding='utf-8')
json.dump(list_data_all,fp=fp,ensure_ascii=False)
print('over')
3. getData()
构建输入为url,输出为所搜索到的全部KFC餐厅地址的json形式数据。
具体步骤为:
- UA伪装
- 封装data数据,此处可以改pageIndex的值来调节页数来达到在网页中翻页的目的。
- 请求url
- 获取响应数据
- 通过抓包到的网页编码,分析出餐厅总数及当前餐厅序号,当序号到达总数时,中断请求数据的循环。具体解释在代码后的备注里。
def getData(url):
#2.UA伪装
headers = {
"User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64;x64;rv: 84.0) Gecko / 20100101 Firefox / 84.0"
}
list_data_all = []
city = input("请输入想搜索的城市")
i = 0
while True:
i = i + 1
#3.封装data数据
data={
'cname':'',
'pid':'',
'keyword': city ,
'pageIndex': str(i),
'pageSize': '10',
}
try:
#4.请求url
response = requests.post(url=url, data=data, headers=headers,)
# print(response)
except Exception as excep:
print(excep,'111111') #用数字快速定位出错位置
break
#5.获取响应数据
list_data = response.json()
list_data_all.append(list_data)
try:
rowcount = list_data['Table'][0]['rowcount'] #字典里'Table'标签的值,是个列表,取列表第一个元素,还是字典,取其中'rowcount'标签的值
rownum= list_data['Table1'][-1]['rownum'] #-1 表示列表最后一位
if rowcount == rownum: #据 F12 观察,每个对餐厅搜索的结果请求都会返回rowcount这个数据,也就是总餐厅数
break #每个餐厅的字典里都包括自己的序号,就是rownum
except Exception as except2:
print(except2,'22222222') #用数字快速定位出错位置
break
return list_data_all
4. 收尾
if __name__ == "__main__": #当程序执行时
#调用函数
main()
print('爬取完毕')
结语
如果对代码有疑问或其他问题,欢迎评论告诉我,我会常来看 (毕竟面向CSDN编程) 。我也是一个刚刚学习python的新手,希望在疫情期间迎头赶上,欢迎大家一起讨论,共同进步。