ページャー「次へ」をクリックしてスクレイピングする方法 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を指定することで、特定できる。