タローの日記

そこはかとなく書きつくる

Bet365のスクレイピング

はじめに

最近、SeleniumでBet365のスクレイピングをやっている。ちょっといい感じにできてきたので、Tipsを紹介する。

環境

Python 3.4
Selenium
Chrome Driver
jupyter notebook

まずは下準備

Selenium起動!

class SeleniumDriver :
    def __init__(self, link) :
        self.browser = webdriver.Chrome("C:/Users/A/Downloads/chromedriver_win32/chromedriver.exe")
        self.browser.implicitly_wait(10)
        self.browser.get(link) #link = "https://www.bet365.com"

手動で試合の画面にいく(今回はサッカー)

f:id:jmwjmw01:20181007012321p:plain

Let's スクレイピング

今回は対戦カードの名前と、それぞれのFulltimeResultのオッズをとってきます。

Fulltime Resultを含む要素を検索

self.browser.find_element_by_xpath("//*[contains(text(),'Fulltime Result') or contains(text(),'Goal')]").get_attribute('innerHTML')

取りたい要素を右クリックして、「検証」

f:id:jmwjmw01:20181007021452p:plain

Developer ToolでFulltime Resultの要素からのPathを確認する。

f:id:jmwjmw01:20181007021234p:plain

Pathをいい感じに更新

self.browser.find_element_by_xpath("//*[contains(text(),'Fulltime Result') or contains(text(),'Goal')]/../../div[2]/div[1]/div/div[1]/span").get_attribute('innerHTML')

Jupyterで結果を確認。Pathを変えて、結果確認してを繰り返せば、割と目的のPath見つかります。

f:id:jmwjmw01:20181007022057p:plain

ほかのPathはこんなん

gameInfo["awayName"] = self.browser.find_element_by_xpath("//*[contains(text(),'Fulltime Result') or contains(text(),'Goal')]/../../div[2]/div[1]/div/div[3]/span").get_attribute('innerHTML') #awayチームの名前
gameInfo["homeOdds"] = self.browser.find_element_by_xpath("//*[contains(text(),'Fulltime Result') or contains(text(),'Goal')]/../../div[2]/div[1]/div/div[1]/span[2]").get_attribute('innerHTML')  #ホームチームのオッズ
gameInfo["drawOdds"] = self.browser.find_element_by_xpath("//*[contains(text(),'Fulltime Result') or contains(text(),'Goal')]/../../div[2]/div[1]/div/div[2]/span[2]").get_attribute('innerHTML') #ドローのオッズ
gameInfo["awayOdds"] = self.browser.find_element_by_xpath("//*[contains(text(),'Fulltime Result') or contains(text(),'Goal')]/../../div[2]/div[1]/div/div[3]/span[2]").get_attribute('innerHTML') #アウェイチームのオッズ