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

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

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

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

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Python

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

Q&A

0回答

860閲覧

beutifulsoupで「次へ」「次のページへ」 スクレイピングしたい

fideo

総合スコア55

スクレイピング

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

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Python

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

0グッド

0クリップ

投稿2021/11/30 09:36

編集2021/12/02 12:01

「次へ」「次のページへ」 をPython,selenium,beutifulsoupで ユーザー名スクレイピングしたいです。
下記の方法で行いまたが、最初の1ページだけユーザー名スクレイピングされます。
次のページ行ってもスクレイピングするにはどのようにすればよろしいでしょうか。

HTML 「次へ」のページ番号
1から4までの番号を指定しています。

<span class="btn-paging ng-binding ng-scope" ng-class="{ 'on': pageStatus.current === page.value }" ng-repeat="page in pagedButtons" ng-click="toPage(page.value);" style="">1</span> <span class="btn-paging ng-binding ng-scope on" ng-class="{ 'on': pageStatus.current === page.value }" ng-repeat="page in pagedButtons" ng-click="toPage(page.value);" style="">2</span> <span class="btn-paging ng-binding ng-scope" ng-class="{ 'on': pageStatus.current === page.value }" ng-repeat="page in pagedButtons" ng-click="toPage(page.value);">3</span> <span class="btn-paging ng-binding ng-scope" ng-class="{ 'on': pageStatus.current === page.value }" ng-repeat="page in pagedButtons" ng-click="toPage(page.value);">4</span>

HTML 「次へ」ボタン

<button tabindex="-1" class="btn-paging next" ng-click="toPage(pageStatus.current + 1);" ng-disabled="pageStatus.current === pageStatus.last"><i class="icon-angle-right"></i></button>

Code

# coding:utf-8 from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.options import Options from webdriver_manager.chrome import ChromeDriverManager #from datetime import datetime as dt, date, timedelta import pyautogui import time from datetime import datetime as dt, date, timedelta #headless background option = Options() #backgrand #option.add_argument('--headless') #ログイン情報を維持するための設定  # 参考→https://rabbitfoot.xyz/selenium-chrome-profile/ PROFILE_PATH ="C:\Users\example\AppData\Local\Google\Chrome\User Data\" # 変更 option.add_argument('--user-data-dir=' + PROFILE_PATH) option.add_argument('--profile-directory=Default') # ブラウザを開く。 #options=option background driver = webdriver.Chrome(executable_path=ChromeDriverManager().install() ,options=option) #Getting Default Adapter failed error message option.add_experimental_option('excludeSwitches', ['enable-logging']) strDate = dt.now().strftime("%Y%m%d") #指定したURLに遷移 URL= "https://example.com/app/#!/" # Googleの検索TOP画面を開く。 driver.get(URL) #60秒待機 time.sleep(10) #menuボタンをクリック menu = driver.find_element_by_xpath('//*[@id="mainContainerWrapper"]/member-control/section[2]/div[2]/div/ul/li[1]/div/div/ul/li[2]/span') menu.click() #1秒待機 time.sleep(2) #BeautifulSoup指定 html = driver.page_source.encode('utf-8') soup = BeautifulSoup(html, 'html.parser') #ユーザ数取得 member=soup.find(class_="member-count ng-binding").get_text() print(member) #ループのページ数取得 loop_num=math.ceil(int(member)/100) print(loop_num) for i in range(1,loop_num): #次のボタンクリック next_button = driver.find_element_by_xpath('//*[@id="mainContainerWrapper"]/member-control/div/div/button[3]').click() time.sleep(4) #すべてのユーザーを取得 users_names = [i.get_text() for i in soup.find_all(class_="fn-user ellip-1 ng-binding")] print(users_names)

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

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

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

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

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

otn

2021/11/30 10:29

クリックするXPathが変ですが、このコードで最終ページまで「次へ」がクリックできているということですよね? 最終ページまで行ったらそのあとどうなるのでしょうか?
fideo

2021/11/30 12:31

回答ありがとうごうざいます。 最終ページまで行っても「次へ」クリックしますので 最終ページずっとループしてクリックします。
otn

2021/11/30 12:45

最終ページにも「次へ」があるなら、何を以て最終ページと判断するんでしょう? あなたは手動操作の時にどうやって判断していますか?それを条件にしましょう。
fideo

2021/12/01 01:27

回答ありがとうございます。 手動の場合は、ページ数を確認します。 最終ページいきましたら終わりにします。
otn

2021/12/01 01:29

では、それを条件にしましょう。
fideo

2021/12/02 12:03

ありがとうございます。 最終ページ数を取得してループできましたが、最初の1ページだけユーザー名スクレイピングされます。 次のページ行ってもスクレイピングするにはどのようにすればよろしいでしょうか。 #ユーザ数取得 member=soup.find(class_="member-count ng-binding").get_text() print(member) #ループのページ数取得 loop_num=math.ceil(int(member)/100) print(loop_num) for i in range(1,loop_num): #次のボタンクリック next_button = driver.find_element_by_xpath('//*[@id="mainContainerWrapper"]/member-control/div/div/button[3]').click() time.sleep(4) #すべてのユーザーを取得 users_names = [i.get_text() for i in soup.find_all(class_="fn-user ellip-1 ng-binding")] print(users_names) もし分かりましたら、教えていただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問