カテゴリー
D-Studio プログラム

ヤフオク特定ページのスクレイピング

Yahoo!オークションの特定の商品の監視を行いたい時に使えるのがこれ。まぁ普通に通知機能とかついてるから使い道はあるのかどうかわかりませんが。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 指定のURLをブラウザで開く
# YahooAuctionのサイト監視で情報取得できるのか?

import csv
import requests
from bs4 import BeautifulSoup

#-------------------------------------------------
## main ###
#-------------------------------------------------
if __name__=='__main__':

    # 監視したいオークションサイト
    load_url = "https://page.auctions.yahoo.co.jp/jp/auction/v**********"

    load_url = load_url
    web_data = None

    try:
        # HTML取得
        html = requests.get(load_url)
        web_data = BeautifulSoup(html.content, "html.parser")
        #print(web_data)
    except:
        print("[ERROR] Check input URL.")
        exit()

    item_list = []
    setlist = []
    ave_value = 0

    title = web_data.find_all(class_="ProductTitle__text")
    if len(title) == 0:
        print("[ERROR] Check input URL.")
        exit()

    print(title[0].text)

    now_value = ""
    sokketsu = ""

    for i in web_data.find_all(class_="Price__borderBox"):
        kakaku = i.find(class_="Price__title")
        if kakaku.text.replace(" ","") == "現在価格":
            now_value = i.find(class_="Price__value").text.replace(" ","").replace("\n","")
        elif kakaku.text.replace(" ","") == "即決価格":
            sokketsu = i.find(class_="Price__value").text.replace(" ","").replace("\n","")

    print("現在価格:",now_value, "即決価格:", sokketsu)


    cnt = 0
    for i in web_data.find_all(class_="ProductDetail__item"):
        print(i.text.replace("\n",""))

即決価格と現在価格の部分が少しややこしいですが、別の部分にあるのでこんな取り方になってます。

最高入札者情報はログインしないと見れないらしいです。

変化あればログに保存してそれをグラフで表示したり出来ると面白そうですね〜

  • 開発紹介

    ソフトウェア開発でお手伝いさせていただいた案件が論文に! http://www.spring8.or.jp/j…

  • スキャンプログラム

    今回研究施設向けのスキャンプログラムの作成を行いました。 こちら新しい技術の導入があり、その技術利用しながら作…

  • note

    note始めました!D-Studioにアップしていきます! まずはLabVIEW×Pythonという超ニッチな…

カテゴリー
D-Studio プログラム

ヤフオクのスクレイピング

Pythonは便利ですな!

Yahoo!オークションのスクレイピング。検索結果のタイトルと価格情報を表示。50件表示のみですが。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 指定のURLをブラウザで開く
# YahooAuctionの買い物一覧は取得できるのか?

import csv
import requests
from bs4 import BeautifulSoup

#-------------------------------------------------
## main ###
#-------------------------------------------------
if __name__=='__main__':

    load_url = "https://auctions.yahoo.co.jp/search/search?p="
    item = "タフト 6BA-LA900S"

    load_url = load_url + item

    # HTML取得
    html = requests.get(load_url)
    web_data = BeautifulSoup(html.content, "html.parser")
    #print(web_data)

    item_list = []
    setlist = []
    ave_value = 0

    cnt = 0
    for i in web_data.find_all(class_="Product"):
        label = i.find(class_="Product__title")
        value = i.find(class_="Product__price")
        #print(i)
        setlist = []
        setlist.append(str(cnt))
        setlist.append(str(label.text))
        setlist.append(str(value.text))

        print(str(cnt) + ":" + str(label.text) + str(value.text))
        item_list.append(setlist)
        cnt = cnt + 1

ヤフオクに関しては結構検索したら色々出てくると思います。

今回はYahoo!ショッピングと同じ様なやり方です。

こちらでは詳しくやってます!

ヤフオクのスクレイピング

,
  • 開発紹介

    ソフトウェア開発でお手伝いさせていただいた案件が論文に! http://www.spring8.or.jp/j…

  • スキャンプログラム

    今回研究施設向けのスキャンプログラムの作成を行いました。 こちら新しい技術の導入があり、その技術利用しながら作…

  • note

    note始めました!D-Studioにアップしていきます! まずはLabVIEW×Pythonという超ニッチな…

カテゴリー
D-Studio プログラム

Yahooショッピングスクレイピング

Yahooショッピングのスクレイピングをやってました!1ページ目30件のみしか取れませんが、結構ちゃんと内容取れますね!Class名は調べないといけませんが。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 指定のURLをブラウザで開く
# YahooShoppingの買い物一覧は取得できるのか?

import csv
import requests
from bs4 import BeautifulSoup

#-------------------------------------------------
## main ###
#-------------------------------------------------
if __name__=='__main__':

    # 30件取得
    # 並び替えはX=9(評価順)
    load_url = "https://shopping.yahoo.co.jp/"
    search_op = "search?first=1&ss_first=1&ts=1636337247&mcr=8e2a556b12cfc76cfbdc9b34f3a2d87f&sretry=0&X=9&area=28&astk=&aq=&oq=&p="
    item = "本革 長財布"

    load_url = load_url + search_op + item

    # HTML取得
    html = requests.get(load_url)
    web_data = BeautifulSoup(html.content, "html.parser")
    #print(web_data)

    item_list = []
    setlist = []
    ave_value = 0

    cnt = 0
    for i in web_data.find_all(class_="LoopList__item"):
        label = i.find(class_="_2EW-04-9Eayr")
        value = i.find(class_="_3-CgJZLU91dR")
        setlist = []
        setlist.append(str(cnt))
        setlist.append(str(label.text))
        setlist.append(str(value.text))

        print(str(cnt) + ":" + str(label.text) + "  ■価格 ¥" + str(value.text))
        ave_value = ave_value + int(value.text.replace(",", ""))
        item_list.append(setlist)
        cnt = cnt + 1

    ave = ave_value/(cnt+1)
    print("平均価格:" + str(ave))

    # 文字コードをShift_JISに指定
    with open("item_list.csv", "w", encoding="Shift_jis") as f:
        # writerオブジェクトの作成 改行記号で行を区切る
        writer = csv.writer(f, lineterminator="\n")
        # csvファイルに書き込み
        writer.writerows(item_list)



検索文字に対して30件のタイトルと価格が一覧でCSVに吐き出されます。

for文内の[class=]部分を変えることで様々な情報が取得できます。

calssの内容などは「print(web_data)」で出した結果を解析する必要ありです。

参考サイト:https://yonesuke0716.hatenablog.com/entry/2020/02/11/173408

  • 開発紹介

    ソフトウェア開発でお手伝いさせていただいた案件が論文に! http://www.spring8.or.jp/j…


  • スキャンプログラム

    今回研究施設向けのスキャンプログラムの作成を行いました。 こちら新しい技術の導入があり、その技術利用しながら作…


  • TIFヘッダ編集

    久しぶりの投稿はPythonプログラム! D-Studioでは現在Pythonをメインに仕事してます! 研究施…


  • 最近のお仕事

    WEBシステム開発サポート(大手企業向け) ロゴデザイン(結婚相談所) HP更新・作成(企業子会社・研究チーム…


  • 仕事紹介

    今進行中のお仕事紹介! パルスモーターでステージを動かしながら、荷重値を取得することを制御するプログラム開発中…


  • ヤフオク特定ページのスクレイピング

    Yahoo!オークションの特定の商品の監視を行いたい時に使えるのがこれ。まぁ普通に通知機能とかついてるから使い…


カテゴリー
プログラム

メルカリのスクレイピング

Pythonでメルカリの検索結果をスクレイピングしてみました。

コードはこちらのページを参照してます。

その他Googleで色々参照しながら作成しております。

準備

①seleniumのインストール (BeautifulSoupだけでは無理)

②ChromeDriverのDLと、コードと同階層への設置

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 指定のURLをブラウザで開く
# メルカリの検索一覧は取得できるのか?
# seleniumのインストールとchromedriverのdlで対応

from bs4 import BeautifulSoup
from selenium import webdriver
import time
import os
from selenium.webdriver.chrome.options import Options

#-------------------------------------------------
## main ###
#-------------------------------------------------
if __name__=='__main__':

    BASE_URL = 'https://www.mercari.com'
    next_page_num = 2

    # 100ランク取得
    load_url = "https://www.mercari.com/jp/search/?keyword="
    item = "ルースイソンブラ"

    load_url = load_url + item

    result_array = [['item_name','item_price','url']]

    while True:
      try:
        # Chrome設定
        options = Options()
        options.add_argument('--headless')

        # 対象URLにリクエスト
        driver = webdriver.Chrome("./chromedriver", options=options)
        driver.get(load_url)
        time.sleep(5)

        # 文字コードをUTF-8に変換し、html取得
        html = driver.page_source.encode('utf-8')
        soup = BeautifulSoup(html, "html.parser")

        # tagとclassを指定して要素を取り出す
        item_name = soup.find('div', class_='items-box-content clearfix').find_all('h3', class_='items-box-name font-2')
        item_price = soup.find('div', class_='items-box-content clearfix').find_all('div',class_='items-box-price font-5')
        item_url = soup.find('div', class_='items-box-content clearfix').find_all('a')

        pager = soup.find('ul', class_='pager').find_all('a')

        item_num = len(item_name)

        for i in range(0, item_num):
            result_array.append([item_name[i].text,
                                 int(item_price[i].text.replace('¥', '').replace(',', '')),
                                 BASE_URL + item_url[i].get('href')])

       #結果表示
        print(result_array)


        for x in pager:
            if x.text == str(next_page_num):
                next_url = BASE_URL + x.get('href')

        if next_url == '':
            break

        next_page_num += 1
        load_url = next_url
        next_url = ''

        print('nextpagenum:' + str(next_page_num))

        # デバッグなので1ページ目のみで抜ける。
        if next_page_num == 3:
            break


      except Exception as e:
        message = "[例外発生]" + os.path.basename(__file__) + "\n" + "type:{0}".format(type(e)) + "\n" + "args:{0}".format(
                e.args)
        print(message)

      finally:
        # 起動したChromeを閉じる
        driver.close()
        driver.quit()

一応取れました。絞り込みすれば価格調査とかで使えそうです。

定期チェックで最安値更新したらメール送るとかもできそうですね!

カテゴリー
プログラム

PythonでYouTube

PythonでYoutubeの検索結果データを取得する。

今回はYoutube APIを利用。

Google Cloud PlatformのライブラリからYouTube Data API v3を有効にしてIDを取得する必要あり

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 指定のURLをブラウザで開く
# YouTubeの解析 API利用

from googleapiclient.discovery import build
from googleapiclient.errors import HttpError



#-------------------------------------------------
## main ###
#-------------------------------------------------
if __name__=='__main__':

    # API情報
    DEVELOPER_KEY = '取得したYouTubeDataAPIのID'
    YOUTUBE_API_SERVICE_NAME = 'youtube'
    YOUTUBE_API_VERSION = 'v3'

    youtube = build(
        YOUTUBE_API_SERVICE_NAME,
        YOUTUBE_API_VERSION,
        developerKey=DEVELOPER_KEY
    )

    search_response = youtube.search().list(
        q='ドリブル',
        part='id,snippet',
        maxResults=50,
    ).execute()

    #print(search_response['items'])

    print('------------------------------------------------------------')
    for vdata in search_response['items']:
        #videoIDが無い場合は飛ばす
        try:
            videoid = vdata['id']['videoId']
            print('動画タイトル', vdata['snippet']['title'])
            print('投稿者名:', vdata['snippet']['channelTitle'])
            print('Channel ID:', vdata['snippet']['channelId'])
            print('URL:https://www.youtube.com/watch?v='+videoid)
            print('------------------------------------------------------------')
        except:
            print("")


実行結果

------------------------------------------------------------
動画タイトル 【完全保存版】2020年のドリブル・テクニック111ワザを全てお見せします!〜しょうちゃん編〜
投稿者名: REGATEドリブル塾
Channel ID: UC4Nrt3aTTnjVAW_ein2nTQQ
URL:https://www.youtube.com/watch?v=6UftkurRtEA
------------------------------------------------------------
動画タイトル 【超絶過ぎる…】サッカーベストドリブルテクニック集!2020/2021 #2
投稿者名: FM247 HD2
Channel ID: UCpgMYaiGuoCsowql_f9WDPw
URL:https://www.youtube.com/watch?v=WW6jFV-LK-Q
------------------------------------------------------------

動画タイトル 超絶ドリブル そこ抜く! えげつないファンタジスタ達のプレー集!► 2020  HD 1080p
投稿者名: FM247 HD2
Channel ID: UCpgMYaiGuoCsowql_f9WDPw
URL:https://www.youtube.com/watch?v=xn3PLOP_f_c
------------------------------------------------------------
動画タイトル ロナウジーニョが本気でドリブルするとこうなる
投稿者名: FM247 HD2
Channel ID: UCpgMYaiGuoCsowql_f9WDPw
URL:https://www.youtube.com/watch?v=jgH6HH45VT4
------------------------------------------------------------
以下50件分表示

カテゴリー
D-Studio プログラム

楽天市場のスクレイピング

Pythonを利用して、楽天市場の検索結果を抜き出してみる。主要情報は何とか取れる模様。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 指定のURLをブラウザで開く
# 楽天市場の買い物一覧は取得できるのか?

import re
import time
import webbrowser as wb
import requests
from bs4 import BeautifulSoup

#-------------------------------------------------
## main ###
#-------------------------------------------------
if __name__=='__main__':

    # 100ランク取得
    load_url = "https://search.rakuten.co.jp/search/mall/"
    item = "DELL ノートPC"

    load_url = load_url + item

    # HTML取得
    html = requests.get(load_url)
    web_data = BeautifulSoup(html.text, "html.parser")
    #print(web_data)

    items = web_data.select(".searchresultitem")

    i=0

    for item in items:
        title = item.select_one(".title")
        print(title.text)
        price = item.select_one(".important")
        print(price.text)
        point = item.select_one(".points")
        print(point.text)
        sendv = item.select_one(".dui-tag")
        print(sendv.text)
        print("----------------")

PR消したり、ページ対応も簡単なので、色々データどりはできそうですね。

結果画像⬆︎

カテゴリー
プログラム

YAHOO検索結果スクレイピング

YAHOO検索は10件ずつしか取れないし、連続でやってると取れなくなる?のでスリープで回避してます。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 指定のURLをブラウザで開く
# Google検索結果は取得できるのか?

import re
import time
import webbrowser as wb
import requests
from bs4 import BeautifulSoup

#-------------------------------------------------
## main ###
#-------------------------------------------------
if __name__=='__main__':

    # 100ランク取得
    load_url = "https://www.google.co.jp/search?hl=ja&source=hp&q=ジョジョ+スタンド&ie=utf-8&oe=utf-8&num=101"

    # HTML取得
    html = requests.get(load_url)
    web_data = BeautifulSoup(html.content, "html.parser")
    list = web_data.findAll(True, {'class': 'BNeawe vvjwJb AP7Wnd'})

    # ランキング表示
    cnt = 0
    for ls in list:
        a = str(ls).strip('<div class="BNeawe vvjwJb AP7Wnd">')
        result_title = a.strip('</')
        print(str(cnt) + ":" + result_title)
        cnt = cnt + 1

    # Yahooは10件単位でしか取れないので10回まわす
    print("■Yahoo ランキング■")
    cnt = 0
    for i in range(10):
        # 10ランク取得
        pagenum = i * 10 + 1
        load_url = "https://search.yahoo.co.jp/search?p=ジョジョ+スタンド&ei=utf-8&b=" + str(pagenum)

        # HTML取得
        html = requests.get(load_url)
        web_data = BeautifulSoup(html.content, "html.parser")
        list = web_data.findAll('a')

        pattern = "(.*)clear.gif(.*)"
        # ランキング表示
        for ls in list:
            if str(ls).find('clear.gif') != -1:
                d = re.search(pattern, str(ls))
                a = d.group(2)
                a = a.replace("<b>", "")
                a = a.replace("</b>", "")
                a = a.replace(""""""">", "")
                a = a.replace("</a", "")

                result_title = a.strip('|')
                print(str(cnt) + ":" + result_title)
                cnt = cnt + 1

        time.sleep(1)