質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

2回答

1500閲覧

selenium: リンクがないテキスト部分をスクレイピング

hafuuuuu

総合スコア3

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2021/09/23 07:05

編集2021/09/23 07:54

pythonを学習し始めて3ヶ月の初心者です。
ECサイトの在庫取得、新規商品登録などを自動化したいためseleniumでシステムを構築したいと思い今回の質問にいたりました。
調べながらいろいろ試したのですが、これ以上打つ手が思い浮かばず。。みなさまのお力をいただけたら幸いです。

前提・実現したいこと

Seleniumを使い下記の手順で、まずは商品ページの基本情報である「商品管理番号」を取得しようとしました。
例えばこちらのページ:https://ena-kagu.com/product.php?id=380
であれば「商品管理番号 135004」を取得できるようにしたいです。

1.ログイン
2.商品一覧ページに遷移(https://ena-kagu.com/list.php)
3.ページングしながら商品一覧ページにある個別商品のURLを取得
4.商品個別ページの指定したテキストを取得

上記の手順で1~3までは実現できたのですが、4の部分でつまづいています。

発生している問題・エラーメッセージ

このコードで取得できていると思い、CSVに出力したところ以下のように出力ができていませんでした。
色々調べたのですが、どこの部分に問題がまったくわからずです。

テキスト検索している下記の部分が間違っているのかな?と思っています(違う箇所が間違っていればご指摘ください)

python

1find_elements_by_xpath('//*[contains(text(), "商品管理番号")]')

↓出力されたCSV↓

管理番号 0 [<selenium.webdriver.remote.webelement.WebElem... 1 [<selenium.webdriver.remote.webelement.WebElem... 2 [<selenium.webdriver.remote.webelement.WebElem... 3 [<selenium.webdriver.remote.webelement.WebElem... 4 [<selenium.webdriver.remote.webelement.WebElem... 5 [<selenium.webdriver.remote.webelement.WebElem... 6 [<selenium.webdriver.remote.webelement.WebElem... 7 [<selenium.webdriver.remote.webelement.WebElem... 8 [<selenium.webdriver.remote.webelement.WebElem... 9 [<selenium.webdriver.remote.webelement.WebElem...

該当のソースコード

# 参考:https://nanjamonja.net/archives/893 from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.common.exceptions import NoSuchElementException import pandas as pd from time import sleep import time headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"} USER = "ユーザーネーム" PASS = "パスワード" options = Options() options.add_argument browser = webdriver.Chrome('クロームドライバーのパス',options=options) browser.implicitly_wait(3) url_login = "https://ena-kagu.com/login.php" browser.get(url_login) time.sleep(3) print("ログインページにアクセス") element = browser.find_element_by_name('loginEmail') element.clear() element.send_keys(USER) print("フォームを送信") element = browser.find_element_by_name('loginPassword') element.clear() element.send_keys(PASS) print("パスワードを入力") test_browser = browser.find_element_by_name('login') time.sleep(3) test_browser.click() print("クリックしました") pageURL = 'https://ena-kagu.com/list.php' #商品一覧ページ browser.get(pageURL) sleep(3) elem_urls=[] while True: elems = browser.find_elements_by_css_selector(".list-box-inner a") #boxSearchresultEach>h3>aタグまでを取得 #https://posipochi.com/2021/05/03/python-scraping-css-selector/ (CSSセレクタ) for elem in elems: elem_urls.append(elem.get_attribute("href")) #リス[elem_urls]にhrefを格納 #次へボタンクリックしてページ遷移 try: next_button = browser.find_element_by_link_text('次へ »') next_button.click() sleep(3) except Exception: break print('ページ数:',len(elem_urls)) cols=['管理番号'] df = pd.DataFrame(index=[], columns=cols) for i in elem_urls: browser.get(i) #管理番号取得 item_num = browser.find_elements_by_xpath('//*[contains(text(), "商品管理番号")]') df = df.append({'管理番号':item_num}, ignore_index=True)

補足情報(FW/ツールのバージョンなど)

jupyter labを使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

この 135004 の部分は、

css

1find_elements_by_css('#product-detail-head > div.product-right > div > div.pro-description > table > tbody > tr:nth-child(1) > td')

で選択できませんかね。

投稿2021/09/23 14:30

ak.n

総合スコア287

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

商品管理番号を取得したいのであれば

find_elements_by_xpath('//*[contains(text(), "商品管理番号")]') ```ではなく ```ここに言語を入力 element.text

https://www.seleniumqref.com/api/python/element_infoget/Python_text.htmlを参照)で取得されてはいかがでしょうか?

投稿2021/09/23 07:48

編集2021/09/23 07:49
cc000072

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hafuuuuu

2021/09/23 14:22

ご回答ありがとうございます。 そちらですと商品番号以外の基本情報(サイズや生産地など)も取得してしまうようです。
cc000072

2021/09/25 05:28

あまりきれいなコードではないですが objProductDescriptionPage = driver.find_element_by_class_name('pro-description') objTableTag = objProductDescriptionPage.find_element_by_tag_name('table') objTbodyTag = objTableTag.find_element_by_tag_name('tbody') objTrTag = objTbodyTag.find_element_by_tag_name('tr') objTdTag = objTrTag.find_element_by_tag_name('td') print(objTdTag.text) を試してみてください。こちらでは商品番号が取れました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問