3

我正在尝试从芝加哥交通管理局bustracker网站获取信息。特别是,我想快速输出前两辆公共汽车的到达 ETA。我可以很容易地用 Splinter 做到这一点;但是,我在无头 Raspberry Pi 模型 B 和 Splinter plus pyvirtualdisplay 上运行此脚本会导致大量开销。

类似的东西

from bs4 import BeautifulSoup
import requests

url = 'http://www.ctabustracker.com/bustime/eta/eta.jsp?id=15475'
r = requests.get(url)
s = BeautifulSoup(r.text,'html.parser')

不成功。所有的数据字段都是空的(好吧,有  )。例如,当页面如下所示:

在此处输入图像描述

当我使用 Splinter 执行类似搜索时,这个代码片段s.find(id='time1').text给了我u'\xa0'而不是“12 分钟”。

我不喜欢 BeautifulSoup/requests;我只想要一些不需要 Splinter/pyvirtualdisplay 开销的东西,因为该项目要求我获得一个简短的字符串列表(例如,对于上图,[['9','104th/Vincennes','1158','12 MINUTES'],['9','95th','1300','13 MINUTES']])然后退出。

4

1 回答 1

10

坏消息

所以坏消息是你试图抓取的页面是通过 Javascript 呈现的。虽然像 Splinter、Selenium、PhantomJS 之类的工具可以为您渲染它并为您提供易于抓取的输出,但 Python + Requests + BeautifulSoup 并没有为您提供开箱即用的功能。

好消息

从 Javascript 中提取的数据必须来自某个地方,并且通常这将采用更易于解析的格式(因为它被设计为由机器读取)。

在这种情况下,您的示例会加载此 XML

现在有了 XML 响应,它不如 JSON 好,所以我建议阅读这个关于与请求库集成的答案。但它会Splinter 轻得多。

于 2015-07-31T20:27:09.337 回答