मैं एक वेबसाइट से ऑडियो स्रोत लिंक लाने के लिए एक स्क्रिप्ट लिख रहा हूँ। मुख्य पृष्ठ को क्रॉल करके उपलब्ध लिंक की एक सूची प्राप्त करें। लेकिन जब मैं जेनरेट किए गए लिंक क्रॉल करता हूं तो मुझे स्रोत नहीं मिल रहा है। (यह <ऑडियो> टैग के href के अंदर होना चाहिए)।

यहाँ मेरा कोड है:

# -*- coding: utf-8 -*-
import urllib.request
from bs4 import BeautifulSoup

def getHTML(st):
    with urllib.request.urlopen(site+'/',timeout=100) as response:
        return response.read() 

site = 'http://www.e-radio.gr'
soup = BeautifulSoup(getHTML(site), 'html.parser')
# Parse Main Page And get links
lst = list()

for a in soup.body.find_all('a', {'class' : 'erplayer'}):
    item = a.get('href')
    if site in item:
        lst.append(item)
    else:
        lst.append(site + item)

print("\n".join(lst))

ऐसा लगता है कि वेबसाइट ठीक से लोड नहीं होती है और यह urllib.request का उपयोग करके ऑडियो स्रोत लोड नहीं करती है। urllib.request के बजाय मैं और क्या उपयोग कर सकता हूं, इसलिए यह पूरे पृष्ठ के लोड होने की प्रतीक्षा करता है। मैंने जो सोचा है वह एचटीएमएल उत्पन्न करने के लिए कुछ बाहरी वेब ब्राउज़र का उपयोग करना था, लेकिन मुझे नहीं पता कि यह कैसे करें

1
Dimitris Karagiannis 5 मई 2017, 12:07
क्या आप एचटीएमएल पोस्ट कर सकते हैं जहां से आपको लिंक प्राप्त करने की आवश्यकता है? ऑडियो लिंक html
 – 
Exprator
5 मई 2017, 12:15
वेबसाइट का लिंक कोड में है। यह सब मेरा कोड है, आप इसे चला सकते हैं
 – 
Dimitris Karagiannis
5 मई 2017, 12:16
ठीक है, लेकिन अगर हम कोड चलाते हैं, तो हम ऑडियो लिंक मुद्रित देखते हैं। समस्या क्या है?..
 – 
alecxe
5 मई 2017, 12:16
अब मुझे प्रत्येक लिंक से एक <ऑडियो> ब्लॉक निकालने की आवश्यकता है और यह पृष्ठ से लौटाए गए एचटीएमएल में नहीं है जैसा कि इसे करना चाहिए
 – 
Dimitris Karagiannis
5 मई 2017, 12:17
e-radio.gr/Real-Fm-978-Athens- i680/live यह href है और मुझे वेबसाइट में कोई ऑडियो टैग नहीं मिला
 – 
Exprator
5 मई 2017, 12:19

1 उत्तर

सबसे बढ़िया उत्तर

यह थोड़ा मुश्किल है, लेकिन हम कदम दर कदम उस तक पहुंच सकते हैं - पहले iframe लिंक का अनुसरण करके खिलाड़ी का HTML प्राप्त करना। फिर, फ़्लैश प्लेयर लिंक प्राप्त करना और उसका अनुसरण करना। फिर, mp3 का लिंक निकालना और स्ट्रीम डाउनलोड करना। वह सब एक ही वेब-स्क्रैपिंग सत्र के तहत:

from urllib.parse import urljoin

import requests
from bs4 import BeautifulSoup


def download_file(session, link, path):
    r = session.get(link, stream=True)
    if r.status_code == 200:
        with open(path, 'wb') as f:
            for chunk in r:
                f.write(chunk)


base_url = "http://www.e-radio.gr"
url = "http://www.e-radio.gr/Rainbow-89-Thessaloniki-i92/live"

with requests.Session() as session:
    session.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36'}
    response = session.get(url)

    soup = BeautifulSoup(response.content, "html.parser")
    frame = soup.find(id="playerControls1")
    frame_url = urljoin(base_url, frame["src"])

    response = session.get(frame_url)
    soup = BeautifulSoup(response.content, "html.parser")
    link = soup.select_one(".onerror a")['href']
    flash_url = urljoin(response.url, link)

    response = session.get(flash_url)
    soup = BeautifulSoup(response.content, "html.parser")
    mp3_link = soup.select_one("param[name=flashvars]")['value'].split("url=", 1)[-1]
    print(mp3_link)

    download_file(session, mp3_link, "download.mp3")
3
Graham 26 सितंबर 2017, 21:41