Python3 - 尝试获取数据属性值时,XPath 查询不会 return 站点的整个列表

Python3 - XPath query does not return entire list from site when attempting to get data attribute values

我的理解有误吗?

import requests
from lxml import etree

url = 'http://www.forexfactory.com/calendar.php?'
date = {'day':'feb9.2017'}

resp = requests.get(url,date)

tree = etree.HTML(resp.text)
dataId = tree.xpath("string(//*[@id='flexBox_flex_calendar_mainCal']//tr[contains(@class,'calendar__row calendar_row')])")

xpath query result in firefox

debug values

围绕您的 XPath 的 string() 函数正在接收第一个 elemnet 的文本。如果删除它,则可以获得查询元素的集合。从那里,您可以遍历元素并访问元素 attrib property:

上的 data-eventid 属性
tree = etree.HTML(resp.text)
for row in tree.xpath("//*[@id='flexBox_flex_calendar_mainCal']//tr[contains(@class,'calendar__row calendar_row')]"):
    print(row.attrib['data-eventid'])

此外,由于您始终访问元素的 data-eventid 属性,因此通过将 [@data-eventid] 添加到XPath:

tree = etree.HTML(resp.text)
for row in tree.xpath("//tr[contains(@class,'calendar__row calendar_row')][@data-eventid]"):
    print(row.attrib['data-eventid'])