访问和抓取零星可用的维基百科栏目

时间:2018-05-17 05:10:43

标签: ruby web-scraping nokogiri wikipedia wikipedia-api

我需要获取一些数据,但在尝试了一些事情之后我完全陷入困境。

我想访问航空公司和来自Albuquerque_International_Sunport's wiki page的目的地 - 请记住,我将使用此数据浏览预先填写的机场列表。

有多种"类型"航空公司:乘客,货物,有时还有其他(子)部分;其他时间没有:

enter image description here

将自动访问多个机场的文章 - 包括一些鲜为人知的机场。这意味着我需要:

  1. 检查"航空公司&目的地"部分存在
  2. 获取任何表格中的所有数据
  3. 刮掉它;否则什么都不做
  4. 我已尝试使用红宝石wikipedia-client gem但是,.raw_data方法甚至不返回剖面数据:

    enter image description here

    接下来,我去了维基百科的API:除非我弄错了,但它没有返回" section"名字!这看起来不对,但我无法让它发挥作用。

    所以我想离开Nokogiri。我可以抓住并解析页面,但是:

    我将如何检测"航空公司&目的地"部分存在,在部分结束之前获取所有表数据?我怀疑我需要一些棘手的X路径。

    似乎是唯一可行的解​​决方案。

    欢迎任何想法。我可以在这个问题上给予赏金。

    编辑:或许最好以某种方式获取世界上所有航空公司的列表并针对HTML点击它们?似乎它可能在计算上很昂贵。

1 个答案:

答案 0 :(得分:0)

好吧,我不是Nokogiri的专家用户,但也许这可以给你一些想法。

require 'nokogiri'
require 'open-uri'

page = Nokogiri::HTML(open("https://en.wikipedia.org/wiki/Albuquerque_International_Sunport"))

# this is the passenger table
page.xpath('//*[@id="mw-content-text"]/div/table[2]/tr').each do |tr|
  p tr.text()
  puts "-"*50
end

# this is the cargo table
page.xpath('//*[@id="mw-content-text"]/div/table[3]/tr').each do |tr|
  p tr.text()
  puts "-"*50
end