2014-09-03 75 views
2

我手上有一个有趣的问题,我想知道在这里谁是谁更聪明,更有经验的这种事情可以给一些见解。刮MTA地铁数据?

基本上,我需要一对MTA地铁线列车的列车车站的完整列表。这里的数据是如何显示的mta.info网站上,为#3线,作为一个例子

http://web.mta.info/nyct/service/threelin.htm

反正是有,我可以凑这个数据,也许它写入一个文本或CSV文件?如果是这样,我会如何去做这样的事情?我觉得这可能是用Python来完成的,但我不确定,因为我刚刚在2天前开始用Python创建事物(我是一个Java人)。

我试图避免实际上手动将每个文件写入文档,但如果没有其他选择,我想我必须这样做。我需要的只是数据

如果有任何脚本利弊那里比可能会指出我在正确的方向,将不胜感激:)

回答

2

@rjbman指出有一个free API可用。另请参阅:

但是,这里是涉及一种替代解决方案HTML解析使用BeautifulSoup

from bs4 import BeautifulSoup 
import requests 

url = "http://web.mta.info/nyct/service/threelin.htm" 
response = requests.get(url) 

soup = BeautifulSoup(response.content) 
table = soup.find('table', summary='Table of 3 Subway Line Stops') 
stops = [tr('td')[2].text.strip().replace('\n', '').split(' /') 
     for tr in table('tr', height=25)] 
print stops 

打印浑身解数以列表的列表:

[ 
    [u'Harlem-148 Street', u'7 Avenue'], 
    [u'145 Street', u'Lenox Avenue'], 
    ... 
    [u'Van Siclen Avenue', u'Livonia Avenue'], 
    [u'New Lots Avenue', u'Livonia Avenue'] 
] 

为了获取页面内容,我使用了requests模块。

+0

老兄,你是救命恩人!谢谢。 Python是一种非常强大的语言,这真是太神奇了,简直不敢相信我正在进入它!也比Java少冗长。我可以利用你的代码,传递一个URL列表并将列表输出写入CSV或文本文件。干杯! – 2014-09-03 01:35:24

+0

@JadeByfield我仍然会先尝试使用API​​ - 尝试使用我已链接的MTA-API python包装。留下HTML解析方法是最后的手段。谢谢。 – alecxe 2014-09-03 01:40:09

1

短版

这里的所有行和所有属于每一行站的列表:

https://raw.githubusercontent.com/loisaidasam/sub/5369ebc22ef57b932d57066a357fd4cd5a41a402/stops_per_subway_line.txt

长版

我编写了一个用于解析MTA开发者资源数据的小型Python助手库:

https://github.com/loisaidasam/sub

MTA已提供了一些开发人员资源:

http://web.mta.info/developers/

而具体对MTA地铁系统的一些静态的内容,只要你阅读和这些开发者的数据方面遵守:

http://web.mta.info/developers/developer-data-terms.html

直接链接下载静态地铁数据:

http://web.mta.info/developers/data/nyct/subway/google_transit.zip

享受!