html内のリスト形式になっている部分の取得や、要素を単独で指定しずらい場合などに便利。
・複数の要素を取得
YAHOOのトップページにある <ul> タグの要素を全て取得してみる。(<ul>タグはhtml内のリスト表示の部分の親要素)
XPathで書くと //ul 。
これを .find_elements_by_xpath() で指定して取得する。
※「_elements_」の部分が複数形になっていることに注意。
from selenium import webdriver brows = webdriver.Chrome() brows.get( 'https://www.yahoo.co.jp/' ) elements = brows.find_elements_by_xpath( '//ul' ) print( type(elements) ) #type()で型を確認 #出力 # <class 'list'>
for と .get_attribute() を使って各要素の属性「aria-label」を見てみる。
属性の取得についてはこちら ⇒
from selenium import webdriver brows = webdriver.Chrome() brows.get( 'https://www.yahoo.co.jp/' ) elements = brows.find_elements_by_xpath( '//ul' ) for e in elements: print( e.get_attribute('aria-label') ) #出力 # None # None # None # None # お知らせ # 主なサービス # None # None # None # Yahoo!ニュースのカテゴリ # None # None # あなたのステータス # None # None # None # スコアボードのカテゴリ # None # None # None # None # None # None
属性 aria-label="主なサービス" を持つ<ul>タグは、
YAHOOトップページの左のリスト部分にあたる。
さらに if を使って、このリスト部分のリンク一覧を取得してみる。
from selenium import webdriver brows = webdriver.Chrome() brows.get( 'https://www.yahoo.co.jp/' ) elements = brows.find_elements_by_xpath( '//ul' ) for e in elements: if e.get_attribute( 'aria-label' )=='主なサービス': #この<ul>タグ内の全ての<a>タグを取得 elements2 = e.find_elements_by_xpath( './/a' ) for e2 in elements2: print( e2.text ) #テキスト print( e2.get_attribute('href') ) #リンク先 print( '------------' ) #出力 # ショッピング # https://shopping.yahoo.co.jp/?sc_e=ytc # ------------ # PayPayモール # https://paypaymall.yahoo.co.jp/?sc_e=ytc # ------------ # ヤフオク! # https://auctions.yahoo.co.jp/ # ------------ # PayPayフリマ # https://app.adjust.com/1kmi1m2?redirect=https%3A%2F%2Fpaypayfleamarket.yahoo.co.jp%2F%3Fcpt_s%3Dytopmedia%26cpt_m%3Dkotei%26cpt_n%3Dcontent%26cpt_c%3Dytopmedia # ------------ # #以下略
※取得した要素からさらに .find_elements_by_xpath() を使う場合、
XPathは . (コンマ)から始める。
0 件のコメント:
コメントを投稿