【发布时间】:2018-11-12 14:48:21
【问题描述】:
所以我尝试使用 ImportXML 功能在 Google 表格中导入 电影标题,它希望我给它一个 Xpath-query。问题是 BoxOfficeMojo,它的结构非常奇怪,这让我无法弄清楚如何查询。
在 Google 表格中一切正常,但在为 ImportXML 单元提供链接时,我根本无法生成正确的 Xpath 查询,这给了我电影的标题。
这是我必须处理的:
给定电影的链接(例如https://www.boxofficemojo.com/movies/?page=main&id=ateam.htm)
Google 表格中的 ImportXML 语句 (https://support.google.com/docs/answer/3093342?hl=en)
- 一个 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 -
我只检查了一页。如果字体大小可以,例如
5或6,你可以试试//font[@size > 5]/b。页面上的元素的唯一属性太少,因此定义通用 XPath 可能需要一些时间。您可以尝试将谓词组合为//font[@size > 5 and @face="Verdana"]/b...
标签: xml xpath web-scraping google-sheets