基于requests模块发起ajax的post请求
需求:爬取肯德基餐厅查询http://www.kfc.com.cn/kfccda/index.aspx中指定某个城市地点的餐厅数据
点击肯德基餐厅查询页面
输入北京点击查询是一个提交form表单,异步ajax的post请求,使用抓包工具抓取请求
基于ajax的POST请求携带的参数:
keyword参数是城市名,改变这个参数该请求的数据也会改变
pageIndex:第几页的数据值 ,例子:第一页
pageSize:表示一页获取几条数据,获取10条数据
可以调整这些参数,会针对响应数据变化
import requests import json # 1指定ajax-post请求的url(通过抓包进行获取) url = \'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword\' # 处理post请求携带的参数(从抓包工具中获取) data = { \'cname\': \'\', \'pid\': \'\', \'keyword\': \'北京\', \'pageIndex\': \'2\', \'pageSize\': \'10\' } # 自定义请求头信息,相关的头信息必须封装在字典结构中 headers = { \'User-Agent\': \'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36\', } # 2.发起基于ajax的post请求 response = requests.post(url=url,data=data,headers=headers) #获取响应内容:响应内容为json串 data = response.text data = json.loads(data) for i in data["Table1"]: print(i) \'\'\' {\'rownum\': 11, \'storeName\': \'巴沟\', \'addressDetail\': \'巴沟路2号北京华联万柳购物中心一层\', \'pro\': \'Wi-Fi,礼品卡,生日餐会\', \'provinceName\': \'北京市\', \'cityName\': \'北京市\'} {\'rownum\': 12, \'storeName\': \'北京站宝宸\', \'addressDetail\': \'北京站街22号一层+二层\', \'pro\': \'24小时,Wi-Fi,礼品卡\', \'provinceName\': \'北京市\', \'cityName\': \'北京市\'} {\'rownum\': 13, \'storeName\': \'欢乐谷\', \'addressDetail\': \'南磨房乡小武基北路北京欢乐谷内欢乐时光区一层\', \'pro\': \'礼品卡\', \'provinceName\': \'北京市\', \'cityName\': \'北京市\'} {\'rownum\': 14, \'storeName\': \'亦庄沃尔玛\', \'addressDetail\': \'经济技术开发区文化园东路6号北京经开汇展中心1-2层\', \'pro\': \'Wi-Fi,店内参观,礼品卡,生日餐会\', \'provinceName\': \'北京市\', \'cityName\': \'北京市\'} {\'rownum\': 15, \'storeName\': \'北京南站二\', \'addressDetail\': \'北京南站候车大厅地下一层(快速进站口1)部分场地\', \'pro\': \'礼品卡\', \'provinceName\': \'北京市\', \'cityName\': \'北京市\'} {\'rownum\': 16, \'storeName\': \'北京站Select\', \'addressDetail\': \'北京火车站候车大厅一层西侧原商务中心\', \'pro\': \'精选店,礼品卡\', \'provinceName\': \'北京市\', \'cityName\': \'北京市\'} {\'rownum\': 17, \'storeName\': \'西客站内三\', \'addressDetail\': \'莲花桥东路118号北京西客站候车大厅内2层第4营业厅及2层夹层回廊\', \'pro\': \'礼品卡\', \'provinceName\': \'北京市\', \'cityName\': \'北京市\'} {\'rownum\': 18, \'storeName\': \'通州北苑华联\', \'addressDetail\': \'杨庄北里五十二号天时名苑小区十四号楼北京华联南侧一层\', \'pro\': \'Wi-Fi,店内参观,礼品卡,生日餐会\', \'provinceName\': \'北京市\', \'cityName\': \'北京市\'} {\'rownum\': 19, \'storeName\': \'日照银座餐厅\', \'addressDetail\': \'北京路与泰安路交汇处银座商城一楼\', \'pro\': \'Wi-Fi,礼品卡,生日餐会\', \'provinceName\': \'山东省\', \'cityName\': \'日照市\'} {\'rownum\': 20, \'storeName\': \'荆州北京路\', \'addressDetail\': \'沙区北京中路227号肯德基餐厅\', \'pro\': \'Wi-Fi,点唱机,礼品卡,生日餐会\', \'provinceName\': \'湖北省\', \'cityName\': \'荆州市\'}
使用抓包工具抓取ajax异步请求所对应的url