python - 当文本未出现在源中时从网站上抓取文本

标签 python html ajax beautifulsoup screen-scraping

我正在尝试从 http://radioplayer.magic.co.uk/live 检索“正在播放”信息使用 Python 和 Beautiful Soup。

我可以在网络浏览器中看到文本,并且可以复制和粘贴它,所以我假设该文本是从某个地方下载的,当我查看 Beautiful Soup 的页面时,我看不到文本,甚至看不到它可能在哪里来自。

我是初学者,所以请温柔!

预先感谢您分享您的知识和经验。

附加信息:我在树莓派上使用 Python 3

最佳答案

正在播放 div 的内容是通过发出 AJAX 请求动态加载的,因此它不包含在您将收到的源页面中。

您可以做的是模仿发出的 ajax 请求并从那里获取响应。

这是实现这一目标的方法:

import requests
import json

main_url = "http://radioplayer.magic.co.uk/live/"
ajax_url = "http://ps1.pubnub.com/subscribe/sub-eff4f180-d0c2-11e1-bee3-1b5222fb6268/np_4/0/14901814159272341?uuid=ef978c6c-2edf-4ff5-910a-39765d038427"
re = requests.get(ajax_url).content
playing_list = json.loads(re)[0]
max_time = 0
playing_now_dict = {}

for playings in playing_list : 
    if int(playings['start_time']) > max_time  : 
        playing_now_dict = playings
print(playing_now_dict.get('title', ''))
print(playing_now_dict.get('artist', ''))

当前打印:

Young Hearts Run Free
Candi Staton

关于python - 当文本未出现在源中时从网站上抓取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42948275/

相关文章:

javascript - 使用 javascript 的 AJAX 与 Php 表单

python - 以索引为键的字典中的长列表/数组

python - django 模板 : how to expand a variable into the string argument for the built-in tag `url`

python - 如何在将其推送到 github 之前在 django 中隐藏 google map api key ?

html - 将绝对定位设置为左侧 :50%, 页面翻倍时

javascript - DOM 表单元素未在 for 循环内更新?

javascript - 表未在 angularjs 中绑定(bind)

javascript - 根据用户输入创建编号表单

python - 定义一个行为类似于打字的自定义类型。Any

html - Facebook 抓取工具不加载动态元标记