首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何识别HTML树中语义相关但结构不相关的节点

如何识别HTML树中语义相关但结构不相关的节点
EN

Stack Overflow用户
提问于 2017-01-29 07:28:49
回答 1查看 44关注 0票数 2

我面临着以下问题,因为Wiktionary上的HTML似乎是以一种方式布局的,即每种语言的部分实际上并不是支配相应部分中条目的节点。我只想从一些特定语言的部分抓取数据,比如英语。例如,我可能感兴趣的数据是跨度"IPA“:<span class="IPA" lang="">/dɒɡ/</span>,但是这个跨度会出现几次:

[<span class="IPA" lang="">/dɒɡ/</span>, <span class="IPA" lang="">/dɔɡ/</span>, <span class="IPA" lang="">/dɑɡ/</span>, <span class="IPA" lang="">-ɒɡ</span>, <span class="IPA" lang="">/ˈdɔɡ/</span>, <span class="IPA" lang="">/ˈdɔ.ɡi/</span>, <span class="IPA" lang="">[doɡ]</span>]

但只有一项属于英语部分。然而,标记英语部分(<span class="mw-headline" id="English">English</span>)的跨度不是IPA-span节点的前置节点,因此不清楚如何基于HTML解析收集正确的数据,正如我目前所尝试的那样:

代码语言:javascript
复制
from bs4 import BeautifulSoup
import requests
from sys import argv

def find_IPA(
    r = requests.get('https://en.wiktionary.org/wiki/'+word)
    content = r.content
    soup = BeautifulSoup(content.decode('utf-8','ignore'),'lxml')
    print (soup.findAll('span', {'class' : "IPA"}))


if __name__ == '__main__':
    try:
        find_IPA(argv[1])
    except Exception as e:
        print(format(e))

那么,有没有更好的方法来处理像这样的HTML文件中语义相关性和结构相关性分离的情况?

(示例比特来自此page> https://en.wiktionary.org/wiki/dog)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-29 08:40:48

因为在超文本标记语言中没有结构,部分是扁平的,没有DOM层次结构,一种选择是选择“English”标头,然后迭代所有下一个兄弟元素,直到遇到另一个包含.mw-headline标头的h2元素。

这样做,实际上就是选择了“English”部分中的所有兄弟元素。

在那里,您可以选择所有需要的.IPA元素。

代码语言:javascript
复制
english_header = soup.find('span', {'id': 'English', 'class': 'mw-headline'})

if english_header:
    next_sibling = english_header.parent.find_next_sibling()

    while next_sibling and not (next_sibling.name == 'h2' and next_sibling.select('.mw-headline')):
        for element in next_sibling.select('.IPA'):
            print(element)

        next_sibling = next_sibling.find_next_sibling()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41916046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档