如何使用Ruby抓取动态网站

问题描述 投票:0回答:1

我想抓一个反应网站,其中包含名称和描述的产品。 html结构如下所示:

<h6 class="menu-index-page__item-title" data-reactid=".5c2v.$menuItemContent.0">
  <span data-reactid=".5c2v.$menuItemContent.0.1">Product name</span>
</h6>
<p class="menu-index-page__item-desc" data-reactid=".5c2v.$menuItemContent.1">
  <span data-reactid=".5c2v.$menuItemContent.1.0">
    <span data-reactid=".5c2v.$menuItemContent.1.0.0">
      <span data-reactid=".5c2v.$menuItemContent.1.0.0.0:$0">Description line 1</span>
      <br data-reactid=".5c2v.$menuItemContent.1.0.0.0:$0br">
    <span data-reactid=".5c2v.$menuItemContent.1.0.0.$1">
      <span data-reactid=".5c2v.$menuItemContent.1.0.0.$1.0">
        <span data-reactid=".5c2v.$menuItemContent.1.0.0.$1.0.0">Description line 2</span>
          <span data-reactid=".5c2v.$menuItemContent.1.0.0.$1.0.1">…</span>
      </span>
    </span>
  </span>
</p>

如果描述具有更多或更少的行,则span标记的数量将更改,因此使xpath搜索无效。

每页上每个产品的唯一回报是:描述第一行的.$menuItemContent.1.0.0.0:$0和描述的第二行的.$menuItemContent.1.0.0.$1.0.0

我可以使用例如正则表达式从data-reactid属性中获取这部分吗?

我现在正在使用Nokogiri。

谢谢

ruby-on-rails reactjs dynamic web-scraping nokogiri
1个回答
0
投票

一旦网页完成显示,价格很可能由javascript动态加载。

为了能够抓取动态加载的数据,您需要使用Rails 5支持的Watir等库。

使用Watir,您可以等到所有脚本都被执行并且所有数据都被加载,然后再尝试抓取站点。

© www.soinside.com 2019 - 2024. All rights reserved.