首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Waitr::Browser显示动态网站内容供Nokogiri抓取

如何使用Waitr::Browser显示动态网站内容供Nokogiri抓取
EN

Stack Overflow用户
提问于 2020-01-19 13:13:24
回答 2查看 285关注 0票数 1

我创建了一个在各种求职网站上寻找工作的刮板。在大约80%的网站上,它可以工作,但我很难让它在其余的页面上工作。

我认为原因是一些页面上有JavaScript,它可以生成动态内容。因此刮刀失灵了。因此,我尝试了Watir以及机械化,但它仍然不起作用。

https://www.climeworks.com/careers/就是一个例子。任何人都能刮掉吗?

这是我的Watir scraper:

代码语言:javascript
复制
def watirscraper
  require 'nokogiri'
  require 'watir'

  puts "starting newscraper"
  opts = {
      headless: true
    }

  # if (chrome_bin = ENV.fetch('GOOGLE_CHROME_SHIM', nil))
  #   opts.merge!( options: {binary: chrome_bin})
  # end

  browser = Watir::Browser.new :chrome, opts

  browser.goto self.career_url
  company = self
  job_url = self.career_url

  html_doc = Nokogiri::HTML.parse(browser.html)
  jobtitle = html_doc.css(":contains('Developer'):not(:has(:contains('Developer')))").map(&:text)
  puts jobtitle

end
EN

回答 2

Stack Overflow用户

发布于 2020-01-19 13:24:25

在拉取内容之前,您需要等待页面稳定下来。许多客户端应用程序至少需要几秒钟才能启动,甚至更多。

重构的一种方法是:

代码语言:javascript
复制
def wait_for_content(browser, selector)
  html_doc = Nokogiri::HTML.parse(browser.html)

  return if (html_doc.css(selector).first)

  sleep(5)

  # May want to have a limit here so it doesn't spin forever
  redo
end

你可以这样称呼它:

代码语言:javascript
复制
wait_for_content(browser, ":contains('Developer'):not(:has(:contains('Developer')))")

jobtitle = ...

或者其他类似的东西。

票数 2
EN

Stack Overflow用户

发布于 2020-01-19 14:59:46

首先,您在Watir代码中使用了一个孤立的Nokogiri语句,比如Nokogiri::HTML.parse(browser.html)。当您使用这样的代码时,您不能对Watir元素调用方法。

您在这里所要做的就是安装Watir gem,这是一个用于watigiri的插件。安装完成后,您可以在element对象上使用text!方法,该对象会在内部自动使用Nokogiri。但此方法并不等待页面完全加载,

如果页面是在您抓取页面时加载的,则必须在元素上使用text

Watir使用Nokogiri时,您写道:

代码语言:javascript
复制
b.element(name: "something").text!

Watir在您编写以下代码时使用Selenium:

代码语言:javascript
复制
b.element(name: "something").text

有关更多信息,请参阅Watigiri

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59807348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档