【问题标题】:Scrape Data from Wikipedia从维基百科抓取数据
【发布时间】:2012-09-13 21:43:56
【问题描述】:

我正在尝试查找或构建一个网络爬虫,该爬虫能够遍历并找到美国的每个州/国家公园及其 GPS 坐标和陆地区域。我研究了一些框架,如 Scrapy,然后我看到有一些专门用于 Wikipedia 的站点,例如 http://wiki.dbpedia.org/About。其中任何一种是否有任何特定优势,或者其中一种更适合将信息加载到在线数据库中?

【问题讨论】:

  • @OscarMederos 这是我想的一个页面示例en.wikipedia.org/wiki/…
  • 复制表格内容 -> 粘贴到电子表格软件中 -> 在具有多条数据的列上使用数据到列功能 -> 保存为您想要的任何格式。

标签: web-scraping wikipedia wikipedia-api


【解决方案1】:

假设您要解析像this Wikipedia page 这样的页面。以下代码应该可以工作。

var doc = new HtmlDocument(); 
doc = .. //Load the document here. See doc.Load(..), doc.LoadHtml(..), etc.

//We get all the rows from the table (except the header)
var rows = doc.DocumentNode.SelectNodes("//table[contains(@class, 'sortable')]//tr").Skip(1);
foreach (var row in rows) {
    var name = HttpUtility.HtmlDecode(row.SelectSingleNode("./*[1]/a[@href and @title]").InnerText);
    var loc = HttpUtility.HtmlDecode(row.SelectSingleNode(".//span[@class='geo-dec']").InnerText);
    var areaNodes = row.SelectSingleNode("./*[5]").ChildNodes.Skip(1);
    string area = "";
    foreach (var a in areaNodes) {
        area += HttpUtility.HtmlDecode(a.InnerText);
    }

    Console.WriteLine("{0,-30} {1,-20} {2,-10}", name, loc, area);
}

我对其进行了测试,它产生了以下输出:

Acadia                         44.35A°N 68.21A°W    47,389.67 acres (191.8 km2)
American Samoa                 14.25A°S 170.68A°W   9,000.00 acres (36.4 km2)
Arches                         38.68A°N 109.57A°W   76,518.98 acres (309.7 km2)
Badlands                       43.75A°N 102.50A°W   242,755.94 acres (982.4 km2)
Big Bend                       29.25A°N 103.25A°W   801,163.21 acres (3,242.2 km2)
Biscayne                       25.65A°N 80.08A°W    172,924.07 acres (699.8 km2)
Black Canyon of the Gunnison   38.57A°N 107.72A°W   32,950.03 acres (133.3 km2)
Bryce Canyon                   37.57A°N 112.18A°W   35,835.08 acres (145.0 km2)
Canyonlands                    38.2A°N 109.93A°W    337,597.83 acres (1,366.2 km2)
Capitol Reef                   38.20A°N 111.17A°W   241,904.26 acres (979.0 km2)
Carlsbad Caverns               32.17A°N 104.44A°W   46,766.45 acres (189.3 km2)
Channel Islands                34.01A°N 119.42A°W   249,561.00 acres (1,009.9 km2)
Congaree                       33.78A°N 80.78A°W    26,545.86 acres (107.4 km2)
Crater Lake                    42.94A°N 122.1A°W    183,224.05 acres (741.5 km2)
Cuyahoga Valley                41.24A°N 81.55A°W    32,860.73 acres (133.0 km2)
Death Valley                   36.24A°N 116.82A°W   3,372,401.96 acres (13,647.6 km2)
Denali                         63.33A°N 150.50A°W   4,740,911.72 acres (19,185.8 km2)
Dry Tortugas                   24.63A°N 82.87A°W    64,701.22 acres (261.8 km2)
Everglades                     25.32A°N 80.93A°W    1,508,537.90 acres (6,104.8 km2)
Gates of the Arctic            67.78A°N 153.30A°W   7,523,897.74 acres (30,448.1 km2)
Glacier                        48.80A°N 114.00A°W   1,013,572.41 acres (4,101.8 km2)
(...)

我认为这是一个开始。如果某个页面失败,你必须看看布局是否改变等。

当然,您还必须找到一种方法来获取您要解析的所有链接。

一件重要的事情:你知道是否允许抓取维基百科?我不知道,但你应该在做之前看看它是否......;)

【讨论】:

  • 当然,您还必须解析 LatitudeLongitude,但这不是抓取任务。
  • @clifgray 嗯,我不认为我理解你的问题。你知道C#吗?那是一个 C# 代码,它使用 HtmlAgilityPack。如果您将该代码复制并粘贴到编译器或其他东西中,它当然不会编译。它甚至没有打开维基百科页面。我只是为您提供一些关于如何在使用 C# 语言和 HtmlAgilityPack 下载文档后解析文档的提示。你是程序员吗?
【解决方案2】:

虽然这个问题有点老了,但目前可用的另一种选择是避免任何抓取并直接从 protectedplanet.net 获取原始数据 - 它包含来自 World Database of Protected AreasUN's List of Protected Areas 的数据。 (披露:我曾在 UNEP-WCMC 工作,该组织生产和维护数据库和网站。)

它可免费用于非商业用途,但您需要注册才能下载。例如,this page 可让您以 KMZ、CSV 和 SHP 格式下载美国的 22,600 个保护区(包含纬度、经度、边界、IUCN 类别和许多其他元数据)。

【讨论】:

    【解决方案3】:

    我认为这不是最好的方法。

    我的想法是从 openstreetmap.org(或您可以查询的任何其他基于 GEO 的 API)访问 API,然后向它询问您想要的数据。国家公园很容易找到。您可以从 Wikipedia 之类的来源获取名称,然后要求任何一个 GEO API 为您提供所需的信息。

    顺便说一句,Wikipedias List of National Parks 有什么问题?

    【讨论】:

    • 维基百科的列表很棒,这正是我想要的,但我想把它放到地图中,并且需要 GPS 坐标。所以你对openstreet进行查询的想法很好,但我试图通过抓取这些数据来节省时间,所以我不必全部剪切和粘贴
    猜你喜欢
    • 2019-07-20
    • 2019-05-24
    • 1970-01-01
    • 2020-07-20
    • 2017-04-30
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多