使用 BeautifulSoup4 和 Google 翻译
Using BeautifulSoup4 with Google Translate
我目前正在浏览 AutomateTheBoringStuff 的 Web Scraping 部分,并尝试编写一个脚本,从 Google Translate using BeautifulSoup4.
中提取翻译的单词
我检查了一个页面的 html 内容,其中 'Explanation' 是翻译词:
<span id="result_box" class="short_text" lang="en">
<span class>Explanation</span>
</span>
使用 BeautifulSoup4,我尝试了不同的选择器,但没有 return 翻译的词。以下是我尝试过的几个示例,但它们 return 根本没有结果:
soup.select('span[id="result_box"] > span')
soup.select('span span')
我什至直接从开发者工具中复制了选择器,这给了我 #result_box > span。这又是 return 没有结果。
有人可以向我解释如何使用 BeautifulSoup4 吗?这是我第一次使用 BeautifulSoup4 但我认为我或多或少正确地使用了 BeautifulSoup 因为选择器
soup.select('span[id="result_box"]')
获取外部跨度元素**
[<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 翻译页面保存为离线 html 文件,然后从该 html 文件创建一个 soup 对象,定位元素.
import bs4
file = open("Google Translate.html")
soup = bs4.BeautifulSoup(file, "html.parser")
translation = soup.select('#result_box span')
print(translation)
试试这个:
translation = soup.select('#result_box span')[0].text
print(translation)
result_box div 是正确的元素,但您的代码仅在您保存在浏览器中看到的内容时才有效,因为其中包括动态生成的内容,使用请求你只能得到源本身禁止任何动态生成的内容。翻译是通过对下面的 url 的 ajax 调用生成的:
"https://translate.google.ca/translate_a/single?client=t&sl=zh-CN&tl=en&hl=en&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&ie=UTF-8&oe=UTF-8&source=bh&ssel=0&tsel=0&kc=1&tk=902911.786207&q=%E6%B2%BB%E5%85%B7"
为了您的要求 returns:
[[["Fixture","治具",,,0],[,,,"Zhì jù"]],,"zh-CN",,,[["治 具",1,[["Fixture",999,true,false],["Fixtures",0,true,false],["Jig",0,true,false],["Jigs",0,true,false],["Governance",0,true,false]],[[0,2]],"治具",0,1]],1,,[["ja"],,[1],["ja"]]]
所以你要么必须模仿请求,传递所有必要的参数,要么使用支持动态内容的东西,比如 selenium
您可以尝试这种不同的方法:
if filename.endswith(extension_file):
with open(os.path.join(files_from_folder, filename), encoding='utf-8') as html:
soup = BeautifulSoup('<pre>' + html.read() + '</pre>', 'html.parser')
for title in soup.findAll('title'):
recursively_translate(title)
完整代码请见此处:
或此处:
https://neculaifantanaru.com/en/example-google-translate-api-key-python-code-beautifulsoup.html
我目前正在浏览 AutomateTheBoringStuff 的 Web Scraping 部分,并尝试编写一个脚本,从 Google Translate using BeautifulSoup4.
中提取翻译的单词我检查了一个页面的 html 内容,其中 'Explanation' 是翻译词:
<span id="result_box" class="short_text" lang="en">
<span class>Explanation</span>
</span>
使用 BeautifulSoup4,我尝试了不同的选择器,但没有 return 翻译的词。以下是我尝试过的几个示例,但它们 return 根本没有结果:
soup.select('span[id="result_box"] > span')
soup.select('span span')
我什至直接从开发者工具中复制了选择器,这给了我 #result_box > span。这又是 return 没有结果。
有人可以向我解释如何使用 BeautifulSoup4 吗?这是我第一次使用 BeautifulSoup4 但我认为我或多或少正确地使用了 BeautifulSoup 因为选择器
soup.select('span[id="result_box"]')
获取外部跨度元素**
[<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 翻译页面保存为离线 html 文件,然后从该 html 文件创建一个 soup 对象,定位元素.
import bs4
file = open("Google Translate.html")
soup = bs4.BeautifulSoup(file, "html.parser")
translation = soup.select('#result_box span')
print(translation)
试试这个:
translation = soup.select('#result_box span')[0].text
print(translation)
result_box div 是正确的元素,但您的代码仅在您保存在浏览器中看到的内容时才有效,因为其中包括动态生成的内容,使用请求你只能得到源本身禁止任何动态生成的内容。翻译是通过对下面的 url 的 ajax 调用生成的:
"https://translate.google.ca/translate_a/single?client=t&sl=zh-CN&tl=en&hl=en&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&ie=UTF-8&oe=UTF-8&source=bh&ssel=0&tsel=0&kc=1&tk=902911.786207&q=%E6%B2%BB%E5%85%B7"
为了您的要求 returns:
[[["Fixture","治具",,,0],[,,,"Zhì jù"]],,"zh-CN",,,[["治 具",1,[["Fixture",999,true,false],["Fixtures",0,true,false],["Jig",0,true,false],["Jigs",0,true,false],["Governance",0,true,false]],[[0,2]],"治具",0,1]],1,,[["ja"],,[1],["ja"]]]
所以你要么必须模仿请求,传递所有必要的参数,要么使用支持动态内容的东西,比如 selenium
您可以尝试这种不同的方法:
if filename.endswith(extension_file):
with open(os.path.join(files_from_folder, filename), encoding='utf-8') as html:
soup = BeautifulSoup('<pre>' + html.read() + '</pre>', 'html.parser')
for title in soup.findAll('title'):
recursively_translate(title)
完整代码请见此处:
或此处:
https://neculaifantanaru.com/en/example-google-translate-api-key-python-code-beautifulsoup.html