爬取廣州所有停車場資料(Python)(並行加速版本)

肥宅_Sean發表於2018-04-15

之前做過這個的單程式版本。這次使用多程式來實現~
爬取廣州所有停車場資料(Python)

大家可以對比著看一下,在原來的單程式爬蟲的基礎進行改進而得到的產品。

import requests
import os
import json
import multiprocessing
import time


def getAllJson(Session, data, headers):
    url = 'http://219.136.133.163:8000/Pages/Commonpage/AsyGetData.asmx/GetParkList'
    res = Session.post(url, data=data, headers=headers)
    res.encoding = 'utf-8'
    with open('./Data/' + data['cp'] + '.json', 'w') as f:
        json.dump(res.json(), f, ensure_ascii=False)


if __name__ == '__main__':
    st = time.time()
    headers = {
        'X-Requested-With': 'XMLHttpRequest',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
    }
    pageSession = requests.Session()
    url = 'http://219.136.133.163:8000/Pages/Commonpage/AsyGetData.asmx/GetParkList'
    pageSession.get(url, headers=headers)
    data = {
        'cp': '1',
        'ps': '10',
        'kw': '',
        'lon': 'undefined',
        'lat': 'undefined',
        'type': 'undefined'
    }
    if not os.path.exists('./Data'):
        os.mkdir('./Data')
    p_list = []

    for i in range(318):
        data['cp'] = str(i + 1)
        p = multiprocessing.Process(target=getAllJson, args=(pageSession, data, headers))
        p.start()
        p_list.append(p)
        if len(p_list) == 16:
            for p in p_list:
                p.join()
            p_list = []
    et = time.time()
    print(et - st)

相關文章