【发布时间】:2016-04-09 16:54:26
【问题描述】:
我是编程和 python 的新手,我正在尝试访问 DC 共享单车计划中给定站点的可用自行车数量。我相信最好的方法是使用 BeautifulSoup。好消息是数据可以在这里以一种干净的格式提供:https://www.capitalbikeshare.com/data/stations/bikeStations.xml
这是一个车站的例子:
<station>
<id>1</id>
<name>15th & S Eads St</name>
<terminalName>31000</terminalName>
<lastCommWithServer>1460217337648</lastCommWithServer>
<lat>38.858662</lat>
<long>-77.053199</long>
<installed>true</installed>
<locked>false</locked>
<installDate>0</installDate>
<removalDate/>
<temporary>false</temporary>
<public>true</public>
<nbBikes>7</nbBikes>
<nbEmptyDocks>8</nbEmptyDocks>
<latestUpdateTime>1460192501598</latestUpdateTime>
</station>
我正在寻找 <nbBikes> 值。我有一个我认为是 python 脚本的开始,它将向我显示前 5 个站点的值(一旦我得到控制,我将解决选择我想要的站点)但它不返回任何值。这是脚本:
# bikeShareParse.py - parses the capital bikeshare info page
import bs4, requests
url = "https://www.capitalbikeshare.com/data/stations/bikeStations.xml"
res = requests.get(url)
res.raise_for_status()
#create the soup element from the file
soup = bs4.BeautifulSoup("res.text", "lxml")
# defines the part of the page we are looking for
nbikes = soup.select('#text')
#limits number of results for testing
numOpen = 5
for i in range(numOpen):
print nbikes
我相信我的问题(除了不理解如何在堆栈溢出问题中正确格式化代码)是nbikes = soup.select('#text') 的值不正确。但是,我似乎无法用任何东西代替“#text”来获得任何值,更不用说我想要的了。
我是否以正确的方式处理这个问题?如果是这样,我错过了什么?
谢谢
【问题讨论】:
-
如果您正在获取 xml 格式的数据,您可以使用 xmletree 进行尝试。
-
谢谢!看起来我的问题的很大一部分可能是尝试将 BeautifulSoup 用于 xml。我试图创建一个基本上是这样的新脚本:
import xml.etree.ElementTree as ET tree = ET.ElementTree('https://www.capitalbikeshare.com/data/stations/bikeStations.xml') root = tree.getroot() print root -
这将返回 URL。尝试使用
root1 = ET.fromstring('station') print root1之类的行更深入地了解结构会导致语法错误 -
这也有一些很好的信息:plotsofdots.com/archives/68
标签: python python-2.7 web-scraping beautifulsoup