xpath如何获取包含或不包含父节点的节点

2024-10-02 02:23:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在构建一个Python脚本,它将从wikipedia page中获得所有奥斯卡最佳影片提名。我为获胜者和被提名者列出了两份不同的名单

from lxml import etree
import requests
r = requests.get('https://en.wikipedia.org/wiki/Academy_Award_for_Best_Picture')
doc = etree.fromstring(r.text)
winners = doc.xpath('//tr[@style="background:#FAEB86"]/td/i/b/a')
nominees = doc.xpath('//tr/td/i/a')

如你所见,我把注意力集中在最后一个节点上,因为它有电影的名字。我可以为每个列表获取所有电影,但是我想使用xpath将它们放在一个列表中。我知道我可以将这两个列表合并在一起,但是电影必须按照它们在wiki页面上出现的顺序

主要问题来自带有@style和/b的节点,它们都位于/a之前。我试着把它们排成一行

winners = doc.xpath('//tr[@style="background:#FAEB86" or not(@style="background:#FAEB86")]/td/i[b or not(b)]/a')

但我只得到了最新的获奖者(月光)在名单的开头,其余的名单只是提名电影

有没有可能把我的两个列表放在一个单独的语句中,或者我必须写一个使电影按正确顺序排列的工作


Tags: import列表doc电影stylewikiwikipediarequests
1条回答
网友
1楼 · 发布于 2024-10-02 02:23:51

我会这样做:

//table[@class="wikitable"]//tr/td[1][not(@rowspan)]//a
  • //table[@class="wikitable"]只选择带有胶片的表
  • //tr/td[1][not(@rowspan)]选择每行的第一个字段,不包括仅列出年份的大字段

相关问题 更多 >

    热门问题