python爬取CRMEB3.2 後臺訂單數據並導出excel

最近在學習爬蟲的時候,正好用一個開源的CRMEB小程序商城框架搭建了一個,發現後臺導出訂單功能不好用,也沒辦法更好的控制想獲取什麼信息就獲取什麼信息,於是自己嘗試寫了一個簡單的爬蟲爬取需要的信息。

運行環境

Python3.8、  requests、openpyxl

安裝依賴包:

pip3 install requests, openpyxl

尋找訂單接口地址:

登錄進入後臺獲取數據接口及Cookie,由於我這裏用的是我自己搭建的後臺,賬號密碼我自己都知道,我們登陸之後,直接用Cookie進行登錄。

我們獲取到的訂單管理的接口地址是:你的域名/admin/order.store_order/order_list.html?page=1&limit=20

URL總共有兩個參數,page爲頁碼,limit爲每一頁顯示的數量,一會爬取的時候修改這裏的值就可以了。

創建一個load.py文件

import json
import requests


filename = 'order_list.json'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
    'Referer': 'http://shop.crmeb.net/admin/order.store_order/index.html',
    'Cookie': '複製替換爲你的Cookie信息'
}

text_json = requests.get(
        # 爬取270條數據
        'http://shop.crmeb.net/admin/order.store_order/order_list.html?page=1&limit=270', 
        headers=headers
    ).content.decode('utf-8')

# 爬取之後存入order_list.json文件
with open(filename, 'w', encoding='utf-8') as object_fp:
    object_fp.write(text_json)

其實這上一步也可以直接用接口地址,或者採用複製粘貼保存到本地,但爲了學習爬蟲我們還是採用代碼的方式保存獲取。

解析剛纔爬取的json文件,獲取想要的信息,並保存到excel中,數據放在本地的好處是執行比較快。

創建一個function_crmeb.py文件

import json
import re
import requests
from openpyxl import Workbook

filename = 'order_list.json'

def load_json(filename):
    """讀取json,獲取數據"""
    with open(filename, 'r') as objfile:
        datas = json.load(objfile).get('data', '不存在')
        return datas


def read_data(dict_name):
    """ 
    dict_name對應的每個值,讀取訂單信息
        order_id - 訂單ID | pay_price - 實際支付 | pay_type_name - 支付類型 | pink_name - 訂單類型
        mark - 用戶備註(郵箱)| total_num - 訂單數量 | add_time - 支付時間 | _info - 商品名稱(返回一個列表)
    """
    datas = load_json(filename)
    return [data[dict_name] for data in datas]


def get_request(url, params=None, headers=None):
    """ GET方式爬取頁面信息,返回推廣人信息 """
    tgr_list = []
    oid = read_data('id')
    for id in oid:
        params = {'oid': id}
        text = requests.get(url, params=params, headers=headers).content.decode('utf-8')
        regex = re.compile(r'推廣人: (.*)</div>')
        mo = re.findall(regex, text)
        tgr_list += mo
    return tgr_list



if __name__ == "__main__":

    from openpyxl import Workbook
    # 獲取推廣人信息
    url = 'http://www.crmeb.com/admin/order.store_order/order_info?'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
        'Cookie': '更換爲你的Cookie'
    }

    filename = 'order_list.json'

    def cell_range(wb):
        ws = wb.active
        return ws

    def save_xlsx(ws, title, sheets, column, start=2):
        ws[column+str(start-1)] = title
        for i in list(range(start, len(sheets)+start)):
            ws[column+str(i)].value = sheets[i-start]

    wb = Workbook()
    ws = cell_range(wb)

    # 設置訂單號
    order_id = read_data('order_id')
    save_xlsx(ws, title='訂單號', sheets=order_id, column='A')

    # 設置訂單號
    total_num = read_data('total_num')
    save_xlsx(ws, title='訂單數量', sheets=total_num, column='B')

    # 設置支付時間
    add_time = read_data('add_time')
    save_xlsx(ws, title='支付時間', sheets=add_time, column='C')

    # 設置實際支付
    pay_price = read_data('pay_price')
    save_xlsx(ws, title='實際支付', sheets=pay_price, column='D')

    # 設置支付類型
    pay_type_name = read_data('pay_type_name')
    save_xlsx(ws, title='支付類型', sheets=pay_type_name, column='E')

    # 設置推廣人
    tuiguang = get_request(url=url, headers=headers)
    save_xlsx(ws, title='推廣人', sheets=tuiguang, column='F')

    # 設置產品名稱
    names = [name['_info'][0]['cart_info']['productInfo']['store_name'] for name in load_json(filename)]
    save_xlsx(ws, title='產品名稱', sheets=names, column='G')

    wb.save('crmeb.xlsx')


  

這個文件主要用來獲取json的數據,但是他的推廣人信息不在這個數據裏邊,而在每個產品的詳情頁,他的詳情頁有是以靜態模板生成的,我們需要根據訂單ID來獲取每個產品的詳情頁,再利用正則表達式獲取推廣人信息,並保存到excel中,具體大家看代碼吧,這個還有優化的空間,歡迎大家學習研究,請勿用於非法用途。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章