ruby-on-rails - 使用 Nokogiri 进行网页抓取 - 一个具体示例

标签 ruby-on-rails nokogiri

寻求帮助来帮助我入门。我正在尝试从该网站抓取最新的游戏信息:

https://www.pinnacle.com/en/odds/match/soccer/england/england-premier-league

我真的很纠结使用 Nokogiri 提取代码的语法。我见过和尝试过的所有示例都使用比这简单得多的网站!

所以如果我有:

class BdcController < ApplicationController

def bdc
    require 'nokogiri'

    require 'openssl'

    doc = Nokogiri::XML.parse(open('https://www.pinnacle.com/en/odds/match/soccer/england/england-premier-league?sport=True', :ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE))

    hometeam = doc.css('table.odds-data.game-name name').text #no idea what this line shoudl be to return e.g the first team in the list (currently Leicester City)

end

@grab=hometeam

end   

它目前返回零(这并不奇怪,因为我无法计算出主队线应该是什么样子!)

有人能给我一个例子,说明主队首发的那句话应该读什么吗?提前致谢!

TD

最佳答案

给你,我用HTTParty首先提取 HTML,然后将其传递给 Nokogiri

url = "https://www.pinnacle.com/en/odds/match/soccer/england/england-premier-league?sport=True"
html = HTTParty.get(url, verify: false).body
parser = Nokogiri::HTML(html, nil, Encoding::UTF_8.to_s)
parser.css('table.odds-data>tbody>tr>td.game-name>span').text

输出

"{{participant.Name}}{{'Draw' | guestlinesDraw}}{{participant.Pitcher}}"

顺便看看源代码,它没有你直接寻找的东西。它由 Javascript 进行插值。

如果你想抓取这样的文本,你应该使用 selenium web 驱动程序并使用不同的策略来解决这个问题。

enter image description here

关于ruby-on-rails - 使用 Nokogiri 进行网页抓取 - 一个具体示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49695304/

相关文章:

ruby-on-rails - 在安装 PostgreSQL 后发现 ruby​​、rails、git 时出现问题

html - ActionMailer,发送带有背景图片的电子邮件

xpath - 可以使用 xpath 选择多个选项吗?

ruby - 如何在 ruby​​ 中使用 mechanize 将字符串插入文本字段?

ruby - 如何让 Nokogiri 的 SAX 解析器不那么严格?

ruby - 使用 Open URI 编写简单的 Ruby 脚本

ruby-on-rails - 如何测试扩展 ActiveSupport::Concern 的模块?

ruby-on-rails - heroku登台还是在heroku中进行新的登台?

ruby-on-rails - 在插件中别名 activerecord 方法

ruby - 将 Nokogiri 输出写入文本文件