使用 Nokogiri 进行网页抓取 - 一个具体示例
Webscraping with Nokogiri - a specific example
寻求帮助以帮助我入门。我正在尝试从该网站抓取最新的游戏信息:
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
它目前 returns 没有(这并不奇怪,因为我不知道主队线应该是什么样子!)
谁能给我一个例子,说明主队首发应该读什么?提前致谢!
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 网络驱动程序并使用不同的策略来解决这个问题。
问题是网站正在使用 angular,所以它的 HTMLS 响应是这样的:
<td class="game-name name">
<span ng-if="participant.Name != undefined">{{participant.Name}}</span>
<span ng-if="participant.IsDraw == true">{{'Draw' | guestlinesDraw}}</span>
<span ng-if="participant.IsDraw == false && !!participant.Pitcher" class="pitcher">{{participant.Pitcher}}</span>
</td>
就像那样,您无法从这些库中检索到值。您将不得不使用一些模拟 Web 浏览器的浏览器,因此它真正呈现 angular 中的内容,您可以从这些变量中获取实际值。无论如何,这并不简单。祝你好运!
寻求帮助以帮助我入门。我正在尝试从该网站抓取最新的游戏信息:
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
它目前 returns 没有(这并不奇怪,因为我不知道主队线应该是什么样子!)
谁能给我一个例子,说明主队首发应该读什么?提前致谢!
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 网络驱动程序并使用不同的策略来解决这个问题。
问题是网站正在使用 angular,所以它的 HTMLS 响应是这样的:
<td class="game-name name">
<span ng-if="participant.Name != undefined">{{participant.Name}}</span>
<span ng-if="participant.IsDraw == true">{{'Draw' | guestlinesDraw}}</span>
<span ng-if="participant.IsDraw == false && !!participant.Pitcher" class="pitcher">{{participant.Pitcher}}</span>
</td>
就像那样,您无法从这些库中检索到值。您将不得不使用一些模拟 Web 浏览器的浏览器,因此它真正呈现 angular 中的内容,您可以从这些变量中获取实际值。无论如何,这并不简单。祝你好运!