最近在学习爬虫的时候,正好用一个开源的CRMEB小程序商城框架搭建了一个,发现后台导出订单功能不好用,也没办法更好的控制想获取什么信息就获取什么信息,于是自己尝试写了一个简单的爬虫爬取需要的信息。

运行环境

Python3.8、  requests、openpyxl

安装依赖包:

pip3 install requests, openpyxl

寻找订单接口地址:

登录进入后台获取数据接口及Cookie,由于我这里用的是我自己搭建的后台,账号密码我自己都知道,我们登陆之后,直接用Cookie进行登录。

python抓取JSESSIONID Python抓取erp系统_数据

我们获取到的订单管理的接口地址是:你的域名/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中,具体大家看代码吧,这个还有优化的空间,欢迎大家学习研究,请勿用于非法用途。