【问题标题】:Accessing and scraping sporadically available Wikipedia sections访问和抓取零星可用的 Wikipedia 部分
【发布时间】:2018-05-17 05:10:43
【问题描述】:

我需要获取一些数据,但在尝试了一些事情后我完全被难住了。

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

航空公司有多种“类型”:客运、货运,有时还有其他(子?)部分;其他时候没有:

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

  1. 检查“航空公司和目的地”部分是否存在
  2. 获取任何表中的所有数据
  3. 刮掉它;否则什么都不做

我尝试过使用 ruby​​ wikipedia-client gem 但是,.raw_data 方法甚至没有返回部分数据:

接下来,我访问了 Wikipedia 的 API:除非我弄错了,否则它不会返回“部分”名称!这似乎不对,但我无法让它工作。

所以我想这会留下 Nokogiri。我可以很好地抓取和解析页面,但是:

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

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

欢迎任何想法。尽可能在这个问题上悬赏。

编辑:或许以某种方式简单地获取世界上所有航空公司的列表并将它们与 HTML 相匹配会更好?看起来它的计算成本可能很高。

【问题讨论】:

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


【解决方案1】:

好吧,我不是 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

【讨论】:

  • 谢谢。我如何检查航空公司和目的地(以及扩展 - 这些 xpath)是否存在?
  • 您可以检查是否有相关的id,当然如果wiki页面的结构没有改变,这也是有效的。 page.xpath('//*[@id="Airlines_and_destinations"]').empty?
猜你喜欢
  • 2016-08-01
  • 2021-07-16
  • 1970-01-01
  • 2015-11-27
  • 2021-01-26
  • 2014-07-25
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多