维基百科抽取数据(Scrape Data from Wikipedia)

2019-09-22 10:44发布

我试图找到或建立一个网站刮板是能够经历和在美国找到每一个国家/国家公园与他们的GPS坐标和土地面积沿。 我特地到像Scrapy一些框架,然后我看到有一些网站是专门为维基百科等http://wiki.dbpedia.org/About 。 有什么具体的好处,这些对一个或要么更好的工作来加载信息到在线数据库?

Answer 1:

让我们假设你想分析如页面此维基百科页面 。 下面的代码应该工作。

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)
(...)

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

当然,你也将不得不寻找获得所有想要解析链接的方式。

一个重要的事情 :你知道,如果被允许刮维基百科 ? 我不知道,但你应该看看是不是这样做之前... ;)



Answer 2:

虽然问题是有点老了,可现在另一种选择是,以避免任何刮擦和获得的原始数据直接protectedplanet.net -它包含了从数据保护区的世界数据库和保护区的联合国的名单 。 (披露:我工作了UNEP-WCMC ,即生产和维护数据库和网站的组织。)

它是免费的非商业用途,但你需要注册才能下载。 例如, 此页面让你下载在美国为KMZ,CSV和SHP 22,600保护区(包含纬度,经度,边界,自然保护联盟类别和一群其他元数据)。



Answer 3:

我想这conisder不是最好的办法。

我的想法是去从openstreetmap.org的API(或任何其他基于地理位置API,你可以查询),并请它替你想要的数据。 国家公园可能被很容易被发现。 您可以从像维基百科源得到的名字,然后问ONY的GEO的API给你你想要的信息。

顺便说一句,这有什么错国家公园的维基百科名单 ?



文章来源: Scrape Data from Wikipedia