最近在學習爬蟲的時候,正好用一個開源的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中,具體大家看代碼吧,這個還有優化的空間,歡迎大家學習研究,請勿用於非法用途。