python - 在 Google 翻译中使用 BeautifulSoup4

标签 python html beautifulsoup bs4

我目前正在浏览 AutomateTheBoringStuff 的 Web Scraping 部分,并尝试编写一个脚本,使用 BeautifulSoup4 从 Google Translate 中提取翻译的单词。

我检查了一个页面的 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 > 跨度 .这再次不返回任何结果。

有人可以向我解释如何将 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)

编辑:如果我将谷歌翻译页面保存为离线 html 文件,然后从该 html 文件中创建一个汤对象,定位元素就没有问题。
import bs4

file = open("Google Translate.html")
soup = bs4.BeautifulSoup(file, "html.parser")
translation = soup.select('#result_box span')
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"

对于您的请求,它返回:
[[["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

关于python - 在 Google 翻译中使用 BeautifulSoup4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38451783/

相关文章:

python - BeautifulSoup 只提取顶级标签

python - flask -socket.error : [Errno 10053] An established connection was aborted by the software in your host machine

python - 在 python openCV 中一次将许 multimap 像读入内存

python - 使用 beautifulsoup get_text()

html - 中心 div 宽度取决于内容

javascript - 单击表单的提交按钮后如何刷新页面?

javascript - 在 HTML 中解析 JavaScript

python - 在 Windows 10 64 位上使用 Python 32 位出现 COM 错误

python - 使用累积概率绘制时遇到死循环

javascript - 使用数据表我想仅使用第一个字母进行搜索