首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用bs4只从Wiktionary中提取一部分元素

使用bs4只从Wiktionary中提取一部分元素
EN

Stack Overflow用户
提问于 2015-10-10 18:57:08
回答 1查看 368关注 0票数 0

我只得到了打印出来的h2和h3标签。但是我想要每个元素,从第一个h2到第二个h2标签(这些标记中的数据只与英语相关)。就像在这张照片里,然后,我想检查这些数据中的名词,动词,如果它们存在的话-打印出来。被困在这里真的很难。这就是我到目前为止写的

代码语言:javascript
运行
复制
url = 'https://en.wiktionary.org/wiki/dog'
r = requests.get(url,headers={'User-agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64)'})
data = r.text
soup = BeautifulSoup(data)

content = soup.find_all('span',{'class':'mw-headline'})
for item in content:
    print item.text
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-10 19:59:00

为此,您可能需要使用lxml.etree,因为它将允许您使用xpath表达式,这些表达式非常适合这类事情。bs4和etree经常一起使用在同一个应用程序中,bs4用于bs4提供了方便,而etree用于从xpath中获益的东西。

下面是一个示例,说明如何使用etree和xpath选择所需的元素。您可以对其进行调整以从每个元素中提取所需的数据。

代码语言:javascript
运行
复制
import requests
from lxml import etree

url = """https://en.wiktionary.org/wiki/dog"""
r = requests.get(url)
h = etree.HTMLParser()

tree = etree.fromstring(r.text,h)

xp = """//div[h2[span[@id='English']]]/*[count(preceding-sibling::h2)=1]"""
elements = tree.xpath(xp)

for e in elements:
    inner = e.xpath("""span[@class='mw-headline']""")
    for i in inner:
        print(i.text)

开始使用xpath可能是一个很高的障碍,但是一旦您把精力集中在xpath上,那么它解决的所有问题都是值得的。为firebug提供了一个名为"firepath“的插件,它允许您检查一个元素并为它获取一个可能的xpath表达式,并针对正在访问的页面尝试随机xpath表达式。这对学习和调试有很大的帮助。https://addons.mozilla.org/en-US/firefox/addon/firepath/

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

https://stackoverflow.com/questions/33057777

复制
相关文章

相似问题

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