我正在尝试从此URL https://drive.getbigger.io/#/stores中抓取数据,但是我没有找到我要导出的文本的Xpath,这是生产者的报价。
首先,我尝试使用Google工作表中的importxml函数:
=IMPORTXML(A1;"/html/body/flt-ruler-host/div[23]/p")
并且它给了我N / A错误,“导入的内容为空”
所以我尝试使用附加组件和Parsehub删除此网站,并且每次都给我一个.csv文件,在该文件中我找不到要导出的数据。
而且我也找不到要剪贴的数据的正确Xpath,当我使用检查工具时,数据不在<body>
部分中。
然而,我在importXML函数中使用的Xpath是我在<body>
部分中找到的一些代码,并且该代码与我要提取的文本(生产者的报价)接近。
[我正在寻找的Xpath似乎在<head>
部分中链接了一些javascript代码,当我使用选择工具将页面悬停在页面上以提取数据时,它也会选择整个页面,也许是因为“滚动<div>
”。
所以我想知道该网站是否使用了某种防止刮擦或其他保护措施。
请告诉我是否:
谢谢
由于该网站使用动态呈现(javascript),因此您将无法使用IMPORTXML
公式刮任何内容。
所以是的,Python + Selenium(或其他组合)可以完成这项工作。如果您遵循某些规则(切换用户代理,在请求之间添加暂停),网站将不会阻止您。
您可能需要这些XPath:
产品说明:
//p[1][string-length(text())>5][parent::flt-dom-canvas]
产品价格:
//p[3][contains(text(),"€") and not (contains(text(),","))][parent::flt-dom-canvas]
但是,我认为获取数据的最优雅的方法可能是使用网站所依赖的API。使用GoogleSheets和自定义的ImportJSON脚本,您可以获得类似的内容(作为查询的“ fromage”结果):
它不会立即可用,您将不得不修改脚本的某些部分,因为它不会加载在请求中需要标头的JSON(用POST调用)。简而言之,您需要构造有效负载部分,向请求中添加标头(“ Bearer XXXXX”),并向函数中添加参数以检索结果。
这一切取决于您的目标和预期的输出。
编辑:对于参考(构造有效负载,添加参数),您可以阅读:
https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetchurl,-params
还要查看浏览器开发人员工具的networktab,以查找:API的URL和要发送的正确参数。