39888


このコードはグーグル翻訳に英文を飛ばして、翻訳されたものを取得しようとしたプログラムです。PhantomJSを用いた類似プログラムではうまくspan要素を取得できたのですが、bs4を用いた、コードではこれがうまく取得できません。

この違いはなんなのか、誰か分かる方はいらっしゃいますでしょうか？

[code]

    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)
    elems = soup.select('span')
    for i in range(len(elems)):
     print(elems[i].getText())
    
[/code]


CC BY-SA 3.0
2017-11-27T08:53:21.547
39880
2017-11-27T14:19:39.103
26076
question
python
なぜbs4で要素を取得することができないのでしょうか？


  * グーグル翻訳は **javascriptが動作する環境** でしか「 **翻訳できません** 」。 
  * Python の `requests` では **javascript動かして** ページを取得することはできません。
  * javascriptが必要になるページを **動的なページ** と呼び、HTML/CSSだけのようなページをを **静的なページ** と呼んだりします。
  * PhantomJS は **ヘッドレスブラウザ** と呼ばれるライブラリの一つで、ブラウザと同様に **javascript** を実行して **動的なページ** を取得できます。

Python で **動的なページ** をスクレイピングしたい時も、結局
PhantomJSなりを用意して、それをSeleniumなどのライブラリを通して使ったりします。

Python, Selenium, WebDriver, PhantomJS あたりのキーワードでやり方はいっぱい出てくると思うのでググってみてください。


CC BY-SA 3.0
2017-11-27T14:19:39.103
39888
2017-11-27T14:19:39.103
2168
39880
answer