{Python} ブランド古着転売勢に捧げるガチ勢のためのオンラインストア スクレイピング


毎日4店舗以上のブランド古着オンラインサイトでポチポチして
お目当のブランドの新着商品を調べているブランド古着転売ガチ勢A君。

A君「おりゃーー、トレファク、カインド、セカンドストリート、ラグタグ　ぽちぽちぽちぽち」

INBED君「ね！A君、毎日4店舗以上も検索しにいくの疲れない? A君しかも調べてるブランド1つとかじゃないでしょ?各ウェブサイトで5個も6個も調べてると日が暮れるんじゃない?」

A君「これが僕の生きる道です。おりゃーー　ポチポチポチ」

INBED君 「A君さ、スクレイピングって知ってる?」

A君 「は？？ いいえ、そんなブランドは知りませんね。僕はハイブランド狙いなんで！！　ドメスティックブランドですか? ケッ！」

INBED君 「違うよ。スクレイピングとはね、ウェブサイトから特定の情報を抽出するこのできるコンピューターソフトウェア技術のことだよ。」

A君「なんですかそれは。。　それで一体何ができるんですか?」

INBED君　「今、A君がやってる作業を数分以内に終わらすことができるよ。」

A君 「教えてください。（素直）」

###読者対象:
スクレイピングをやってみたい方
A君のような転売屋の方


##<b>ブランド古着オンラインストア　スクレイピング</b>

本記事ではBeautifulSoupを使ってオンラインストアから特定ブランドの新着をスクレイピング
する方法を書いてみました。
* cvcへの保存、特定のwebsiteを作成して閲覧等は割愛させて頂きました。

<b>環境：
Mac OS High Sierra ver 10.13.6
Python 3.6.5 (anaconda)<b>

<b>環境構築 :
Terminalで

```
pip install beautifulsoup4
pip list
```
beautifulsoup4 がlistに表示されていればOK。


##コード
以下、
[セカンドストリートオンラインストア](https://www.2ndstreet.jp/store)
&
[カインドオルオンラインストア]
(https://shop.kind.co.jp)
をスクレイピングする完成コードを記載。


<b>セカンドストリートオンラインストア<b>

```
import requests
from bs4 import BeautifulSoup

base_url = "https://www.2ndstreet.jp"
brands = [
    "vainl archive",   #←好きなブランド名に変更可能  
    "好きなブランド"
]

for brand in brands:
    url = f"{base_url}/search?keyword={brand}&sortBy=arrival"
    resp = requests.get(url)

    soup = BeautifulSoup(resp.text, 'html.parser')
    lis = soup.find_all("li", {"class": "new"})

    for li in lis:
        link = base_url + li.find("a").attrs["href"]
        price = li.find("p", {"class": "price"}).contents[0]
        img = base_url + li.find("img").attrs["src"]
        print(f"{link} \n   Image: {img} \n   Price: {price}\n")

```


<b>コード カインドオルオンラインストア<b>

```
import requests
from bs4 import BeautifulSoup

base_url = "https://shop.kind.co.jp"
brands = [
    "vainl archive"
]

for brand in brands:
    print(brand + "\n")
    url = f"{base_url}/item_list/?kw={brand}"
    resp = requests.get(url)

    soup = BeautifulSoup(resp.text, 'html.parser')
    divs = soup.find_all("div", {"class": "item"})

    for div in divs:
        if div.find("p", {"class": "icn"}).find("img"):
            link = base_url + div.find("p", {"class": "pn"}).find("a").attrs["href"]
            price = div.find("p", {"class": "sp"}).contents[0].strip()[:-10] + "円"
            img = "https:" + div.find('p', {"class": "img"}).find('img').attrs["src"]
            print(f"{link} \n   Image: {img} \n   Price: {price}\n")

```

##解説  (セカンドストリートオンラインストア)
今回は、セカンドストリートオンラインさんを例に使用して解説します。
目標は、購入先のリンク、画像のURL、プライスを出力することです。
では、やってみましょう!

<b>新着商品をスクレイピングするため、NEW(新着タグ）ありとなしのコードにどのような差があるのかを確認するのが第一段階です。<b>

下記の画像の青くなっている部分のコードを確認してみます。
こちらの黒のベストには黄色のNEW(新着のタグ)が付いていることがわかります。

![スクリーンショット 2019-05-23 12.19.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378998/06a3f13a-a9e9-4821-6386-05e5737c3c70.png)


<b>黒ベスト with 新着タグ<b>

```
<li class="new"> # with tag
   <a href="/goods/detail/goodsId/2333320329116/shopsId/30993" class="listLink">
   </a>
   <div class="imgBlock js-favorite" goodsid="2333320329116" favorite="0">
      <img src="/img/pc/goods/233332/03/29116/1_tn.jpg" style="width: 100%">
      <a href="/user/login" class="favorite"></a>
   </div>
   <p class="brand">VAINL ARCHIVE</p>
   <h2 class="name">×DICKIES/C-VEST/ベスト/M/ポリエステル/GRY/182M10VA01/バイナルアーカイブ
   </h2>
   <p class="price">¥11,772</p>
</li>
```

<b>NEW タグが付いていないPorter とVAINLのコラボのベストも確認してみます。<b>
![スクリーンショット 2019-05-23 12.30.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378998/69f3da7b-7e5f-3ece-6e9d-027523db3597.png)

```

<li class=""> # without tag
   <a href="/goods/detail/goodsId/2327841238910/shopsId/30887" class="listLink>
   </a>
   <div class="imgBlock js-favorite" goodsid="2327841238910" favorite="0">
       <img src="/img/pc/goods/232784/12/38910/1_tn.jpg" style="width: 100%">
       <a href="/user/login" class="favorite"></a>
   </div>
   <p class="brand">VAINL ARCHIVE</p>
   <h2 class="name">ポーター/CHEST BAG/ONE SIZE/2218084/ベスト/--/--/BLK</h2>
   <p class="price">¥43,092</p>
</li>

```

この二つを見比べるとli classに"new"があるか空白かの違いが読み取れます。
この場合、"new"をclassに持つ全てのli タグをsoup.find_allで見つけ出します。
そうすれば、NEW タグのついているものだけを取り出すことが可能です。

```
lis = soup.find_all("li", {"class": "new"})
```

次に for文を用い、link, price, imgの変数にli要素を一つずつ代入し、出力します。

```
for li in lis:
        link = base_url + li.find("a").attrs["href"]
        price = li.find("p", {"class": "price"}).contents[0]
        img = base_url + li.find("img").attrs["src"]
        print(f"{link} \n   Image: {img} \n   Price: {price}\n")
```

RUNすれば、画像のURL、商品URL、プライスが返ってきます。

```
Running] python -u "/Desktop/scraping/2ndstreet.py"
https://www.2ndstreet.jp/goods/detail/goodsId/2333320329116/shopsId/30993 
   Image: https://www.2ndstreet.jp/img/pc/goods/233332/03/29116/1_tn.jpg 
   Price: ¥11,772

https://www.2ndstreet.jp/goods/detail/goodsId/2332840352406/shopsId/30972 
   Image: https://www.2ndstreet.jp/img/pc/goods/233284/03/52406/1_tn.jpg 
   Price: ¥18,252

```

以上です。

* cvcへの保存、特定のwebsiteを作成して閲覧等は今度やります。