Python爬取肯德基位置信息案例 快来打我* 2022-08-28 09:43 150阅读 0赞 ### 文章目录 ### * 一、使用步骤 * * 1.需求分析 * 2.目标网址 * 二、代码 -------------------- # 一、使用步骤 # ## 1.需求分析 ## 爬取肯德基在中国某一城市的餐厅的名称与地址。 ## 2.目标网址 ## 点此跳转:[肯德基餐厅信息查询][Link 1] ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBANTTlsI_pmL_mtps_size_20_color_FFFFFF_t_70_g_se_x_16] 先不要点击“查询”: 抓包:空白处右键-------->检查------>Network: ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBANTTlsI_pmL_mtps_size_20_color_FFFFFF_t_70_g_se_x_16 1] 点击“查询”,可以发现页面的地址不变,但是页面的内容改变了。页面中用分页技术显示了该地区的肯德基分店的信息。点击第二页,发现页面的地址也没有变,以上说明这是一个ajax的请求,是异步请求服务器、动态刷新页面。 在确定是ajax后,就可以选择Fetch/XHR而不用选择All,然后选择Headers ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBANTTlsI_pmL_mtps_size_20_color_FFFFFF_t_70_g_se_x_16 2]这里可以找到请求URL,以及其请求方式为POST 继续往下滑,找到Post时携带的参数: ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBANTTlsI_pmL_mtps_size_14_color_FFFFFF_t_70_g_se_x_16] 复制参数(空值的参数也要一并复制) 分析参数: keyword表示要查询的城市; pageIndex表示要查询的页码,因此我们可以通过修改页码来爬取不同页数的数据; pageSize:表示一页可以含有多少条数据。 ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBANTTlsI_pmL_mtps_size_20_color_FFFFFF_t_70_g_se_x_16 3] -------------------- # 二、代码 # import requests #1.指定url,注意这里不要去掉?op=keyword,否则爬到-1000 url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword' #2.UA伪装 headers={ 'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Mobile Safari/537.36' } #爬虫函数 def catchinfo(kw,pnum): #3.post参数处理 param={ "cname":"", "pid": "", "keyword": kw, #这个keyword传给url中的OP,所以,url中的op不能去掉 "pageIndex": str(pnum), #页数 "pageSize": "10", } #4.发送请求 resp=requests.post(url=url,params=param,headers=headers) if resp.status_code==200: print('请求成功') #5.接收响应 return resp.json() def main(): #输入要查询的城市 kw=input('please input the city name: ') #从第一页开始 page=1 print('{}市的所有KFC店:'.format(kw)) #读取所有页 while True: #调用爬虫 json_data=catchinfo(kw,page) #当不再有数据时停止循环 if not json_data['Table1']: print('读取完毕') break else: #写入文本 with open(f'{ kw}.txt','a',encoding='utf-8') as fp: fp.write(str(json_data)) for i in range(len(json_data['Table1'])): #只输出店名和地址信息,其他存入文本 print('【{}】{}'.format(json_data['Table1'][i]['storeName'],json_data['Table1'][i]['addressDetail'])) page+=1 #进入下一页 if __name__ == '__main__': main() 结果: ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBANTTlsI_pmL_mtps_size_20_color_FFFFFF_t_70_g_se_x_16 4] 参考:[爬虫][Link 2] [Link 1]: http://www.kfc.com.cn/kfccda/storelist/index.aspx [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBANTTlsI_pmL_mtps_size_20_color_FFFFFF_t_70_g_se_x_16]: /images/20220828/02d8ad34c18d40819ff37be27b7aa39f.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBANTTlsI_pmL_mtps_size_20_color_FFFFFF_t_70_g_se_x_16 1]: /images/20220828/dc22c87230e94c4bb9723e5888afb414.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBANTTlsI_pmL_mtps_size_20_color_FFFFFF_t_70_g_se_x_16 2]: /images/20220828/e40b23c559da48bdba3dabca4830697e.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBANTTlsI_pmL_mtps_size_14_color_FFFFFF_t_70_g_se_x_16]: /images/20220828/f13335d7fd0548f1af2c2a7747ad6414.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBANTTlsI_pmL_mtps_size_20_color_FFFFFF_t_70_g_se_x_16 3]: /images/20220828/0495e809dee94523bd1bf99ab5477f62.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBANTTlsI_pmL_mtps_size_20_color_FFFFFF_t_70_g_se_x_16 4]: /images/20220828/e94be6ec4a2d49179acc6f2bbecb6448.png [Link 2]: https://blog.csdn.net/qq_44853197/article/details/110729034?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163350299416780261955038%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163350299416780261955038&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-110729034.first_rank_v2_pc_rank_v29&utm_term=%E7%88%AC%E5%8F%96%E8%82%AF%E5%BE%B7%E5%9F%BA%E9%A4%90%E5%8E%85%E5%9C%B0%E5%9D%80&spm=1018.2226.3001.4187
还没有评论,来说两句吧...