Python3 - 尝试获取数据属性值时,XPath 查询不会 return 站点的整个列表
Python3 - XPath query does not return entire list from site when attempting to get data attribute values
- 使用 Python3 删除网站。使用 xpath 查询检索所需的字符串。
- 数据应该查询大约 19 个元素,但是 dataId 变量只显示一个条目。
- 我也在尝试获取数据事件 ID,它位于 /tr 标记本身(包括图像)中。但是代码现在似乎排除了这个 html 标签
我的理解有误吗?
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'])
- 使用 Python3 删除网站。使用 xpath 查询检索所需的字符串。
- 数据应该查询大约 19 个元素,但是 dataId 变量只显示一个条目。
- 我也在尝试获取数据事件 ID,它位于 /tr 标记本身(包括图像)中。但是代码现在似乎排除了这个 html 标签
我的理解有误吗?
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'])