2

我試圖從谷歌翻譯網站中提取span標籤內容。內容是具有id =「result_box」的翻譯結果。 當試圖打印內容時,它返回None值。如何使用Beautiful Soup提取<span>標籤內容?

請檢查圖像,here

import requests 
from bs4 import BeautifulSoup 

r = requests.get("https://translate.google.co.in/?rlz=1C1CHZL_enIN729IN729&um=1&ie=UTF-8&hl=en&client=tw-ob#en/fr/good%20morning") 

soup = BeautifulSoup(r.content, "lxml") 
spanner = soup.find(id = "result_box") 

result = spanner.text 
+0

問題是請求不會執行JavaScript,因此如果您訪問您試圖取消的鏈接,您將看到類似http://imgur.com/a/lwSc5的內容。這就是爲什麼總是返回None。 – Roomm

+0

@AnkitDev結果可能是由javascript設置的,因此當你發送request.to模擬瀏覽器時,你可以使用'selenium' http://selenium-python.readthedocs.io/ – anekix

+0

如果你需要谷歌翻譯你應該檢查此https://ctrlq.org/code/19909-google-translate-api – Roomm

回答

2

請求不執行JavaScript,你可以使用seleniumPhantomJS的無頭瀏覽這樣的:

from bs4 import BeautifulSoup 
from selenium import webdriver 

url = "https://translate.google.co.in/?rlz=1C1CHZL_enIN729IN729&um=1&ie=UTF-8&hl=en&client=tw-ob#en/fr/good%20morning" 
browser = webdriver.PhantomJS() 
browser.get(url) 
html = browser.page_source 

soup = BeautifulSoup(html, 'lxml') 
spanner = soup.find(id = "result_box") 
result = spanner.text 

這使我們的預期成果:

>>> result 
'Bonjour' 
+0

謝謝Vinícius,這是一個好主意,它確實解決了許多其他問題。但是,上面的代碼需要大約5-6秒才能執行並給出輸出,並在屏幕上留下一個phantomjs.exe窗口。有沒有什麼辦法來加快執行時間並擺脫那個exe窗口? –

+0

我很高興幫助!我對性能不確定,也許ChromeDriver速度更快,但我真的沒有這方面的知識。關於隱藏命令行,我從來沒有嘗試過,但這個問題似乎是你想要的:https://stackoverflow.com/questions/25871898/how-to-hide-chromedriver-console-window –

相關問題