けむブログ

データ分析に関する気付きや学びを記録するブログ

ページャー「次へ」をクリックしてスクレイピングする方法 python

やりたいこと

以下の上場企業のリストを取得したい。 売上高:株式ランキング - Yahoo!ファイナンス ページ下部にある「次へ」ボタンをクリックして全て取得したい。

方法

前提

こういう状態のとき

import time
from bs4 import BeautifulSoup as bs
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options

options = Options()
# Chromeのパス(Stableチャネルで--headlessが使えるようになったら不要なはず)
options.binary_location = '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary'
# ヘッドレスモードを有効にする(次の行をコメントアウトすると画面が表示される)。
options.add_argument('--headless')
# ChromeのWebDriverオブジェクトを作成する。

driver = webdriver.Chrome('C:/chromedriver/chromedriver.exe')

driver.get('https://info.finance.yahoo.co.jp/ranking/?kd=46&mk=1&tm=d&vl=a')

import socks,socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9150)
socket.socket = socks.socksocket
for i in range(1,13):
    time.sleep(1)
    html = driver.page_source
    soup = bs(html, "html.parser")
    
    for t in soup.findAll("table",{"class":"rankingTable"}):
        l.append(t)

 driver.find_element_by_xpath('//*[@id="contents-body-bottom"]/div[2]/ul/a['+str(i)+']').click()

といったfor文の中で以下のように記載することで取れる。

driver.find_element_by_xpath('//*[@id="contents-body-bottom"]/div[2]/ul/a[11]').click()```

  //*[@id="contents-body-bottom"]/div[2]/ul/a[11]



の箇所は「次へ」を選択した状態で右クリック>検証>copy>copy xpath の値を指定している。
xpathを指定することで、特定できる。