google翻訳の翻訳結果を取得する【bs4 VS find_elements】

soup.select()とfind_elementsではどっちがはやいのか?

前回の記事で「Google翻訳で翻訳された文章をとってくる【python, PhantomJS】」というのを書いた。結果的にはphantomjs+seleniumを使って翻訳結果をとってくるものとなった。しかしその時にきになったのが時間である。あとでなんとなくtimeモジュールというのがあったのでプログラムの実行時間を測ってみたのだが、

運が悪いときで10秒以上かかってしまうのである。これでは普通にブラウザを開いて入力したときとあまりかわらないのでは?と思ってしまった。ただしヘッドレスブラウザの利点はながら作業ができることではないかと思う。それはそれとして、requestsで本当に取得できないのかということである。

requests.get()で該当urlをひっぱってくる。実際にBeautifulSoup()にわたして結果をみてみると、まずそこに翻訳結果がなかった。残念ながらrequestsは使えないということになる。これは他にやり方があるのかもしれないが、僕の腕ではどうにもなりませんでした。

requestsを使ったサンプルコード

 

import pyperclip, requests, bs4, pprint

res = requests.get('https://translate.google.co.jp/?hl=ja#en/ja/' + pyperclip.paste())
res.raise_for_status() 
soup = bs4.BeautifulSoup(res.text)
print(soup)

残された手段

  • selenium+bs4
  • selenium標準のfind_elements

selenium webdrverとしてはphantomJSを使うのが前提になります。phantomJSだとうまく要素をとってこれるからです。しかもブラウザが目でみえなくて邪魔にならないからです。問題はBeautifulSoup()にもわたせるし、find_elementsにもhtmlを渡せるということです。それでこの二つの方法でどちらが実行が早いのか試してみました。

結論から話しますとselenium標準のfind_elementsでやったほうが早いです。(考えてみれば当たり前かもしれません)なぜかというと、bs4を使う場合は余計にモジュールをimportしなければならないからです。本当はrequestsでやりたいけども、できないので、selenium+phantomJSで攻めていくしかなさそうです。

 

SNSでもご購読できます。

コメントを残す

*

CAPTCHA