0

有一个网站有两个不同语言的网站。当我查看它们时,网站遵循完全相同的 html 结构,但唯一的区别是标签中包含的链接值(在这种情况下,english 指向英语,chinese 指向中文)。我想知道 BeautifulSoup 中是否有一种方便的方法,以便我可以遍历所有包含文本的叶节点并为翻译创建一个查找表。

代码可能如下所示:

www.foo.com/cn/bar/lang=en
<div href="ww.foo.com/cn/bar1/lang=en"><b>This is awesome</b><b>bye<br>bye</b></div>


www.foo.com/cn/bar/lang=cn
<div href="ww.foo.com/cn/bar1/lang=cn"><b>棒极了&lt;/b><b>拜&lt;br>拜&lt;/b></div>

我想要的输出是这样的:

{'This is awesome': '棒极了' , 'bye': '拜'} (翻译不是那么完美:)

它们不必采用字典的形式,但我认为这将是存储此类信息的最佳类型。

以下是我的一些想法,不确定是否有更好的方法。1. 找到包含英文文本的元素叶子元素,找到选择器之类的东西来唯一定位这个元素,然后在中文网站中,使用选择器(不包括不同的href)来定位对应的元素,然后找到中文翻译。

  1. 可能有一种我不知道的方法,我认为它看起来像这样。BeautifulSoup(src).findAllLeaves(text!='') 获取包含文本的所有离开节点的列表。然后对中文网站做同样的事情,它应该包含与英文相同的元素。然后根据这两个列表构建一个查找字典。

  2. 或者使用 prettify() 以格式良好的方式列出 HTML 树,然后遍历每一行以找到对应的中文。

让我知道我是否已经足够清楚地描述了我的问题,以及如何实现这一点的任何想法都会有所帮助。也欢迎使用高效的 shell 命令(grep、sed、awk)甚至其他语言。

非常感谢!

4

1 回答 1

0

对于您给出的 html 文件结构,

>>> soup = BeautifulSoup(content)
>>> soup.findAll('b') 
[<b>This is awesome</b>, <b>bye<br />bye</b>]

也许,需要几个 findAll 语句来提取不同标签中的文本,例如<p>, <strong>
希望它会有所帮助。

于 2013-07-31T07:10:23.007 回答