スクレイピング - Seleniumを使う場合
Pythonでスクレイピングをやる人、多いと思います。
私もそのクチでした。
ここでは、スクレイピングの中でも、実際にブラウザを動かして操作するSeleniumで、以下の操作を実現しました。
- Chromeを立ち上げyahoo.co.jpにアクセスする
- 検索窓に指定したキーワードを入力し、検索ボタンクリック
- 検索結果をタイトルとURLを取得する
- 3.の内容をファイルに保存する。(今回は、HTMLファイルに記録)
記事の最後に、躓いた所など書いています。
from selenium import webdriver import urllib.parse # 1.〜3.までの処理をsearch()に一括りにしました。 def search(): browser = webdriver.Chrome() browser.get("http://yahoo.co.jp") elem_search_word = browser.find_element_by_id("srchtxt") elem_search_word.send_keys("半端ないって") elem_search_btn = browser.find_element_by_id("srchbtn") elem_search_btn.click() # 検索結果(Link)を取得 #〜〜はid要素、.〜はclass要素 その他はタグ要素 links = browser.find_elements_by_css_selector("#WS2m .w .hd h3 a") # url取得 html_output = {} for elem in links: # マルチバイトがあるのでデコード処理を入れておく url = urllib.parse.unquote(elem.get_property("href")) title = elem.text html_output[title] = '<a href="' + url + '">' + title + '</a><br>' write_file(html_output) browser.close() # 取得した結果を画面表示するイメージで、htmlファイルに書き込みます。 def write_file(s): with open('search_rank.html', 'w') as f: f.write("<html>\n<head>\n") f.write("<meta http-equiv='content-type' charset='utf-8'>\n") f.write("</head>\n<body>\n") for k, v in s.items(): f.write(k + ":" + v + "\n") f.write("</body>\n</html>") # 実行 search()
出力されたHTMLファイル
<html> <head> <meta http-equiv='content-type' charset='utf-8'> </head> <body> 大迫半端ないってとは (オオサコハンパナイッテとは) [単語記事] - ニコニコ ...:<a href="http://dic.nicovideo.jp/a/大迫半端ないって">大迫半端ないってとは (オオサコハンパナイッテとは) [単語記事] - ニコニコ ...</a><br> 大迫 、ハンパないって!!フルバージョン - YouTube:<a href="https://www.youtube.com/watch?v=pZ2UIYRK5I4">大迫 、ハンパないって!!フルバージョン - YouTube</a><br> 【大流行】「大迫半端ないってゲーム」を作ったら盛り上がりすぎたw - YouTube:<a href="https://www.youtube.com/watch?v=8snezGmNVsE">【大流行】「大迫半端ないってゲーム」を作ったら盛り上がりすぎたw - YouTube</a><br> 大迫はんぱないbot (@osako_hanpa) | Twitter:<a href="https://twitter.com/osako_hanpa">大迫はんぱないbot (@osako_hanpa) | Twitter</a><br> 「大迫、ハンパないって!」発言の滝川二・中西隆裕主将の今 : スポーツ報知:<a href="http://www.hochi.co.jp/soccer/worldcup/CO034053/20180621-OHT1T50032.html">「大迫、ハンパないって!」発言の滝川二・中西隆裕主将の今 : スポーツ報知</a><br> 大迫半端ないって!の続きがさらに公開されたようなので書きおこしてみる ...:<a href="http://nakosan.com/?p=1297">大迫半端ないって!の続きがさらに公開されたようなので書きおこしてみる ...</a><br> Good loser「半端ないって!!!」の中西隆裕さんの今 - NAVER まとめ:<a href="https://matome.naver.jp/odai/2139995039593566401">Good loser「半端ないって!!!」の中西隆裕さんの今 - NAVER まとめ</a><br> 「大迫半端ないって!」という名言でこの日を約束された未来にしてくれた ...:<a href="http://blog.livedoor.jp/vitaminw/archives/53284800.html">「大迫半端ないって!」という名言でこの日を約束された未来にしてくれた ...</a><br> 3 「大迫、半端ないって〜!」生みの親、職場から異例の ... - 週刊女性PRIME:<a href="http://www.jprime.jp/articles/-/12662">3 「大迫、半端ないって〜!」生みの親、職場から異例の ... - 週刊女性PRIME</a><br> </body> </html>
このHTMLファイルをブラウザで開くとこんな感じ
大迫半端ないってとは (オオサコハンパナイッテとは) [単語記事] - ニコニコ ...:大迫半端ないってとは (オオサコハンパナイッテとは) [単語記事] - ニコニコ ...
大迫 、ハンパないって!!フルバージョン - YouTube:大迫 、ハンパないって!!フルバージョン - YouTube
【大流行】「大迫半端ないってゲーム」を作ったら盛り上がりすぎたw - YouTube:【大流行】「大迫半端ないってゲーム」を作ったら盛り上がりすぎたw - YouTube
大迫はんぱないbot (@osako_hanpa) | Twitter:大迫はんぱないbot (@osako_hanpa) | Twitter
「大迫、ハンパないって!」発言の滝川二・中西隆裕主将の今 : スポーツ報知:「大迫、ハンパないって!」発言の滝川二・中西隆裕主将の今 : スポーツ報知
大迫半端ないって!の続きがさらに公開されたようなので書きおこしてみる ...:大迫半端ないって!の続きがさらに公開されたようなので書きおこしてみる ...
Good loser「半端ないって!!!」の中西隆裕さんの今 - NAVER まとめ:Good loser「半端ないって!!!」の中西隆裕さんの今 - NAVER まとめ
「大迫半端ないって!」という名言でこの日を約束された未来にしてくれた ...:「大迫半端ないって!」という名言でこの日を約束された未来にしてくれた ...
3 「大迫、半端ないって〜!」生みの親、職場から異例の ... - 週刊女性PRIME:3 「大迫、半端ないって〜!」生みの親、職場から異例の ... - 週刊女性PRIME
今回、ちょっと躓いた所
Q)chromedriverどこ置いたらええの?
A)パスが通っている所に置いたら大丈夫っぽいので私はanaconda3/binフォルダに置きました。
(参考)パスの確認はターミナルで以下を入力
echo $PATH
今後、リファクタリングしたり、DBにデータを保存したり、別の処理と連携してまた違うことをやってみたいと思います。。
ちなみに、今回このプログラムを思いついたのはクラウドソーシングの案件の中で、「指定したキーワードをyahooで検索して特定の順位のサイトURLを報告する(〜10円程度/件)」というのを見て、これ自動化したらめっちゃ儲かるんじゃね?って思ったから。(動機が不純)結局単価が低いのと、件数にも上限がありそうなので諦めましたが:D)
参考にしたサイト: www.inet-solutions.jp