htmlのタグには、テキストや属性(class=など)が指定されている場合がある。
例えば <a> タグの属性 href=にはクリックしたときに移動するリンク先が、
<img> タグの属性 src= には画像のurlが記載されている。
これらを取得することで効率的にデータを収集できる。
・要素を取得
YAHOOのトップページの「エンタメ」タブの要素を見てみる。まずは検証でhtmlを確認し、XPathを取得する。
今回はhtmlを右クリックから「Copy ⇒ Copy full XPath」でフルパスを取得。
( <a> タグの部分を取得)
・要素のテキストを取得
要素のテキストとは <a>文字</a> のようにタグの間に記載されいる文字のこと。.text でその要素の持つテキストを取得できる。
from selenium import webdriver brows = webdriver.Chrome() brows.get( 'https://www.yahoo.co.jp/' ) element = brows.find_element_by_xpath( '/html/body/div/main/div[2]/article/div/ul/li[3]/a' ) print( element.text ) #出力 # エンタメ
.text は対象の要素の中にあるタグ(子要素)が持つテキスト全てを取得する。
上記のXPathを編集して、2つ上の <ul> タグでテキストを取得してみる。
from selenium import webdriver brows = webdriver.Chrome() brows.get( 'https://www.yahoo.co.jp/' ) element = brows.find_element_by_xpath( '/html/body/div/main/div[2]/article/div/ul' ) print( element.text ) #出力 # ニュース # 経済 # エンタメ # スポーツ # 国内 # 国際 # IT・科学 # 地域
「エンタメ」以外のタブの文字が取得できた。
・要素の属性の値を取得
.get_attribute( 属性名 ) でその要素の指定した属性の値を取得する。from selenium import webdriver brows = webdriver.Chrome() brows.get( 'https://www.yahoo.co.jp/' ) element = brows.find_element_by_xpath( '/html/body/div/main/div[2]/article/div/ul/li[3]/a' ) print( element.get_attribute( 'class' ) ) #class= で指定されている値 #出力 # rapidnofollow sc-bEjcJn dXIkjh
指定した属性が設定されていない場合は空白やNoneが返ってくる。
from selenium import webdriver brows = webdriver.Chrome() brows.get( 'https://www.yahoo.co.jp/' ) element = brows.find_element_by_xpath( '/html/body/div/main/div[2]/article/div/ul/li[3]/a' ) print( element.get_attribute('class') ) print( element.get_attribute('id') ) #id= は指定されていない print( element.get_attribute('href') ) #出力 # rapidnofollow sc-bEjcJn dXIkjh # # https://news.yahoo.co.jp/categories/entertainment
href= の値を指定することで、クリックせずにページを移動することもできる。
from selenium import webdriver brows = webdriver.Chrome() brows.get( 'https://www.yahoo.co.jp/' ) element = brows.find_element_by_xpath( '/html/body/div/main/div[2]/article/div/ul/li[3]/a' ) strUrl = element.get_attribute( 'href' ) brows.get( strUrl ) #href= の値へ移動
0 件のコメント:
コメントを投稿