В настоящее время я просматриваю раздел Web Scraping AutomateTheBoringStuff и пытаюсь написать скрипт, который извлекает переведенные слова из Google Translate с помощью BeautifulSoup4.
Я просмотрел html-содержимое страницы, где «Пояснение» — это переведенное слово:
<span id="result_box" class="short_text" lang="en">
<span class>Explanation</span>
</span>
Используя BeautifulSoup4, я пробовал разные селекторы, но ничего не возвращало переведенное слово. Вот несколько примеров, которые я пробовал, но они вообще не дают никаких результатов:
soup.select('span[id="result_box"] > span')
soup.select('span span')
Я даже скопировал селектор непосредственно из инструментов разработчика, что дало мне #result_box > span. Это снова не возвращает никаких результатов.
Может кто-нибудь объяснить мне, как использовать BeautifulSoup4 для моей цели? Это мой первый раз, когда я использую BeautifulSoup4, но я думаю, что использую BeautifulSoup более или менее правильно, потому что селектор
soup.select('span[id="result_box"]')
получает внешний элемент span**
[<span class="short_text" id="result_box"></span>]
** Не уверен, почему часть 'leng="en"' отсутствует, но я вполне уверен, что все равно нашел правильный элемент.
Вот полный код:
import bs4, requests
url = 'https://translate.google.ca/#zh-CN/en/%E6%B2%BB%E5%85%B7'
res = requests.get(url)
res.raise_for_status
soup = bs4.BeautifulSoup(res.text, "html.parser")
translation = soup.select('#result_box span')
print(translation)
РЕДАКТИРОВАТЬ: Если я сохраню страницу Google Translate в виде автономного html-файла, а затем создам объект супа из этого html-файла, проблем с поиском элемента не возникнет.
import bs4
file = open("Google Translate.html")
soup = bs4.BeautifulSoup(file, "html.parser")
translation = soup.select('#result_box span')
print(translation)