【问题标题】:Efficient web page scraping with Python/Requests/BeautifulSoup使用 Python/Requests/BeautifulSoup 进行高效网页抓取
【发布时间】:2015-10-23 14:55:33
【问题描述】:

我正在尝试从芝加哥交通管理局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')

不能解决问题。所有的数据字段都是空的(好吧,有 &nbsp)。例如,当页面如下所示:

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

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

【问题讨论】:

    标签: python python-2.7 web-scraping beautifulsoup splinter


    【解决方案1】:

    坏消息

    因此,坏消息是您尝试抓取的页面是通过 Javascript 呈现的。虽然像 Splinter、Selenium、PhantomJS 等工具可以为您呈现此内容并为您提供易于抓取的输出,但 Python + Requests + BeautifulSoup 并不能开箱即用。

    好消息

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

    在这种情况下,您的示例将加载 this XML

    现在有了 XML 响应,它不如 JSON 好,所以我建议阅读 this answer 关于与请求库集成的信息。但它会比 Splinter 轻量级很多

    【讨论】:

    • 优秀的捕获。我浏览了页面上的 javascript,但无法确定动态信息的来源。我感谢 XML 参考。
    猜你喜欢
    • 1970-01-01
    • 2020-10-04
    • 2021-01-31
    • 1970-01-01
    • 2018-10-16
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    相关资源
    最近更新 更多