Pythonにてブランドサイトから、商品情報を抽出し保存するコードを書きました。
プログラミング初心者ながら、やっと完成したのですが
最後のエクセルへの書き込みと画像の保存の処理を行う度にループする速度が遅くなってしまいます。
原因と解決方法がありましたら、教えていただきたいです。
Python
1import requests 2from bs4 import BeautifulSoup 3import pprint 4import os 5from urllib.parse import urljoin 6import itertools 7import re 8import time 9import xlsxwriter 10 11from selenium import webdriver 12driver= webdriver.Chrome("/Users/AA/Downloads/chromedriver") 13 14sex_URL = "https://www.gucci.com/jp/ja/ca/men-c-men" 15soup = BeautifulSoup(requests.get(sex_URL).content,'lxml') 16 17#カテゴリ毎のURLを取得し、相対パスを絶対パスに変換 18#category_listにURLを格納 19base = "https://www.gucci.com/jp/ja/" 20category_link = soup.find_all("a",class_="category-product") 21category_list = [] 22for category_link in category_link: 23 category_list.append(urljoin(base,category_link.get("href"))) 24print(category_list) 25 26#商品カテゴリ名を取得し、category_name_listに格納 27category_name = soup.select("header > h2") 28category_name_list = [] 29for category_name in category_name: 30 category_name_list.append((category_name).getText()) 31print(category_name_list) 32 33#category_listとcategory_name_listの2つのリストを1つのディクショナリに変換 34keys = category_name_list 35values = category_list 36dic = dict(zip(keys,values)) 37print(dic) 38 39for category in dic: 40 #カテゴリURL毎に分割されている全てのURLを取得する 41 url = dic[category] 42 url_list = [url] 43 driver.implicitly_wait(10) 44 driver.get(url) 45 cur_url= driver.current_url 46 n = 1 47 while url == cur_url: 48 url = dic[category] 49 url = url + "/" + str(n) 50 driver.get(url) 51 cur_url= driver.current_url 52 url_list.append(url) 53 n += 1 54 url_list.pop() 55 #ここまで 56 for p in url_list: 57 soup_1 = BeautifulSoup(requests.get(p).content,'lxml') 58 item_list=[] 59 item_link = soup_1.find_all("a",class_="product-tiles-grid-item-link") 60 for item_link in item_link: 61 #商品URLの相対パスを絶対パスに変換し、item_listに格納 62 item_list.append(urljoin(base,item_link.get("href"))) 63 #商品毎の名前、金額、商品説明を取得 64 for i in item_list: 65 soup_2 = BeautifulSoup(requests.get(i).content,'lxml') 66 #商品名 67 item_title = soup_2.select_one("section > h1").text 68 #商品金額(日本円) 69 item_price = soup_2.select_one("#markedDown_full_Price").text 70 #商品金額(フランス) 71 fr_url = i.replace("jp/ja", 'fr/fr') 72 soup_3 = BeautifulSoup(requests.get(fr_url).content,'lxml') 73 try: 74 item_price_fr= soup_3.select_one("#markedDown_full_Price").text 75 except AttributeError: 76 item_price_fr = "フランスのサイトが存在しませんでした" 77 #商品詳細 78 item_detail = soup_2.find(class_="product-detail").text 79 #フォルダを作成 80 os.makedirs("/Users/RP/Desktop/GUCCI/メンズ/" + category +"/"+ item_title ,exist_ok=True) 81 82 #エクセルファイルを作成 83 workbook = xlsxwriter.Workbook("/Users/RP/Desktop/GUCCI/メンズ/" + category +"/"+ item_title + "/" + "detail.xlsx") 84 worksheet = workbook.add_worksheet("Sheet1") 85 worksheet.set_column('B:B', 90) 86 worksheet.write('A1', '商品URL') 87 worksheet.write('A2', 'カテゴリー名') 88 worksheet.write('A3', '商品名') 89 worksheet.write('A4', '商品金額(円)') 90 worksheet.write('A5', '商品金額(€)') 91 worksheet.write('A6', '商品詳細') 92 93 worksheet.write('B1', i) 94 worksheet.write('B2', category) 95 worksheet.write('B3', item_title) 96 worksheet.write('B4', item_price) 97 worksheet.write('B5', item_price_fr) 98 worksheet.write('B6', item_detail) 99 workbook.close() 100 101 #画像取得 102 img = [] 103 img_url = soup_2.select("#carousel-vertical > div.product-detail-carouse-vertical-inner.carousel-vertical-inner.carousel-inner picture > source") 104 for url in img_url: 105 img_url = urljoin(base,url.get("srcset")) 106 img.append(img_url) 107 for target in img: # imgからtargetに入れる 108 re = requests.get(target) 109 with open("/Users/RP/Desktop/GUCCI/メンズ/" + category +"/"+ item_title + "/" +target.split('/')[-1], 'wb') as f: # imgフォルダに格納 110 f.write(re.content) # .contentにて画像データとして書き込む 111 time.sleep(1)

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/19 09:47