【问题标题】:xpath query not grabbing any information - pythonxpath 查询没有获取任何信息 - python
【发布时间】:2016-08-24 17:40:47
【问题描述】:

我正在尝试从this page 获取一些信息

但是我无法获取三条数据。第一个是等级,即靠近顶部的 YDS 旁边的“5.6”。第二个是 FFA: P.Adamson, M.Peck 2008 年 7 月,列在 FA: 旁边。第三个是繁体,30',列在类型旁边。

我的 xpath 查询是

grade = tree.xpath('//[@id="rspCol800"]/div[1]/div[1]/span/table/tbody/tr[2]/td[2]/text()')

length = tree.xpath('//*[@id="rspCol800"]/div[1]/div[1]/span/table/tbody/tr[1]/td[2]/text()')

first_ascent = tree.xpath('.//*[@id="rspCol800"]/div[1]/div[1]/span/table/tbody/tr[3]/td[2]/text()/text()')

我尝试从页面上的几个不同位置获取成绩,因为它列在几个位置,但还没有这样的运气。任何帮助将不胜感激

【问题讨论】:

  • 您尝试过的查询会发生什么情况?他们发现不正确的结果吗?他们什么都没有发现吗?它们会产生错误吗?
  • 他们什么也没找到。我正在输出到一个 txt 文件,从页面抓取的其他信息将以 [text here] 的形式出现,但这三个字段只产生 []

标签: jquery python html css xpath


【解决方案1】:

不确定您使用的是什么框架,但这似乎可行:

from lxml import html
import urllib2
req = urllib2.Request('http://www.mountainproject.com/v/my-other-woman-is-a-hand-crack/107465606')
response = urllib2.urlopen(req)
data = response.read()
tree = html.fromstring(data)
grade = tree.xpath('//div[@id="rspCol800"]/div[1]/div[1]/span/table/tr[2]/td[2]/span/text()')[1]
length = tree.xpath('//*[@id="rspCol800"]/div[1]/div[1]/span/table/tr[1]/td[2]/text()')[0]
first_ascent = tree.xpath('.//*[@id="rspCol800"]/div[1]/div[1]/span/table/tr[3]/td[2]/text()')[0]

print grade, length, first_ascent

【讨论】:

  • 是的,这行得通!我的成绩查询只有一个问题,它不仅产生了 5.6 的成绩,而且还产生了所有其他隐藏的成绩(该字段中隐藏着多个成绩)​​,以及像 /xa0 之类的一堆字符。我刚刚解析通过字符串获取它在 /xa0 之后遇到的第一个 (5.numberhere)。同样对于框架,我使用的是 lxml 和请求,所以我的前几行最终有点不同,但我认为它没有改变任何东西非常感谢!
  • 嗯,'grade' 行末尾的 '[1]' 似乎为我抓住了一个 5.6。也许,请求库以不同的方式对页面进行转码。您还可以执行 data = data.replace(" ", "") 来摆脱不需要的空格(这就是 \xa 的含义)。或者做grade=grade.strip()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多