葯監局網址:http://scxk.nmpa.gov.cn:81/xk/
葯監局首頁:
詳情頁:
目的:爬取葯監局所有詳情頁信息,保存在本地,以csv文件格式保存。
分析主頁:
主頁的response返回內容中,包含了這一頁中的所有企業的id
修改網頁參數page可以實現翻頁
所以首先要通過訪問主頁,獲取所有企業id,放到一個list中。
if __name__ == '__main__': url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36' } data_ids=[] for i in range(0,50): #50頁之后數據異常,就爬到50頁吧 data = { 'on': 'True', 'page':str(i), 'pageSize':'15', 'productName':'', 'conditionType':'1', 'applyname':'', 'applysn':'' } dict_data = requests.post(url = url ,data = data,headers = headers).json() time.sleep(0.1) for j in dict_data['list']: data_ids.append(j['ID'])
data_ids中就是所有企業的id
下一步是通過numpy創建csv文件,把列索引創建出來。先對data_ids第0個id,也就是第0個企業的詳情頁進行解析,

把每一項作為列索引
url_creat_csv = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById' creat_csv(url_creat_csv,data_ids[0])
創建csv文件函數定義
def creat_csv(url,list_id_0): df = pd.DataFrame() headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36' } data = { 'id': list_id_0 } dict_data = requests.post(url=url, data=data, headers=headers).json() for i in dict_data.keys(): df[i]='' df.to_csv('1.csv',encoding = 'utf-8_sig')
最后將每一個企業id對應詳情頁解析,放到csv文件中
pd = pd.read_csv('1.csv',encoding = 'utf-8') url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById' for (j,i) in zip(range(len(data_ids)),data_ids): #對每一個id網頁進行訪問 data = { 'id':i } data_js = requests.post(url = url ,data = data,headers = headers).json() for k in data_js.keys():#k是遍歷data_js中的key pd.loc[j,k] = data_js[k] pd.to_csv('1.csv', encoding='utf-8_sig')
最后爬到的文件是這樣的:
如果覺得列索引是英文的,可以用字典對應替換下,這里就不寫了。
個人總結:爬數據不難,難在保存在本地中。利用pandas保存文件花了半天時間。。。囧