【问题标题】:Extract dates within text which have occasional <b> tags using XPATH使用 XPATH 提取文本中偶尔带有 <b> 标记的日期
【发布时间】:2012-06-11 02:43:19
【问题描述】:

我在 scrapy shell 中使用以下 xpath:

hxs.select("(//table[@class='result']//font/span[@class='g'])").extract() 我得到以下结果:

[u' www.bbhouse.lk/administration/preside ... 2012-5-31 - ',u' www.listeningexpress.com/speeches/kumar 2012-5-27 - ', u' v.youku.com/v_show/id_XNDgwNjc2MzI=.html 2012-5-27 - ', u' www.kumarkumar.com/ 2012-6-10 - ', u' www.guao.hk/tag/kumar 2012-5-26 - ',你' www.myspace.com/kumarkumar/ 2012-5-27 - ']

我想提取的只是所有这些结果中的日期: 2012-5-31、2012-5-27等

我的问题是有时会出现在两者之间的粗体标签,所以我不能直接使用 text() 函数(另一个问题是我只想要日期)。请注意,我不想像这样使用 re() 函数: hxs.select("(//table[@class='result']//font/span[@class='g'])").re(r'\d+') 等

我只想使用 XPATH 获得结果。此外,Substring 函数仅适用于结果集中的第一个结果,所以这对我来说也不起作用。

我基本上是从http://www.baidu.com/s?wd=kumar中提取缓存日期

【问题讨论】:

  • 那么您要抓取的页面的实际源 HTML / URL 是什么?当我们得到它时,用 XPath 帮助你会容易得多:)
  • 我在最后指定了网址。
  • 如果您要尝试使用 XPath 执行此操作,您将遇到麻烦。 XPath 结果上的正则表达式将是最简单的,因为日期格式相同且易于捕获。
  • stackoverflow.com/questions/17406992/…以上链接可能对您有所帮助

标签: scrapy


【解决方案1】:

如果路径可以包含子节点(如 &lt;b&gt;)并且您需要在所有子节点中包含文本,请使用 string

hxs.select("string(//table[@class='result']//font/span[@class='g'])").extract()

【讨论】:

  • 这仅返回列表中第一项的文本,即。如果我有一个项目列表,每个项目都有上述问题,字符串函数只返回列表中第一个项目的文本/字符串。
  • 对不起,我最近开始使用string函数。我建议在 hxs.select("//table[@class='result']//font/span[@class='g']"): _hxs.select("string(.) ").extract()` 或看这里stackoverflow.com/a/6303276/248296
猜你喜欢
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
  • 2020-06-19
  • 1970-01-01
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
相关资源
最近更新 更多