我设法只打印出h2和h3标签..但是我想要从第一个h2到第二个h2标签的每个元素(这些标签中的数据只与英语有关)。Like in this picture然后,我想查看类似名词,动词以及它们是否存在等类别的数据 - 打印出来。在这里卡住了很多。 这是我到目前为止所写的
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
答案 0 :(得分:0)
您可能希望使用lxml.etree,因为它可以让您使用适合此类事情的xpath表达式。 bs4和etree通常在同一个应用程序中一起使用,bs4用于填充bs4变得容易,而etree用于从xpath中受益的东西。
以下是如何使用etree和xpath选择所需元素的示例。您可以调整它以从每个元素中提取所需的数据。
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可能是一个很大的障碍,但是一旦你绕过它就可以解决它所解决的所有问题。有一个名为" firepath"的萤火虫插件。它允许您检查元素并为其获取一个可能的xpath表达式,并针对您正在访问的页面尝试随机xpath表达式。它对学习和调试有很大帮助。 https://addons.mozilla.org/en-US/firefox/addon/firepath/