使用Python/Requests/BeautifulSoup高效地抓取网页

2024-05-23 13:41:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从芝加哥交通管理局的网站上获取信息。特别是,我想快速输出前两辆公交车的到达ETA。使用Splinter我可以很容易地做到这一点;但是我在无头Raspberry Pi model 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')

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

enter image description here

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

我并不热衷于美化组/请求;我只想要一些不需要splitter/pyvirtualdisplay开销的东西,因为项目要求我获得一个字符串的短列表(例如,对于上面的图像,[['9','104th/Vincennes','1158','12 MINUTES'],['9','95th','1300','13 MINUTES']])然后退出。在


Tags: textimportidurl网站requests管理局eta
1条回答
网友
1楼 · 发布于 2024-05-23 13:41:06

坏消息

因此,坏消息是,您试图抓取的页面是通过Javascript呈现的。虽然Splitter、Selenium、PhantomJS等工具可以为您呈现这些内容,并为您提供易于清理的输出,但Python+Requests+BeautifulSoup并不能提供现成的结果。在

好消息

从Javascript中提取的数据必须来自某个地方,通常这将以一种更容易解析的格式出现(因为它是为机器读取而设计的)。在

在本例中,您的示例加载this XML。在

现在有了XML响应,它不如JSON好,所以我建议阅读this answer关于与请求库集成的内容。但这将是一个比碎片更轻的批次。在

相关问题 更多 >