最近在学习爬虫的时候,正好用一个开源的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中,具体大家看代码吧,这个还有优化的空间,欢迎大家学习研究,请勿用于非法用途。