如何使用XPath从路透社财报页面提取31-Dec-19日期?
如何用XPath提取IMAX年报中的日期31-Dec-19?
嘿,我看你在爬路透社IMAX的年度利润表时,成功拿到了报表的指标列名,但卡在提取目标日期31-Dec-19上了。我帮你梳理下问题,给你几个实用的XPath方案:
你之前的XPath //th/span/text() 只定位了报表的指标名称表头,而日期其实在另一个表头分组里,所以自然拿不到目标内容。下面是针对路透社这个页面结构的解决方案:
方案一:利用属性精准定位日期列
路透社的财报日期列会带有专属的data-testid属性,用这个定位最可靠,不容易因为页面样式变动失效:
//th[contains(@data-testid, "financials-date-column")]/span/text()
把这个XPath加到你的代码里,就能直接拿到所有年度日期,其中就包含你要的31-Dec-19。
方案二:通过表格结构定位
如果上面的属性定位失效(比如网站更新了属性名),可以通过表格的层级结构来定位:
//div[contains(@class, "financials-table")]//thead//th[not(contains(@class, "sticky"))]/span/text()
这个路径的逻辑是:
- 先找到包裹财报表格的外层容器
div.financials-table - 定位表格的表头区域
thead - 排除掉固定在左侧的指标列表头(带
sticky类的),剩下的就是日期列的表头
完整代码示例
把日期提取的逻辑整合到你的代码里:
import requests from lxml import html # 请求页面 response = requests.get('https://www.reuters.com/companies/IMAX.P/financials/income-statement-annual') tree = html.fromstring(response.content) # 提取日期 dates = tree.xpath('//th[contains(@data-testid, "financials-date-column")]/span/text()') # 提取指标列名 columns = tree.xpath('//th/span/text()') print("提取到的日期列表:", dates)
运行后,dates列表里就会包含你需要的31-Dec-19啦。另外,这个页面是静态渲染的,用requests直接请求就能拿到完整内容,不需要额外处理JS加载的问题。
内容的提问来源于stack exchange,提问作者bkcollection
相关产品推荐
相关产品推荐

