我想做网站https://www.bananatic.com/es/forum/games/的刮
并提取标签“名称”,“视图”和“回复”。我有一个大问题,以获得非空内容的“名称”标签。你能帮助我吗?我需要保存只有元素,确实有文字。
这是我的代码,我有三个变量:
每个保存回复中的内容*。
pir保存视图中的内容*
res保存名称中的内容。*
每个数组应该只包含它们拥有的元素。但是在*名称*中保存了写入内容[”“],我不希望它们保存在数组中。x1c 0d1x
require 'nokogiri'
require 'open-uri'
require 'pp'
require 'csv'
unless File.readable?('data.html')
url = 'https://www.bananatic.com/de/forum/games/'
data = URI.open(url).read
File.open('data.html', 'wb') { |f| f << data }
end
data = File.read('data.html')
document = Nokogiri::HTML(data)
per = document.xpath('//div[@class="replies"]/text()[string-length(normalize-space(.)) > 0]')
.map { |node| node.to_s[/\d+/] }
p per
pir = document.xpath('//div[@class="views"]/text()[string-length(normalize-space(.)) > 0]')
.map { |node| node.to_s[/\w+/] }
p pir
links2 = document.css('.topics ul li div')
res = links2.map do |lk|
name = lk.css('.name p a').inner_text
[name]
end
p res
为了解决这个问题,我添加了一个正则表达式,但是我的尝试失败了。我只是用**.to_s[/\w+/]替换了.inner_text**,但是我没有得到它。
👇🏼 现在我有了一个空值数组 还有一些字母***“a”***我不知道它们出现在哪里。
1条答案
按热度按时间3b6akqbq1#
这可能有助于XPath和CSS。
对于您的CSS检查这个:https://kittygiraudel.github.io/selectors-explained/
以下内容将为您提供所需信息
如果你想知道你的数组是从哪里来的,退一步,直接打印出
lk.css('.name p a').to_s
,但真实的的问题是你的选择器刚刚关闭。尽管如此,看看页面的结构,你会更好地与这样的东西:
details
的结果为: