【问题标题】:xpath for getting table rows with missing cell images用于获取缺少单元格图像的表格行的 xpath
【发布时间】:2020-08-18 16:20:48
【问题描述】:

我正在尝试使用 Xpath 抓取包含图像和文本的表格的行。只要图像存在as on this 3rd table on this page,一切都会正常工作。但是,当表格中的图像丢失时 as on this page 它不起作用。我需要将图像与表格数据的右行连接起来。

这是我在 google sheet 中使用的 xpath_query 字符串的类型,其中 A1 包含 url。

=importXML(A1,"//tbody//img/@src")
=importXML(A1,"//tbody//tr")

感谢您的帮助。

【问题讨论】:

  • 你想得到什么确切的输出?你能澄清一下吗?
  • 当我写“我需要将图像与表格数据的右行连接”时,我的意思是,例如,我需要知道第 3 行中的图像与第 3 行中的文本一致等...对于每一行。换句话说,我想在电子表格中重现表格的外观。就目前而言,我不能这样做 - 丢失的图像会导致一些图像和行文本错位,出现在不同的行上。

标签: xpath web-scraping google-sheets google-sheets-query google-sheets-importxml


【解决方案1】:

使用 XPath 过滤的更短的替代方案(C2 中的 URL,I27 中的公式):

=ARRAYFORMULA({{"figura:";IMAGE("https://www.patentati.it/"&IMPORTXML(C2;"//tr//img/@src|//tr[not(.//img)]/td[@class='domanda']"))}\QUERY(IMPORTHTML(C2;"table";1);"select Col2,Col3")})

输出:

旁注:我在欧洲。美国地区的公式:

=ARRAYFORMULA({{"figura:";IMAGE("https://www.patentati.it/"&IMPORTXML(C2,"//tr//img/@src|//tr[not(.//img)]/td[@class='domanda']"))},QUERY(IMPORTHTML(C2,"table",1),"select Col2,Col3")})

【讨论】:

  • 我现在已经在 7 页上测试了这个解决方案,其中存在或丢失了不同数量的图像,并且它每次都有效。因此,即使我很欣赏从@player0 学到的一切,我也必须将其标记为正确答案。而且,它似乎(至少对我来说是最简单的)。 (顺便说一句,只有美国版本对我有用;即使我在欧洲,我必须仍然配置美国的东西)。你们两个都教会了我很多。我真的很感谢所有的帮助!
  • 您的解决方案一次效果很好。但是,当我尝试在一张表中对 30 个不同的链接执行此调用时,它需要 30 多分钟(我不知道确切,因为我还在等待)。关于如何管理这个的任何建议?我试着看这里,但它没有帮助我:benlcollins.com/spreadsheets/slow-google-sheets/#13
  • 那是因为你在同一张表上有很多 IMPORTXMLIMPORTHTML 函数。除了减少链接数量之外,我认为您对此无能为力。您可以查看IMPORTFROMWEB 插件,它可能支持更多请求(您需要学习基础知识(使用baseSelector)。定价列表:nodatanobusiness.com/importfromweb/pricing
  • IMPORTFROMWEB 语法:=ARRAYFORMULA({{"figura:";IMAGE("https://www.patentati.it/"&IMPORTXML(C2,"//tr//img/@src|//tr[not(.//img)]/td[@class='domanda']"))},{IMPORTFROMWEB(C2,"//td[@class='domanda' or .='Domanda']")},{IMPORTFROMWEB(C2,"//td[@class='risp' or .='Risposta']")}})
【解决方案2】:

像这样:

=ARRAYFORMULA(IMAGE("https://www.patentati.it"&TRIM(SUBSTITUTE(FLATTEN(
 SPLIT(QUERY(IFNA(REGEXEXTRACT(QUERY(ARRAY_CONSTRAIN(IMPORTDATA(A1), 500, 1), 
 "where Col1 matches '.*zoomImage.*|.*rowspan.*'"), 
 "src=""(.+png)"), "♀♫"),,9^9), "♫")), "♀", ))))


还有一整张桌子:

=ARRAYFORMULA({{"figura"; IMAGE("https://www.patentati.it"&TRIM(SUBSTITUTE(FLATTEN(
 SPLIT(QUERY(IFNA(REGEXEXTRACT(QUERY(ARRAY_CONSTRAIN(IMPORTDATA(A1), 500, 1), 
 "where Col1 matches '.*zoomImage.*|.*rowspan.*'"), 
 "src=""(.+png)"), "♀♫"),,9^9), "♫")), "♀", )))}, 
 QUERY(IMPORTHTML(A1, "table", 1), "select Col2,Col3", 0)})


【讨论】:

  • 这个答案太夸张了,我简直不敢相信。我的问题看起来很简单,但我想我不知道。所以,我印象深刻。谢谢你。另一方面,我认为没有办法将其应用于其他情况。获取文本是如此容易,但将文本与图像匹配显然是在一个完全“另一个领域”。有没有更简单的方法可以将图像与行文本匹配?我不需要优雅。再次感谢。
  • 网页抓取到谷歌表格很少是通用的。大多数网站都充满了 JS 元素,因此对于每个网站来说都是独一无二的。 (在 1999 年,您将通过简单的 xPath/IMPORTXML 获得一切)。这个答案直接使用网站的源代码(通过 IMPORTDATA)来获取正确行上的这些图像
  • 我知道你知道你在说什么,但你能不能试着考虑一些非常简单的事情:在我看来我使用的命令,=importXML(A1,"//tbody// img/@src"),导致行被跳过,因为该行中没有
  • 这正是那里发生的事情。您的简短 IMPORTXML 公式等同于 i.stack.imgur.com/NLLZr.png。并包含跳过的行,我们只需在查询中添加|.*rowspan.*i.stack.imgur.com/27yLC.png
猜你喜欢
  • 2022-01-03
  • 2014-07-08
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多