爬蟲案例
阿新 • • 發佈:2020-06-27
1、爬取肯德基的所有餐廳資訊 kfc.com.cn/kfccda/storelist/index.aspx
肯德基官網--餐廳查詢--輸入查詢關鍵字--點選查詢
發現位址列沒有發生變化,說明發送的是ajax請求
2、爬取國家藥品監督管理局中基於中華人民共和國化妝品生產許可證相關資料
125.35.6.84:81/xk/
動態載入資料
首頁中對應的企業資訊資料是通過ajax動態請求得到的。
http://125.35.6.84:81/xk/itownet/portal/dzpz.jsp?id=0868a9efa23f4a18a5351e5f34b2b705
通過分析詳情頁url發現
--url的域名都是一樣的,只有攜帶的引數(id)不一樣
--id值可以從首頁對應的ajax請求到json串中獲取
--域名和id值拼接一個完整的企業對應的詳情頁面
詳情頁的資料也是靠動態加載出來的
http://125.35.6.84:81/xk/itownet/portal/dzpz.jsp?id=b77e2f05756c4479b8e61dfd0516d1e1
觀察後發現:所有的post請求的url都是一樣的,只有引數id值是不同的。
如果我們可以批量獲取多家企業的id後,就可以將id和url形成一個完整的詳情頁
http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList
3、獲取id,通過得到返回的json資料得到id
4、線上json解析工具 http://www.kjson.com/
import requests import json if __name__ == "__main__": url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36' } data = { 'n': 'true', 'page': '1', 'pageSize': '15', 'productName':'', 'conditionType': '1', 'applyname':'', 'applysn':'' } id_list = [] #儲存企業的id all_data_list = [] #所有企業詳情資料 json_ids = requests.post(url=url,headers=headers,data=data).json() for dic in json_ids['list']: id_list.append(dic['ID']) #根據id拼接ajax請求 #獲取企業詳情資料 post_url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById" for id in id_list: data = { "id":id } detail_json = requests.post(url = post_url,headers=headers,data = data).json() #print(detail_json,'--------overing----------') all_data_list.append(detail_json) #持久化儲存 fp = open("./allData.json",'w',encoding='utf-8') json.dump(all_data_list,fp=fp,ensure_ascii=False) print("over!!!!")
特別說明:這是根據老男孩IT學習所做的筆記,感謝佩奇老師,https://www.bilibili.com/video/BV11J411q73G