【问题标题】:Searching a website and returning found results搜索网站并返回找到的结果
【发布时间】:2021-03-22 13:23:26
【问题描述】:

使用 Excel Power 查询,可以从以数据库/表格格式提供的网站中提取数据。

许多在线数据库非常庞大,但是它们实现了搜索功能而不是显示整个数据库,这很好,但在尝试有效地定位许多关键字的信息时会造成障碍。

我要搜索的数据库是:

https://apps.who.int/food-additives-contaminants-jecfa-database/search.aspx

是否可以创建关键字/CAS 编号列表并按顺序在数据库中搜索每个关键字并返回找到的数据?这类似于网络抓取,但增加了预先实际搜索数据的步骤。

【问题讨论】:

  • 您是否尝试通过 powerquery 或 xmlhttp 请求或浏览器自动化来执行此操作?什么是示例 CAS/关键字?
  • 在许多方面,它更多地只是探索使用 excel 可以实现什么,如果可能的话,还可以进行电源查询。示例 CAS 编号为 546-93-0,代表 MAGNESIUM CARBONATE
  • 这是一个 aspx 页面,因此一种有效的方法是模仿该页面执行的 POST xhr 请求来搜索数据库并更改 ctl00$ContentPlaceHolder1$txtSearch: 参数

标签: excel vba web-scraping powerquery data-retrieval


【解决方案1】:

完全有可能实现你想要的。 首先,您分析页面,特别是输入框和提交按钮,并找出它们的标识。我为此使用 Chrome 开发工具。只需打开所需的页面并按 F12。

本例中输入框为:

<input name="ctl00$ContentPlaceHolder1$txtSearch" type="text" id="ContentPlaceHolder1_txtSearch">

提交按钮是:

<input type="submit" name="ctl00$ContentPlaceHolder1$btnSearch" value="Search" id="ContentPlaceHolder1_btnSearch">

然后您可以使用 id 来使用 javascript 来寻址框:

var inputBox = document.getElementById('ContentPlaceHolder1_txtSearch');
inputBox.value = 'your search string';

提交按钮的等价物:

var searchButton = document.getElementById('ContentPlaceHolder1_btnSearch');
searchButton.click(); // Start the search

当结果交付后,您需要分析该页面以确定需要哪些 javascript 代码来提取您感兴趣的页面部分。或者您可以转储整个页面:

document.documentElement.outerHTML;

此处用于在网页上运行 javascript 的 Excel VBA 示例代码:

https://github.com/peakpeak-github/libEdge

修改代码以满足您的需要。

【讨论】:

  • 当他们可以运行原生方法时,为什么还要添加额外的依赖项并运行 javascript? Dim searchButton As Object: searchButton = .document.getElementById('ContentPlaceHolder1_btnSearch') 例如,虽然明确键入会更可取。或者这是假设他们会自动化 Edge 而这就是这样做的方法?他们会从哪里运行这个?他们需要构建应用程序吗?
  • 这个想法是探索我可以在多大程度上自动化 Excel 电子表格,从在线搜索数据库中提取数据。
  • 是的,这就是我的回答。查看 VBA 示例。您可以使用我建议自动化 Excel 的 javascript 行来修改它。
  • @QHarr 写道:“当他们可以运行本地方法时,为什么要添加额外的依赖项并运行 javascript?” 好吧,您可以使用 VBA 本地运行旧 IE,或者您可以使用 libEdge 运行现代浏览器(Chrome (=Edge))。包括 VBA、C++ 和 C# 的可运行示例。
猜你喜欢
  • 2023-03-15
  • 2017-08-23
  • 2018-11-22
  • 2014-07-09
  • 2012-11-20
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多