我目前正在学习《自动化无聊工作》中的网页抓取部分,并尝试使用BeautifulSoup4编写提取谷歌翻译中翻译单词的脚本。
我检查了一个页面的HTML内容,其中“Explanation”是翻译后的单词:
<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翻译页面保存为离线HTML文件,然后从该HTML文件创建一个soup对象,那么定位元素就不会有问题。
import bs4
file = open("Google Translate.html")
soup = bs4.BeautifulSoup(file, "html.parser")
translation = soup.select('#result_box span')
print(translation)