Python3 - 尝试获取数据属性值时,XPath查询不会从站点返回整个列表
问题描述:
- 使用Python3来取消网站。使用xpath查询来检索所需的字符串。
- 看起来大约有19个数据应该查询的元素,但dataId变量只能显示一个条目。
- 我也试图获取数据eventid,即在/ tr标记本身(包含图像)。但代码现在似乎排除此html标记
我的理解错了吗?Python3 - 尝试获取数据属性值时,XPath查询不会从站点返回整个列表
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的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中添加[@data-eventid]
:
tree = etree.HTML(resp.text)
for row in tree.xpath("//tr[contains(@class,'calendar__row calendar_row')][@data-eventid]"):
print(row.attrib['data-eventid'])
谢谢!这个伎俩 – Karun