我在空闲时间和Nokogiri一起玩,我担心我真的陷入困境。我正试图解决这个问题,因为今天早上(现在差不多8小时:()看起来我没有进展所有。在website我想要抓住页面上的所有线程。到目前为止,我意识到所有线程的父级都是
<div id="threads" class="extended-small">
每个线程由3个元素组成:
我的问题是如何选择id ='threads'的子元素 并将每个孩子用3个元素推送到数组? 正如你在这段代码中看到的那样,我真的不知道自己在做什么,我非常非常感谢
require 'httparty'
require 'nokogiri'
require 'json'
require 'pry'
require 'csv'
page = HTTParty.get('https://boards.4chan.org/g/catalog')
parse_page = Nokogiri::HTML(page)
threads_array = []
threads = parse_page.search('.//*[@id="threads"]/div') do |a|
post_id = a.text
post_pic = a.text
post_title = a.text
post_teaser = a.text
threads_array.push(post_id,post_pic,post_title,post_teaser)
end
CSV.open('sample.csv','w') do |csv|
csv << threads_array
end
Pry.start(binding)
答案 0 :(得分:3)
看起来原始HTML源代码不包含这些字段,这就是您在使用HTTParty和Nokogiri进行解析时没有看到的原因。看起来他们将数据放在JS变量中更远。试试这个:
require 'rubygems'
require 'httparty'
require 'json'
page = HTTParty.get('https://boards.4chan.org/g/catalog')
m = page.match(/var catalog = ({.*?});var/)
json_str = m.captures.first
catalog = JSON.parse(json_str)
pp catalog
这是否足够强大我会让你决定:)