前説
Yahoo!で検索するとヒットした結果が、見出し、リンク、ヒット概要などとなってリストのように次々と表示されます。このうち、記事のリンク先(URL)を取得したいと妄想(≒暴走)しました。
取得したテキストを取捨選択・置換しURLだけにする作業をした関数「correction(chars)」は、手順が恥ずかしいので省かせていただきました。もっとスマートな方法があるのでしょうが、爺的にはとりあえずできただけで、とても公開できない、というようなことであります。
- split
- strip
- replace
- [1:],[:-1]
などを使いました。
そもそも記事見出しのURLはどこにある
HTML5になって、aタグをブロック要素として扱うことができるようになりました。あわせて、Yahoo!検索結果には、一般に想像する素直な位置にURLがありませんでした(爺の個人的感想です)。非力な爺にはとっても難渋の道筋でした。
クラス要素「sw-Card__title」をdriver.find_~で取得した結果をいったん変数(リスト、今回はswcard_classを設定した)に入れ、さらに、その要素1番目(=[0])からaタグを見つけ、さらに「get_attribute('onmousedown')」というのを引っ付け、この下のような値を得ることができました。
- 関数に遷移する前の状態 return lswap(this,'https%3A//note.com/shotafootball88/n/n70509793d1ea','FOR=省略','9999999999')
- 関数からの戻り値 https://note.com/shotafootball88/n/n70509793d1ea
関数では、直上のリストのように成型するため、文字置換、文字削除、などやりました。
「return lswap(this,'」のあとにターゲットのURLが埋まっています。でも、シングルクォーテーションにかこまれ、「:」は「%3A」になっているなど、抽出・置換などで脳みそが疲れました。
PythonでYahoo!記事リンクを抽出
from selenium import webdriver import time webdriver_path=('C:\Program Files\chromedriver\chromedriver.exe') driver = webdriver.Chrome(webdriver_path) #検索設定 #24時間以内更新、日本語などの設定で検索語をセット h_search_word = '台南' #検索語 h_head ='https://search.yahoo.co.jp/search?_adv_prop=web&x=op&ei=UTF-8&fr=top_ga1_sa&fr2=op&submit=%E6%A4%9C%E7%B4%A2&va=' h_tail ='&va_vt=any&vp=&vp_vt=any&vo=&vo_vt=any&ve=&ve_vt=any&vd=d&vst=0&vs=&vf=all&vc=countryJP&fl=2' #24h #h_tail ='&va_vt=any&vp=&vp_vt=any&vo=&vo_vt=any&ve=&ve_vt=any&vd=w&vst=0&vs=&vf=all&vc=countryJP&fl=2' #7days h_target = h_head + h_search_word + h_tail #検索する内容 #関数 def correction(chars): #イロイロ処理(省略) a_link = 'https://note.com/shotafootball88/n/n70509793d1ea' #便宜結果だけ付けました return a_link #main------------------ driver.get(h_target) time.sleep(2) swcard_class = driver.find_elements_by_class_name('sw-Card__title') time.sleep(2) sc_a = swcard_class[0].find_element_by_tag_name('a').get_attribute('onmousedown') print(sc_a) #関数に行く前の値 fx_link = correction(sc_a) #関数往復→戻り値が取得したいURL print(fx_link) #関数往復後の戻り値 driver.close print('finished')
(1)著作権は記事を書いた人にある(だいたいね)、(2)検索サイトはネット上の情報をまとめた(努力お疲れ様です)、(3)オープンなネット世界であるなら、クローリングやスクレイピングにもっと寛容な対応と設備をしていただけたらありがたい(実際にはとってもやりにくいように知恵と工夫などをしてるよね)。
「インターネット」とは読んで字のごとし、となっているのか現状は…。一握りのプライベートカンパニーが覇権を握り、クローリングやスクレイピングしにくい状況と、検索するなら従えよ~という状態が、はたして健全なのだろうかと、毒を吐いてみる耄碌爺でした。RSSなど二次利用を前提とした情報発信も、さまざまなことから最近少ないのかな、とも思っています。さて、今後どのようなイタチごっこが繰り広げられるのでしょう…。