如何让 Nokogiri 从 Ruby 中的 span 中抓取文本
How to get Nokogiri to scrape text from span in Ruby
我正在尝试使用 Nokogiri 和 Curb 从网站上抓取信息,但我似乎找不到正确的名称/找不到抓取的位置。我正在尝试抓取 API 键,它位于 HTML 代码的底部,如 "xxxxxxx".
HTML代码是:
<body class="html not-front logged-in no-sidebars page-app page-app- page-app-8383900 page-app-keys i18n-en" data-twttr-rendered="true">
<div id="skip-link"></div>
<div id="page-wrapper">
<!--
Code for the global nav
-->
<nav id="globalnav" class="without-subnav"></nav>
<nav id="subnav"></nav>
<section id="hero" class="hero-short"></section>
<section id="gaz-content">
<div class="container">
::before
<div id="messages"></div>
<div id="gaz-content-wrap-outer" class="row">
::before
<div id="gaz-content-wrap-inner" class="span12">
<div class="row">
::before
<div class="article-wrap span12">
<article id="gaz-content-body" class="content">
<header></header>
<div class="header-action"></div>
<div class="tabs"></div>
lass="d-block d-block-system g-main">
<div class="app-details">
<h2>
Application Settings
</h2>
<div class="description"></div>
<div class="app-settings">
<div class="row">
::before
<span class="heading">
Consumer Key (API Key)
</span>
<span>
xxxxxxxxx
</span>
我似乎只能得到 "content" 文本。
我的代码如下:
consumer = html.at("#gaz-content-body")['class']
puts consumer
我不确定要在 select 和 class and/or 范围内键入什么,然后输入文本。我所能得到的就是 Nokogiri 放 "content".
在这种情况下,我们需要找到 span class="heading"
之后和 div class="app-settings"
内部的第二个 span
- 我说得有点笼统,但不是太多。我正在使用 search
而不是 at
来检索两个跨度并获得第二个跨度:
# Gets the 2 span elements under <div class='app-settings'>.
res = html.search('#gaz-content-body .app-settings span')
# Use .text to get the contents of the 2nd element.
res[1].text.strip
# => "xxxxxxxx"
但您也可以使用 at
来定位相同的目标:
res = html.at("#gaz-content-body .app-settings span:nth-child(2)")
res.text.strip
# => "xxxxxxxx"
我正在尝试使用 Nokogiri 和 Curb 从网站上抓取信息,但我似乎找不到正确的名称/找不到抓取的位置。我正在尝试抓取 API 键,它位于 HTML 代码的底部,如 "xxxxxxx".
HTML代码是:
<body class="html not-front logged-in no-sidebars page-app page-app- page-app-8383900 page-app-keys i18n-en" data-twttr-rendered="true">
<div id="skip-link"></div>
<div id="page-wrapper">
<!--
Code for the global nav
-->
<nav id="globalnav" class="without-subnav"></nav>
<nav id="subnav"></nav>
<section id="hero" class="hero-short"></section>
<section id="gaz-content">
<div class="container">
::before
<div id="messages"></div>
<div id="gaz-content-wrap-outer" class="row">
::before
<div id="gaz-content-wrap-inner" class="span12">
<div class="row">
::before
<div class="article-wrap span12">
<article id="gaz-content-body" class="content">
<header></header>
<div class="header-action"></div>
<div class="tabs"></div>
lass="d-block d-block-system g-main">
<div class="app-details">
<h2>
Application Settings
</h2>
<div class="description"></div>
<div class="app-settings">
<div class="row">
::before
<span class="heading">
Consumer Key (API Key)
</span>
<span>
xxxxxxxxx
</span>
我似乎只能得到 "content" 文本。
我的代码如下:
consumer = html.at("#gaz-content-body")['class']
puts consumer
我不确定要在 select 和 class and/or 范围内键入什么,然后输入文本。我所能得到的就是 Nokogiri 放 "content".
在这种情况下,我们需要找到 span class="heading"
之后和 div class="app-settings"
内部的第二个 span
- 我说得有点笼统,但不是太多。我正在使用 search
而不是 at
来检索两个跨度并获得第二个跨度:
# Gets the 2 span elements under <div class='app-settings'>.
res = html.search('#gaz-content-body .app-settings span')
# Use .text to get the contents of the 2nd element.
res[1].text.strip
# => "xxxxxxxx"
但您也可以使用 at
来定位相同的目标:
res = html.at("#gaz-content-body .app-settings span:nth-child(2)")
res.text.strip
# => "xxxxxxxx"