当id使用Nokogiri包含特殊字符时,是否有一种方法可以删除url /文本?

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

我正在尝试从此SITE中删除一些数据。我是Nokogiri的新手,但是我在Stackoverflow上阅读了很多DOC和主题。而且我不知道如何解决我的问题...

我开始构建我的应用程序的结构:

require 'nokogiri'
require 'open-uri'

class Scrap

def first(strona)
    @page = Nokogiri::HTML(open(strona))
end

def marka(css)
    @page.css(css).text
end

end
x = Scrap.new

x.first("https://webcat.schaeffler.com/web/schaeffler/pl/PKW/index.xhtml")
puts x.marka("a#searchByConstraints:form:j_idt491:0:j_idt493:0:j_idt495")

它应该放“ ABARTH”,但是id包括特殊字符,例如“ ”,而我得到的唯一东西就是这个错误:

unexpected '0' after ':' (Nokogiri::CSS::SyntaxError)

我在stackoverflow上找到了解决方案。因此,我将应用程序的最后一行更改为:

puts x.marka('*[id="searchByConstraints:form:j_idt491:0:j_idt493:0:j_idt495"]')

它返回一个空字符串,我不知道为什么...

目标站点上的元素看起来:

<a id="searchByConstraints:form:j_idt491:0:j_idt493:0:j_idt495" href="/web/schaeffler/pl/PKW/3854/applicationSearch.xhtml" title="ABARTH">ABARTH</a>

因此必须做错了什么,或者在我的情况下不起作用。

有人知道如何解决吗? (我想获取文本和网址)

所有问候! &&谢谢!

css ruby xpath web-scraping nokogiri
1个回答
0
投票

这些ID是非标准CSS,因此您无法像普通ID一样搜索它们,就像<div id="this-is-normal">一样,因此您需要在div ID中匹配一个模式。

我认为这是您所需要的:

@page.css('div[id^="searchByConstraints:form:j_idt491"]')

所以对你来说是

x.marka('div[id^="searchByConstraints:form:j_idt491"]')

附带说明,我建议您将班级命名为ScrapperScrape还有一种更好的做法是在类后命名实例变量,因此

scrapper = Scrapper.new
scrapper.marka('blah') # etc. maybe you mean marker?
© www.soinside.com 2019 - 2024. All rights reserved.