我正在尝试使用Python和Beautiful Soup从http://radioplayer.magic.co.uk/live检索“正在播放”信息。
我可以在网络浏览器中看到该文本,并且可以复制并粘贴它,所以我假设这个文本是从某个地方下载的,当我从Beautiful Soup查看页面时,我看不到文本,甚至可能在哪里来自。
我是初学者所以请温柔!
提前感谢您分享您的知识和经验。
其他信息:我在树莓派上使用Python 3
答案 0 :(得分:2)
正在播放 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
答案 1 :(得分:0)
这似乎是python和selenium的任务:http://selenium-python.readthedocs.io/(这使您可以控制浏览器并执行您可以手动执行的任何操作,例如选择显示的文本)
(Warinng - Firefox插件在版本方面有些挑剔,Ubuntu中的最后一个稳定版本仅适用于最多45个版本的Firefox)
答案 2 :(得分:0)
如果您想坚持使用无头浏览器(例如urllib
,requests
),那么您必须在加载网站时监控网络呼叫并获取确切的URI(和必要的表格)数据?)在python中使用。
或者您可以使用python-selenium
,它与浏览器完全相同。加载页面后,您可以使用driver.page_source
通过BeautifulSoup解析源代码。
此外,如果你很幸运,也许该网站有一个API(json / xml),可以让你获取你想要的东西,而无需解决原始来源的麻烦。
答案 3 :(得分:0)
使用硒通常比实际使用更难。例如,您可以先在普通PC上尝试以下操作:
sem_t sem[3];
// ...
while(1) {
for(n = 0; n < 3; n++) {
rc=sem_post(&sem[n]);
assert(rc==0);
}
sleep(1);
}
这会给你类似的东西:
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
url = "http://radioplayer.magic.co.uk/live/"
browser = webdriver.Firefox(firefox_binary=FirefoxBinary())
browser.get(url)
soup = BeautifulSoup(browser.page_source, 'html.parser')
playlist = soup.find(id='playlist')
print playlist.find('span', class_='artist').text
print playlist.find('span', class_='title').text
您需要调查哪个浏览器驱动程序将与Raspberry Pi兼容。