基於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