見出し画像

ebay用投稿データをメルカリから、自動作成するツールを作った話。

猛烈に作った、ツールをただ淡々とコードを貼ってきます。
ebay転記がすごくめんどくさいので、転記したい情報をすべて作らせることを目的に、このツールをつくりました。

①まずは、メルカリのショップ情報をすべて収集。

url = 'https://jp.mercari.com/'
url = url + 'user/profile/930376259?status=on_sale'
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome import service as fs
from selenium.webdriver.chrome.options import Options
from urllib.parse import urljoin
import time
import requests
from bs4 import BeautifulSoup
import pandas as pd
import shutil
import csv
import os
import glob
from PIL import Image, ImageFilter
from natsort import natsorted
import re
pagnation = [] #次のボタンhref保管用
souptable = [] #各pageのsrc保管用
gazo = [["priceA","linkB",'image']]
options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
driver.execute_script("""delete Object.getPrototypeOf(navigator).webdriver;""")
driver.get(url)
time.sleep(2)
soupsrc = BeautifulSoup(driver.page_source, 'html.parser')
driver.close()
souptable.append(soupsrc)

#print(souptable)

try:
    pagehref = soupsrc.find(class_ = 'merButton secondary__01a6ef84 medium__01a6ef84')
    #print(pagehref)
    pagehref = pagehref.find('a').get('href')
    base = 'https://jp.mercari.com/'
    pagehref = urljoin(base, pagehref)
    pagnation.append(pagehref)
    
    for pagesrc in pagnation:
        CHROMEDRIVER = r'C:\Users\Owner\Desktop\work_current\chromedriver\chromedriver.exe'
        options = webdriver.ChromeOptions()
        options.add_argument('--headless')
        driver = webdriver.Chrome(options=options)
        driver.execute_script("""delete Object.getPrototypeOf(navigator).webdriver;""")
        driver.get(pagesrc)
        time.sleep(2)
        soupsrc = BeautifulSoup(driver.page_source, 'html.parser')
        souptable.append(soupsrc)
        driver.close()
        
    for soup in souptable:
        soup1 = soup.find(class_ = 'sc-a6b7d8a7-7 ACaYy')
        soup2 = soup1.find_all('div')
        for i in soup2:
            #print(i)
            try:
                price = i.find('div').find('figure').find('span').getText()
                price = price.replace('¥','').replace(',','')
                price = int(price)
                if price <= 40000:
                    link = i.find('a').get('href')
                    link = urljoin(base, link)
                    image = i.find('img').get('src')
                    gazo.append([price,link,image])
      
            except BaseException:
                #print('error')
                continue
        #print(gazo)

except:

    CHROMEDRIVER = r'C:\Users\Owner\Desktop\work_current\chromedriver\chromedriver.exe'
    options = webdriver.ChromeOptions()
    #options.add_argument('--headless')
    driver = webdriver.Chrome(options=options)
    driver.maximize_window()
    driver.execute_script("""delete Object.getPrototypeOf(navigator).webdriver;""")
    driver.get(url)
    time.sleep(2)
    driver.execute_script('window.scrollTo(0, 250);') #srcがみえるまでスクロール
    driver.execute_script("document.body.style.zoom='30%'")
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    driver.close()
    soup1 = soup.find_all(class_ = 'sc-bcd1c877-2 gWHcGv')
    #print(soup1)
    base = 'https://jp.mercari.com/'

    try:
        for i in soup1:
            #print(i)
            price = i.find(class_ = 'number__6b270ca7').getText()
            price = price.replace('¥','').replace(',','')
            #price = int(price)
            #print(price)
            image = i.find('img').get('src')
            #print(image)
            link = i.find('a').get('href')
            link = urljoin(base, link)
            #print(link)
            gazo.append([price,link,image])
    except BaseException:
        print('error')
        #continue
path = r'C:\Users\Owner\Desktop\work_current\sorce\mercarin.csv' 
path2 = r'C:\Users\Owner\Desktop\work_current\sorce\mercarin.csv' 
# CSVファイルを開く。ファイルがなければ新規作成する。
f = open(path, "w", encoding='utf-8-sig') 
writecsv = csv.writer(f, lineterminator='\n')
writecsv.writerows(gazo)#リスト内容書き込み
f.close() # CSVファイル保存
df = pd.read_csv(path2, encoding='utf-8-sig')
df = df.drop_duplicates()
df.to_csv(path2, encoding='utf-8-sig',index=False)
print("csvにて保存完了")

②各itemの写真を保管用フォルダを作成(ebayに、全部自動で貼付け用)

#写真投稿用フォルダ作成
path = r'C:\Users\Owner\Desktop\work_current\sorce\mercarin.csv' 
path2 = r'C:\Users\Owner\Desktop\work_current\sorce\mercarin.csv' 
df34 = pd.read_csv(path2, encoding='utf-8-sig')
df35 = df34['image']
path = r"C:\Users\Owner\Desktop\work_current\image"
os.makedirs(path, exist_ok=True)
shutil.rmtree(path)
os.mkdir(path)


for src in df35:
    time.sleep(1) 
    url = src
    #print(url)
    target = '/photos/'
    idx = url.find(target)  # 半角空白文字のインデックスを検索
    folder_name = url[idx:].replace('/photos/','')
    target = '.'
    idx = folder_name.find(target)  # 半角空白文字のインデックスを検索
    folder_name = folder_name[:idx].replace('_1','')
    pathphoto = os.path.join(path, str(folder_name))
    os.makedirs(pathphoto, exist_ok=True)
print("写真投稿用フォルダ作成済")

③各itemから、正規表現でほしい情報を抽出(ここが腕の見せ所!)

path2 =r"C:\Users\Owner\Desktop\work_current\sorce\mercarin.csv"
#df = pd.read_excel(path)#excel読み込み
df36 = pd.read_csv(path2, encoding='utf-8-sig')
df37 = df36['linkB']
japan_list = [['titleD','explainF','spec','condition','detaitcondition']]
num = 2

for url in df37:
    CHROMEDRIVER = r'C:\Users\Owner\Desktop\work_current\chromedriver\chromedriver.exe'
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    driver = webdriver.Chrome(options=options)
    driver.execute_script("""delete Object.getPrototypeOf(navigator).webdriver;""")
    driver.get(url)
    time.sleep(1)
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    driver.close()
    #print(url)

    try:

        soup2 = soup.find(class_ = 'heading__a7d91561 page__a7d91561')#title class
        title = soup2.getText()
        soup3 = soup.find(class_ = 'content__80094258 clamp__80094258')
        #print(soup3)
        explain = soup3.getText()
        #print(explain)
        #explain = explain.replace('\r\n\n','\n').replace(' ',' ')+ 'end'
        explain = explain.replace('\r','').replace('\n\n\n\n\n\n','\n').replace('\n\n\n\n\n','\n').replace('\n\n\n\n','\n').replace('\n\n\n','\n').replace(' ',' ').replace('\n\n','\n')+ '\n' + 'end'
        explain1 = re.findall('.[商][品][説][明][\n]?[\n]?[\n]?.+[\n][\n]?[\n]?.+[\n].?[\n]?[\n]?.+[\n].?[\n]?[\n]?.{0,}.?[\n]?' ,explain)
        
        if len(explain1) == 0:
            explain1 = re.findall('.[商][品][状][態][\n]?[\n]?[\n]?.+[\n][\n]?[\n]?.+[\n].?[\n]?[\n]?.+[\n].?[\n]?[\n]?.{0,}.?[\n]?' ,explain)
        
        if len(explain1) == 0:
            #print('ひっかかり')
            explain2 = re.findall('.?[光][学].?[\n]?[\n]?[\n]?.+[\n]?[\n]?[\n]?.+[\n]?[\n]?[\n]?' ,explain)
            explain3 = re.findall('.?[動][作].?[\n]?[\n]?[\n]?.+[\n]?[\n]?[\n]?.+[\n]?[\n]?[\n]?' ,explain)
            explain4 = re.findall('[焦][点][距][離][\n]?[\n]?[\n]?.*' ,explain)
            explain5 = re.findall('[開][放][F][値][\n]?[\n]?[\n]?.*' ,explain)
            explain1 = explain2 + explain3 + explain4 + explain5 
        
        explain1 = ', '.join(explain1)

        #print(explain1)
        soup4 = soup.find_all(class_ = 'body__32cba457')#商品説明
        #print(soup4)

        list_condition = []

        for i in soup4:
            #print(i)
            i = i.getText()
            list_condition.append(i)

            list_condition.append(i)
            #print(list_condition)


        if '新品、未使用'in list_condition:
            i = '新品、未使用:購入してからあまり時間が経っておらず、一度も使用していない'

        elif '未使用に近い'in list_condition:
            i = '未使用に近い:数回しか使用しておらず、傷や汚れがない'

        elif '目立った傷や汚れなし' in list_condition:
            i = '目立った傷や汚れなし:よく見ないとわからない程度の傷や汚れがある'

        elif 'やや傷や汚れあり' in list_condition:
            i = 'やや傷や汚れあり:中古品とわかる程度の傷や汚れがある'

        elif '傷や汚れあり' in list_condition:
            i = '傷や汚れあり:誰がみてもわかるような大きな傷や汚れがある'

        elif '全体的に状態が悪い' in list_condition:
            i = '全体的に状態が悪い:商品の全体に目立つ傷や汚れ、ダメージがある'
        condition = set(list_condition)
        #condition1 = str(condition1)
        condition1 = i
        #print(condition)

        explain1 = explain1 + '/n' + condition1

        prod = re.findall('.+.?[商][品][名][\n]?[\n]?[\n]?.+[\n][\n]?[\n]?.+[\n]' ,explain)
        if len(prod) == 0:
            #print('ひっかかり')
            prod = re.findall('.?[商][品][名][\n]?[\n]?[\n]?.+[\n][\n]?[\n]?.+[\n]',explain)

        elif len(prod) == 0:
            #print('ひっかかり')
            prod = re.findall('.?[製][品][名][\n]?[\n]?[\n]?.+[\n][\n]?[\n]?.+[\n]',explain)

        elif len(prod) == 0:
            #print('ひっかかり')
            prod = re.findall('.+.?[製][品][名][\n]?[\n]?[\n]?.+[\n][\n]?[\n]?.+[\n]',explain)
        #print(prod)

        prod = ', '.join(prod)

        product = ''

        spec = re.findall('.+[:]?[0-9][0-9]?[0-9]?[\n]?',explain)
        spec = ', '.join(spec)
        spec = spec.replace(',','\n')
        condit = re.findall('.+.?[コ][ン][デ][ィ][シ][ョ][ン][\n]?[\n]?[\n]?.+[\n][\n]?[\n]?.+[\n].?[\n]?[\n]?.+[\n].?[\n]?[\n]?.+[\n].?[\n]?[\n]?.+[\n].?[\n]?[\n]?.+[\n].?[\n]?[\n]?.+[\n].?[\n]?[\n]?.+[\n].?[\n]?[\n]?.+[\n].?[\n]?[\n]?.+[\n].?[\n]?[\n]?.+[\n].?[\n]?[\n]?.+[\n].?[\n]?[\n]?.+[\n].?[\n]?[\n]?.+[\n].?[\n]?[\n]?.+[\n].?[\n]?[\n]?.+[\n].?[\n]?[\n]?.+[\n].?[\n]?[\n]?.{1,4}.?[\n]?' ,explain)
        #print(condit)

        if len(condit) == 0:
            #print('ひっかかり')
            condit = re.findall('.+.?[商][品][状][態][\n]?[\n]?[\n]?.+[\n][\n]?[\n]?.+[\n][\n]?[\n]?.+[\n]' ,explain)
            #print(condit)

        if len(condit) == 0:
            #print('ひっかかり')
            condit = re.findall('.?[商][品][状][態][\n]?[\n]?[\n]?.+[\n][\n]?[\n]?.+[\n][\n]?[\n]?.+[\n]' ,explain)
            #print(condit)
        
        if len(condit) == 0:
            #print('ひっかかり')
            condit1 = re.findall('.?[光][学].?[\n]?[\n]?[\n]?.+[\n]?[\n]?[\n]?.+[\n]?[\n]?[\n]?' ,explain)
            condit2 = re.findall('.?[動][作].?[\n]?[\n]?[\n]?.+[\n]?[\n]?[\n]?.+[\n]?[\n]?[\n]?' ,explain)
            condit3 = re.findall('[焦][点][距][離][\n]?[\n]?[\n]?.*' ,explain)
            condit4 = re.findall('[開][放][F][値][\n]?[\n]?[\n]?.*' ,explain)
            condit = condit1 + condit2 + condit3 + condit4 
            #print(condit)
        #print(explain)
        condit = ', '.join(condit)

        soupimg =  soup.find(class_ ='slick-list').find_all('img')
        #print(soupimg)
        for i in soupimg:
            imagepr = i.get('src')
            #print(imagepr)
        
        path = r"C:\Users\Owner\Desktop\work_current\image"
        imagefolder = os.listdir(path)
        gralist = []
        for i in soupimg:
            imagepr = i.get('src')
            gralist.append(imagepr)
        
        imagepr = gralist[0]
        #写真一個代表選出
        #print(imagepr)
        target = '/photos/'
        idx = imagepr.find(target)  # 半角空白文字のインデックスを検索
        imagecom = imagepr[idx:].replace('/photos/','')
        #print(imagecom)
        target = '.'
        idx = imagecom.find(target)  # 半角空白文字のインデックスを検索
        target = '_'
        idx = imagecom.find(target)  # 半角空白文字のインデックスを検索
        imagecom = imagecom[:idx]
        #比較にデータ整形
        
        for j in imagefolder:
            
            if  imagecom == j:
                #print("合致")
                pathphoto = os.path.join(path, j)
                #print(pathphoto)
                #投稿用dir作成
                os.makedirs(pathphoto, exist_ok=True)
                shutil.rmtree(pathphoto)
                os.mkdir(pathphoto)
        
        for k in gralist:
            #print(k)
            target = '/photos/'
            idx = k.find(target)  # 半角空白文字のインデックスを検索
            l= k[idx:].replace('/photos/','')
            #print(l)
            target = '.jpg'
            idx = l.find(target)  # 半角空白文字のインデックスを検索
            l = l[:idx+4]
            #print(l)
            response = requests.get(k)
            time.sleep(1)
            image = response.content
            pathgra = os.path.join(pathphoto, l)
            with open(pathgra, "wb") as f:
                f.write(image)
               
        imagelist = os.listdir(pathphoto)
        #print(imagelist)
        #収集画像をjpeg変換(webpがあるとエクセルでエラーになるため)
        
        for pic in imagelist:
            pic = os.path.join(pathphoto, pic)
            jpg = Image.open(str(pic)).convert('RGB')
            jpg = jpg.resize((1600, 1600), Image.LANCZOS)
            jpg.save(str(pic), 'jpeg')      



        #colorandmaterial = color +'\n' + material
        #exp = exp.replace('\n\n','\n')      
        #print(exp)
        japan_list.append([title,explain1,spec,condition,condit])

    except AttributeError:
        #print('失敗')
        japan_list.append(['失敗','失敗','失敗','失敗','失敗'])
        print(url)
        path = r"C:\Users\Owner\Desktop\work_current\image"
        imagefolder = os.listdir(path)
        url = 'https://jp.mercari.com/item/m84395625276'
        failurl = url
        #print(imagepr)
        target = 'item'
        idx = failurl.find(target)  # 半角空白文字のインデックスを検索
        failurl = failurl[idx:].replace('item/','')
        #print(failurl)
        #比較にデータ整形
        for j in imagefolder:
            
            if  failurl == j:
                #print("合致")
                deleatepath = os.path.join(path, j)
                #print(deleatepath)
                #収集不可dir削除
                shutil.rmtree(deleatepath)
        
        #continue
    #sheet.column_dimensions['B'].width = 100  #ピクセルではない幅
    num += 1

print('end')
path =r"C:\Users\Owner\Desktop\work_current\sorce\mercarin.csv"
#df = pd.read_excel(path)#excel読み込み
df36 = pd.read_csv(path2, encoding='utf-8-sig')
df38 = pd.DataFrame(japan_list[1:],columns=japan_list[0])
df39 = pd.concat([df36, df38], axis=1)
df39.to_csv(path, encoding='utf-8-sig',index=False)
print('end')
print("写真投稿、必要情報収集済")

④ひたすら翻訳+送料+着払い+最新為替でドルに変換

import pandas as pd
import openpyxl
import time
from googletrans import Translator
import re
import math
import pandas_datareader.data as pdr
import datetime as dt
translator = Translator()
path = r"C:\Users\Owner\Desktop\work_current\sorce\mercarin.csv"
df = pd.read_csv(path)
#print(dateend)
dateend = dt.date.today() # 取得範囲のエンドは本日まで
datestart = dateend - dt.timedelta(days = 15)
tickerlist = ['DEXJPUS'] # 取得するtickerのlist

#print(tickerlist)
# DEXJPUS : JPY/USD
# 最終行のデータを取得
# つまり、最新に最も近い
FREDdf = pdr.DataReader(tickerlist,'fred',datestart,dateend) 
#print(FREDdf)

JPYUSD = FREDdf.iloc[-1]['DEXJPUS'] # JPYUSDの最終行の値
#print(JPYUSD)
print('本日 {}'.format(dateend))
print('本日の為替は {} 円/米ドル'.format(JPYUSD))
print('タイトル翻訳開始')
num = 2
num1 = 1
df40 = df['titleD']
transtitle = [["titleDtrans"]]

print('スタート'+str(len(df40) ))
for i in df40:
    trans_en = translator.translate(i)
    time.sleep(2)

    try:
        transtitle.append(trans_en.text)
        #print(trans_en.text)
        if str(len(df40) - num1) == '75':
            print('残り75')
        if str(len(df40) - num1) == '50':
            print('残り50')
        if str(len(df40) - num1) == '25':
            print('残り25')
        if str(len(df40) - num1) == '5':
            print('残り5')
        if str(len(df40) - num1) == '0':
            print('完了')
        

    except AttributeError :
        print('失敗')
        transtitle.append(trans_en.text)
        #print(trans_en.text)
        #continue
    #sheet.column_dimensions['B'].width = 100  #ピクセルではない幅
    num += 1
    num1 += 1 
#df41 = pd.DataFrame(transtitle[1:],columns=transtitle[0])

print('説明分翻訳開始')
num = 2
num1 = 1
transexplain = [["explainFtrans"]]
df42 = df['explainF']
print('スタート'+str(len(df40) ))
for i in df42:
    #print(i)
    trans_en = translator.translate(i)
    time.sleep(1)

    try:
        trans = trans_en.text
        #print(trans)
        transw = trans.replace('\n\n\n\n\n\n','\n').replace('\n\n\n\n\n','\n').replace('\n\n\n\n','\n').replace('\n\n\n','\n').replace('\n\n','\n').replace('I will refuse to arrive.','').replace('court.','coat')
        transw = transw
        transw = transw +"\n*For returns due to buyer circumstances such as the size not fitting, the return shipping fee will be borne by the buyer.\nPlease be sure to refer to the actual size for size.\n\ndelivery\nDHL, FedEx, Japan Post.\n\nInternational buyers - please note:\nImport duties, taxes, and charges are not included in the item price or shipping charges. These charges are the responsibility of the purchaser. Please check with your country's customs office to determine what these additional costs will be prior to bidding or buying."
        transexplain.append(transw)
        if str(len(df42) - num1) == '75':
            print('残り75')
        if str(len(df42) - num1) == '50':
            print('残り50')
        if str(len(df42) - num1) == '25':
            print('残り25')
        if str(len(df42) - num1) == '5':
            print('残り5')
        if str(len(df42) - num1) == '0':
            print('完了')                  

    except AttributeError :
        transexplain.append(trans_en.text)
        print('失敗')
        #continue
    #sheet.column_dimensions['B'].width = 100  #ピクセルではない幅
    num += 1
    num1 += 1 
#df43 = pd.DataFrame(transexplain[1:],columns=transexplain[0])    

print('状態翻訳開始+種類情報収集開始')
num = 2
num1 = 1
transspec = [["spectrans"]]
df44 = df['spec']
print('スタート'+str(len(df44) ))


for i in df44:
    #print(i)

    trans_en = translator.translate(i)
    time.sleep(1)

    try:
        transspec.append(trans_en.text)

        #print(trans_en.text) 
        if str(len(df44) - num1) == '75':
            print('残り75')
        if str(len(df44) - num1) == '50':
            print('残り50')
        if str(len(df44) - num1) == '25':
            print('残り25')
        if str(len(df44) - num1) == '5':
            print('残り5')
        if str(len(df44) - num1) == '0':
            print('完了')    

        
    except AttributeError :
        transspec.append(trans_en.text)
        print('失敗')
        #continue
    #sheet.column_dimensions['B'].width = 100  #ピクセルではない幅
    num += 1
    num1 += 1 
#print(transtype)
#print(styletype)
#df45 = pd.DataFrame(transcondition[1:],columns=transcondition[0]) 
print('サイズ翻訳開始')
num = 2
num1 = 1

print('着払い確認費用計算開始')
num = 0

df48 = df['priceA']
df49 = df['condition']
sending_cost = [['send_cost']]
mpriz = [['priz']]
for i in range(len(df48)):
    #print(type(df49[i]))
    if '着払い(購入者負担)' in df49[i] or '着払い' in df49[i]:
        #print('ひっかかった!')
        try:
            send_cost = 4000
            fedex_cost = 4000
            cost = send_cost + fedex_cost
            if 30000 >= df48[i] :
                benefit = 6500
            elif 30000 < df48[i] :
                benefit = 7800
            
            priz = df48[i] + send_cost + benefit
            priz = priz * 1.21
            priz = priz / JPYUSD
            priz = priz + 20
            priz = math.ceil(priz)
            sending_cost.append(cost)
            mpriz.append(priz)
            

        except AttributeError :
            print('失敗')
    else:
        send_cost = 0
        fedex_cost = 4000
        cost = send_cost + fedex_cost
        #print(cost)
        sending_cost.append(cost)
        if 30000 >= df48[i] :
            benefit = 6500
        elif 30000 < df48[i] :
            benefit = 7800

        priz = df48[i] + cost + benefit
        priz = priz * 1.21
        priz = priz / JPYUSD
        priz = priz + 20
        priz = math.ceil(priz)
        mpriz.append(priz)


print('ebay用タイトル作成')
num = 2
transebaytitle = [["ebaytitle"]]
df41 = pd.DataFrame(transtitle[1:],columns=transtitle[0])
df52 = df41['titleDtrans']
df58 = df['linkB']

for k in range(len(df52)):
    i = df52[k].upper()#大文字に変換
        
    transebaytitle.append(i)
    num += 1
    

print('必要情報翻訳完了')  
df41 = pd.DataFrame(transtitle[1:],columns=transtitle[0])
df43 = pd.DataFrame(transexplain[1:],columns=transexplain[0])
df45 = pd.DataFrame(transspec[1:],columns=transspec[0])  
#df47 = pd.DataFrame(transsize[1:],columns=transsize[0]) 
df50 = pd.DataFrame(sending_cost[1:],columns=sending_cost[0])   
df53 = pd.DataFrame(mpriz[1:],columns=mpriz[0])
df54 = pd.DataFrame(transebaytitle[1:],columns=transebaytitle[0]) 
#df59 = pd.DataFrame(shopper[1:],columns=shopper[0]) 
#df64 = pd.DataFrame(transcolor[1:],columns=transcolor[0])
#df66 = pd.DataFrame(transmaterial[1:],columns=transmaterial[0])
#df67 = pd.DataFrame(transgender[1:],columns=transgender[0])
#df68 = pd.DataFrame(transtype[1:],columns=transtype[0])
#df69 = pd.DataFrame(styletype[1:],columns=styletype[0])

df62 = df54["ebaytitle"]
df61 = df43["explainFtrans"]

sub_situation_list = [['explainFtrans']] 

for s in range(len(df62)):
    #print(s)
    e_title = df62[s]  
    e_situation = df61[s]
    sub_situation = 'Thank you for visiting our shop\n\nPlease check the actual size to avoid returns due to size differences.\n\n【Product name】' + e_title + '\n'+'\n'+ e_situation
    sub_situation_list.append(sub_situation)

df60 = pd.DataFrame(sub_situation_list[1:],columns=sub_situation_list[0])
df55 = pd.concat([df41,df60,df45,df50,df53,df54], axis=1)
df56 = pd.concat([df,df55], axis=1)
df57 = df56.reindex(columns=['image','ebaytitle',"spectrans","Condition",'explainFtrans','priz','ebay_address','ebay_id','ebay_inbentry','shopname','linkB','status','confirmation','on/off','priceA','japantax','sendingmethod','mass','volume','x','y','z','maxmass','send_cost'])
df57.to_csv(path, encoding='utf-8',index=False)
print('情報をCSVへ展開済み')

上記情報からのCSVへの展開結果。明日は、GASで、これらの情報をスプレッドシートに貼ってしまいましょう。(もちろん写真付き)


ここまで見てくれてありがとう。

よかったらこっちも見てってくださいね


この記事が気に入ったらサポートをしてみませんか?