【问题标题】:How to extract a movie-title from BoxOfficeMojo with Xpath如何使用 Xpath 从 BoxOfficeMojo 中提取电影标题
【发布时间】:2018-11-12 14:48:21
【问题描述】:

所以我尝试使用 ImportXML 功能在 Google 表格中导入 电影标题,它希望我给它一个 Xpath-query。问题是 BoxOfficeMojo,它的结构非常奇怪,这让我无法弄清楚如何查询。

在 Google 表格中一切正常,但在为 ImportXML 单元提供链接时,我根本无法生成正确的 Xpath 查询,这给了我电影的标题。

这是我必须处理的:

我尝试了许多不同的查询,包括当我检查网站时 Chrome 会为我生成的一个,但 BoxOfficeMojo 的结构很奇怪,这意味着我不能使用任何逻辑来创建我的查询。我已经用了几个小时了,我最接近得到正确结果的是这个查询

//*[//table[@border = '0']]/td/font/b

这给了我这个结果:

The A-Team

4

我一辈子都想不通,我如何过滤掉电影的标题(在这种情况下是“The A-Team”)。

当我检查网站时,这是 Chrome 建议的 Xpath:

//*[@id="body"]/table[2]/tbody/tr/td/table[1]/tbody/tr/td[2]/font/b

上面的查询不起作用,只是抛出一个错误,好像查询什么都不返回一样……

可能的解决方案 我见过一些成功进行 Xpath 查询的人,他们在其中搜索某个短语,然后返回该短语之后的内容(看这个:python: xpath returns empty list from boxofficemojo.com)。

但是,我似乎无法弄清楚如何搜索电影的标题,因为它没有被任何文字包围。

抓取像这个标题这样简单的东西的全部意义在于,BoxOfficeMojo 上的标题全年都在变化,我需要确切的标题才能抓取和比较 Google 表格中的数据。

希望我已经为人群中的 Xpath 向导提供了足够的信息,以便能够为我提出建议。

提前致谢!

【问题讨论】:

  • 无法为 XPATH 提供帮助,但xpath_emitting_cmd ... args... | sed -n '2p' 将只打印输出的第二行(假设是 linux shell 或终端)。 (如果你真的被卡住了,只是一个想法)。祝你好运!
  • 谢谢。除非我编写脚本,否则我认为这在 Google 表格中不会顺利进行。我会记住的。我有一个 Scrapy 项目正在进行,所以如果我决定以这种方式抓取我需要的数据,它可能会派上用场。
  • 好的,有道理。不太了解 google-sheets 的限制。否则,一个很好的问题。我希望你得到一个 XPath 专家来帮助你。祝你好运。
  • 试试(//table//font/b)[1]//font[@size="6"]/b//font[@face="Verdana"]/b
  • 我只检查了一页。如果字体大小可以,例如56,你可以试试//font[@size > 5]/b。页面上的元素的唯一属性太少,因此定义通用 XPath 可能需要一些时间。您可以尝试将谓词组合为//font[@size > 5 and @face="Verdana"]/b...

标签: xml xpath web-scraping google-sheets


【解决方案1】:

我为几部电影尝试了这个 xpath 并且效果很好

//font[@face="Verdana" and @size="6"]/b

【讨论】:

  • 是的,它适用于很多电影。但是试试这个,你会得到一个错误(或者你会得到跨越多个单元格的导入):boxofficemojo.com/movies/?id=animatedspider-man.htm
  • 哦,是的,因为字体大小是 5... 我注意到电影标题总是在第二个 td 所以这个应该可以工作 //table//td[position()=2]/font[@face="Verdana"]/b
【解决方案2】:

正如 Andersson 所建议的,使用以下查询:

//font[@size="6"]/b

成功了:)

编辑:

事实证明,有些电影的标题格式会导致结果被拆分到多个单元格中,从而破坏了我的电子表格。

但是,此解决方案似乎适用于所有电影,并且将返回一个仅包含标题的单元格:

=JOIN(" ";IMPORTXML(H81;"(//font[@face='Verdana']/b)[2]"))

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 2020-08-13
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    相关资源
    最近更新 更多