项目实践《电商数据采集》

简介: 项目实践《电商数据采集》

在这个日新月异的科技时代,数据是驱动各种商业决策的重要因素。近些年,电商网站如淘宝、京东、亚马逊等的兴起,使得大量的商品信息、客户购买记录、商品评价等数据得以积累。这些数据为电商带来了无与伦比的竞争优势,但也对数据处理提出了更高的要求,因此,电商数据采集就显得尤为重要。

今天,我将与大家分享一份我编写的电商数据采集代码,该代码采用Python编程语言,通过自动化脚本,可以模拟人为操作,实现淘宝商品信息的自动抓取和保存。

前置接口

在您使用这段代码之前,需要安装一些Python库。这些库包括pyautogui(用于模拟鼠标键盘操作)、pyperclip(用于剪贴板操作)、cnocr(一个轻量级、高性能的中英文OCR库)和json(处理json数据)。

import pyautogui as pg
import pyperclip as pc
from cnocr import CnOcr
import time
import json

一、 自动化开启淘宝网站

首先,代码会弹出一个输入框让用户输入要打开的网址,默认为淘宝的网址。然后,通过识别屏幕上的Google Chrome图标,自动双击打开浏览器,输入网址并搜索。

# 自动化开启手机界面
try:
    users_input = pg.prompt(title="请输入您要打开的网址:", text="网址", default="https://www.taobao.com/")
    # print(users_input)
    #r"C:\Users\du'xiao'nan\Pictures\2024\Google.png"为我的Google Chrome图标图片放置地址,想正常使用,应选择自己的路径
    google_cente=pg.locateCenterOnScreen(r"C:\Users\du'xiao'nan\Pictures\2024\Google.png",confidence=0.8)
    pg.click(x=google_cente.x,y=google_cente.y,clicks=2)
    time.sleep(5)
    pg.write(users_input,interval=0.01)
    pg.press("enter")
    time.sleep(5)
    #  自动化输入 搜索内容
    pc.copy("手机")
    pg.hotkey("ctrl","v")
    pg.press("enter")
except:
    print("程序出错,请重新运行")

注意:因为脚本是通过识别屏幕上的Google Chrome图标,自动双击打开浏览器,所以脚本启动时应把应用快捷方式露出来

二、抓取商品图片并进行OCR识别

接下来,代码通过鼠标模拟点击和滚轮滚动,自动搜素并获取商品信息。然后,代码会自动截取屏幕上的商品信息区域,并通过cnocr库进行OCR识别,提取出商品的文本信息。

如果有多页商品,代码还可以通过模拟滚轮滚动实现翻页,反复进行上述操作,使得能够获取尽可能多的商品信息。

#基础版截一张
try:
    # 截图
    # 下拉界面
    time.sleep(1)
    pg.scroll(-450)
    img_phon =r"E:\b.webp"
    pg.screenshot(img_phon,region=(200,272,400,620))
    time.sleep(1)
    img_fp = r"E:\b.webp"

三、数据筛选和保存

最后,截图识别的文字会被转化为列表形式,经过筛选后会被写入到一个data.json文件中。筛选主要是去除识别结果不佳的文字,提高数据的准确性。

这份代码实现了一个简单的电商数据采集模型,它具有良好的扩展性和适应性。对于其他电商网站,只需稍作修改,就可以使用这套源码获取所需的数据。此外,你也可以根据自己的需要,修改和完善这份代码,使其更加适应你的需求。

# 创建CnOcr对象
    ocr = CnOcr()
    # 读取图像
    out = ocr.ocr(img_fp)
    # print(out)
    #筛选数据,写到data.json文件中
    with open("data.json","w",encoding="utf-8") as f:
        single_text = [i['text'] for i in out if i['score']>0.5]
        json.dump(single_text,f,ensure_ascii=False)
    print(single_text)
except:
    print("程序出错,请重新运行")

总的来说,这是一个实用的电商数据采集工具,它体现了Python在数据采集和处理方面的优势。使用Python进行数据采集,不仅可以节省大量的人力和时间,还可以提高数据处理的效率和准确性,相信对于广大的数据工作者来说,这将会是一个很好的帮手。

四、升级版

在基础版中,仅对页面上的一个固定区域进行截图和OCR识别。而在升级版中,程序对8个固定区域进行抓取,获取更多的数据。同时,由于无需遍历整个页面,效率也得到一定保障。

它主要由两个函数构成:

1. ocr_write()函数

该函数首先定义了8个商品截图区域的坐标。然后创建一个CnOcr对象用于对截图进行OCR识别。在循环过程中,它会依次对8个区域进行截图,并保存到特定的文件路径。然后使用OCR进行识别,如果识别的准确度超过50%,则将识别的文字信息添加到结果列表中。最后,将获取的所有文字信息保存到"data.json"文件中,并返回截图区域的坐标信息。

def ocr_write():
    # 截图
    # 下拉界面
    time.sleep(1)
    pg.scroll(-450)
    regions= [
        [200,272,400,620],
        [630,272,400,620],
        [1060,272,400,620],
        [1490,272,400,620],
        [200, 890, 400, 620],
        [630, 890, 400, 620],
        [1060, 890, 400, 620],
        [1490, 890, 400, 620],
    ]
    # 创建CnOcr对象
    ocr = CnOcr()
    # 读取图像
    # 筛选数据,写到data.json文件中
    all_test= []
    for index,region in enumerate(regions):
        filepath = r"E:\tupian\b"+str(index)+".webp"
        screen_fun(region,filepath)
        out = ocr.ocr(filepath)
        single_text = [i['text'] for i in out if i['score']>0.5]
        all_test.append(single_text)
    with open("data.json","w",encoding="utf-8") as f:
        json.dump(all_test,f,ensure_ascii=False)
    print(all_test)
    return regions

2. screen_fun(region,filepath)函数

该函数用于将指定区域的商品信息截图保存到指定路径。如果截图成功,则返回True,如果截图失败,则打印"截图失败"并返回False。

最后,通过调用ocr_write()函数,执行上述的截图、识别和保存的过程。

def screen_fun(region,filepath):
    try:
        pg.screenshot(filepath,region=region)
        return True
    except:
        print("截图失败")
        return False

这段代码实现了自动化截图并进行文字识别的过程,但需要注意的是,它目前只适用于特定的页面布局和分辨率,如果要应用到其他网页或电脑,可能需要对截图区域的坐标进行相应的调整。

#升级版截8张
#封装两个函数
#函数ocr_write():功能:保存八张图的截屏区域[[],[]]
#函数ocr_write_json():功能:保存八张图的截图区域到data.json文件中
def ocr_write():
    # 截图
    # 下拉界面
    time.sleep(1)
    pg.scroll(-450)
    regions= [
        [200,272,400,620],
        [630,272,400,620],
        [1060,272,400,620],
        [1490,272,400,620],
        [200, 890, 400, 620],
        [630, 890, 400, 620],
        [1060, 890, 400, 620],
        [1490, 890, 400, 620],
    ]
    # 创建CnOcr对象
    ocr = CnOcr()
    # 读取图像
    # 筛选数据,写到data.json文件中
    all_test= []
    for index,region in enumerate(regions):
        filepath = r"E:\tupian\b"+str(index)+".webp"
        screen_fun(region,filepath)
        out = ocr.ocr(filepath)
        single_text = [i['text'] for i in out if i['score']>0.5]
        all_test.append(single_text)
    with open("data.json","w",encoding="utf-8") as f:
        json.dump(all_test,f,ensure_ascii=False)
    print(all_test)
    return regions
def screen_fun(region,filepath):
    try:
        pg.screenshot(filepath,region=region)
        return True
    except:
        print("截图失败")
        return False
ocr_write()

五、完整版

我们看到在脚本的最后部分,代码通过循环结构自动进行了多次的页面滚动和信息抓取。特别的,每个大循环中都包含了一个小循环,小循环中进行了5次页面滚动和信息抓取。这样做能够最大程度地扩大信息抓取的范围。

最后,在所有信息抓取完成后,通过pg.alert()函数弹出一个提示框,提示用户程序已完成。

# 电商数据采集-淘宝
import pyautogui as pg
import pyperclip as pc
from cnocr import CnOcr
import time
import json
# 自动化开启手机界面
try:
    users_input = pg.prompt(title="请输入您要打开的网址:", text="网址", default="https://www.taobao.com/")
    # print(users_input)
    google_cente=pg.locateCenterOnScreen(r"C:\Users\du'xiao'nan\Pictures\2024\Google.png",confidence=0.8)
    pg.click(x=google_cente.x,y=google_cente.y,clicks=2)
    time.sleep(5)
    pg.write(users_input,interval=0.01)
    pg.press("enter")
    time.sleep(5)
    #  自动化输入 搜索内容
    pc.copy("手机")
    pg.hotkey("ctrl","v")
    pg.press("enter")
except:
    print("程序出错,请重新运行")
    
#完整版截所有
#封装两个函数
#函数ocr_write():功能:保存八张图的截屏区域[[],[]]
#函数ocr_write_json():功能:保存八张图的截图区域到data.json文件中
#思路与升级版一至
def ocr_write():
    # 截图
    # 下拉界面
    time.sleep(1)
    pg.scroll(-450)
    regions= [
        [200,272,400,620],
        [630,272,400,620],
        [1060,272,400,620],
        [1490,272,400,620],
        [200, 890, 400, 620],
        [630, 890, 400, 620],
        [1060, 890, 400, 620],
        [1490, 890, 400, 620],
    ]
    # 创建CnOcr对象
    ocr = CnOcr()
    # 读取图像
    # 筛选数据,写到data.json文件中
    all_test= []
    for index,region in enumerate(regions):
        filepath = r"E:\tupian\b"+str(index)+".webp"
        screen_fun(region,filepath)
        out = ocr.ocr(filepath)
        single_text = [i['text'] for i in out if i['score']>0.5]
        all_test.append(single_text)
    with open("data.json","w",encoding="utf-8") as f:
        json.dump(all_test,f,ensure_ascii=False)
    print(all_test)
    return regions
def screen_fun(region,filepath):
    try:
        pg.screenshot(filepath,region=region)
        return True
    except:
        print("截图失败")
        return False
for i  in range(100):
    time.sleep(1)
    ocr_write()
    for i  in range(5):
        pg.scroll(-1000)
        ocr_write()
    pg.click(x=1394,y=681,clicks=2)
arr1 = pg.alert(title='项目进程',text='程序完成',button='ok')

总的来说,相比于升级版,这个版本的代码实现了更大范围的信息抓取,同时也增加了整个过程的自动化程度。不过,由于代码中包含了大量的循环和滚动操作,因此程序的运行时间可能会较长。

相关文章
|
分布式计算 运维 DataWorks
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(1)
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(1)
212 0
|
数据建模
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(5)
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(5)
108 0
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(5)
|
数据建模
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(16)
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(16)
|
DataWorks 数据建模
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(7)
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(7)
|
分布式计算 DataWorks 数据建模
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(2)
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(2)
119 0
|
数据建模
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(6)
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(6)
|
SQL 分布式计算 数据建模
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(9)
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(9)
127 0
|
数据建模
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(12)
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(12)
|
分布式计算 DataWorks 数据可视化
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(21)
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(21)
|
SQL 数据建模 开发者
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(10)
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(10)
156 0