如何从几页搜索结果中收集剪贴数据?

时间:2018-10-07 17:17:52

标签: xpath web-scraping

我对使用Xpaths和Google表格功能IMPORTXML(URL; Xpath)从具有多个搜索结果页面的URL进行网络抓取有疑问: 我要从中提取数据(特别是每个结果的链接)的页面是:

http://tools.morningstar.es/es/fundscreener/results.aspx?LanguageId=es-ES&Universe=FOESP%24%24ALL&Rating=0%7C0%7C1%7C1%7C1&CategoryReturn=0%7C0%7C0%7C0%7C0%7C1%7C0%7C0&AnalystRating=0%7C0%7C1%7C1%7C1%7C0%7C0&CurrencyId=EUR&URLKey=2nhcdckzon

为阐明我的解释,我通过链接附加了几张图片:

Webpage elements to get (list of links)

Number of results to display, at the bottom of the webpage

要获取链接,我尝试使用以下Xpath:

//td[@class='msDataText gridFundName Shrink']/a/@href

在页面底部,您可以选择要显示的结果数,但是可以选择不同数量的要显示的结果,也可以选择高级URL,但URL不变。

由于无论显示的结果数目如何,URL都不会改变,并且页码我仅使用IMPORTXML()获得前20个结果。这些是我的疑问:

  1. 有什么方法可以提取超过20个链接?
  2. 如果无法使用Google表格完成此操作,有人可以建议替代方法吗?
  3. 最终,我想从这些链接(可能为2000-3000)中提取每个链接的大约30个数据,我已经确定了它们的Xpath。您能否建议使用任何免费的网络抓取工具来处理如此大量的数据。由于大量其他选择,我有些失落:octoparse,kimonolabs ...

非常感谢您能提供的任何帮助。谢谢

1 个答案:

答案 0 :(得分:0)

该网站似乎使用了动态导航系统,通过单击该表的下一个/上一个分页结果可以加载新元素,而无需更改URL,即在后台通过AJAX调用按需加载内容。

浏览器自动化(尤其是Selenium)是此处的常规建议,因为它使您可以在不模拟加载新内容所需的AJAX调用的情况下剪贴数据。可以对Selenium进行编程,使其根据需要多次单击下一个按钮,以获取站点上所有可用的页面并获取数据。显然,这需要一些编程。我不知道你的喜好是什么。许多人都使用question中所示的Python。