繁体   English   中英

当文本未出现在源中时,从网站上刮取文本

[英]Scraping text from a website when the text does not appear in the source

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

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

我是初学者,所以请保持柔和!

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

其他信息:我在树莓派上使用Python 3

通过发出AJAX请求,动态播放Now div的内容,这就是为什么它不包含在您将收到的源页面中的原因。

您可以做的是模仿发出的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和selenium的任务: http : //selenium-python.readthedocs.io/ (这使您可以控制浏览器并手动执行任何操作,例如选择显示的文本)

(警告-Firefox插件对该版本有些挑剔,Ubuntu中的最后一个稳定版本仅适用于45以下的Firefox)

如果您要坚持使用无头浏览器(例如urllibrequests ),则必须在加载网站时监视网络调用,并获取要在python中使用的确切URI(和必要的表单数据?)。

或者,您可以使用python-selenium ,它将像浏览器一样工作。 加载页面后,可以使用driver.page_source通过BeautifulSoup解析源。

另外,如果幸运的话,也许网站上有一个API(json / xml),可让您获取所需的内容,而无需经历解析原始源代码的麻烦。

使用硒通常比实际使用更难安装。 例如,您可以首先在普通PC上尝试以下操作:

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

这会给你类似的东西:

Level 42
Running In The Family

您将需要研究哪种浏览器驱动程序将在Raspberry Pi上兼容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM