1. 程式人生 > 實用技巧 >爬蟲筆記(二):爬取藥監局所有詳情頁資料

爬蟲筆記(二):爬取藥監局所有詳情頁資料

藥監局網址: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儲存檔案花了半天時間。。。囧