Здравейте гостенино! Вход Регистриране


Оценете темата:
  • 0 гласа - средно 0
  • 1
  • 2
  • 3
  • 4
  • 5
EPG за Първа програма,БНТ [Отделена тема]
#11
Благодаря, би ли пояснил 
Код:
('"hour">(.+?)<.+?"name">(.+?)<.+?"type">(.+?)<')

и по точно защо е това и как работи , точно тази част  от кода  < .+?"

Това е окончателният код , хваща програмата  на БНТ 1,2,3,4   само с промяна на  цифрата в url
Код:
#!/usr/bin/python env

import bs4
import re
import sys
from datetime import date
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
my_url='https://bnt.bg/program/bnt1'

today = date.today()
d = today.strftime("%Y%m%d")
s = 'in-tabs-descr tab tab-holder-'

uClient = uReq(my_url)
page_soup = soup(uClient.read(), "html.parser")
uClient.close()

containers = page_soup.find("div" ,{"class":s+d})
con = containers.findAll('span')

data = str(con).replace('><' , '> <')

match = re.compile('"hour">(.+?)<.+?"name">(.+?)<.+?"type">(.+?)<').findall(data)
#print (match)
for hour, name, type in match:
       
       desc = hour.strip() + ' ' + name.strip() + ' - ' + type.strip()
       print (desc)
 
Отговор
#12
(11-03-2021, 13:23)zypy написа: Благодаря, би ли пояснил 
Код:
('"hour">(.+?)<.+?"name">(.+?)<.+?"type">(.+?)<')

и по точно защо е това и как работи , точно тази част  от кода  < .+?"


Всъщност е само .+?, другото е от текста, който парсваме, а .+? означава да вземе всичко между две избрани неща. Т.е. заявката звучи така:
намери всичко, което е между "hour">(тук вземи стойност 1) и <, след това просто прескачаме с .+? останалия текст, докато стигнем до следващото присвояване на стойност, която е между "name">(тук вземи стойност 2) и <, после пак прескачаме с .+? докато стигнем до третата стойност, която е между "type">(тук вземи стойност 3) и <. И това е всичко. За да вземеш стойност, трябва да я ограничиш между нещо, за това имаме начало, стойност, край. В нашия случай, просто < е първия символ в текста, след стйоността, която искаме да вземем и за това слагам него. Когато .+? е в скоби, означава, че присвояваме стойността на съответното място, а когато не е в скоби, просто прескачаме целия текст до следващото нещо, което ни интересува.
[-] The following 1 потребител Харесвания martinstz's post:
  • zypy
 
Отговор
#13
Написах един скрипт който извлича програма за даден канал на телевизия от "dnes точка bg "
Код:
#!/usr/bin/python3

import bs4
import re
import sys
from datetime import date
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
nom = sys.argv[1]
my_url=f'https://www.dnes.bg/tv.php?tv={nom}'


uClient = uReq(my_url)
page_soup = soup(uClient.read(), "html.parser")
uClient.close()

containers = page_soup.find("div" ,{"class":"pad bProgram"})
con = containers.findAll("div" ,{"class":"b5 tv_line clearfix"})

data = str(con).replace('</div>' , ' ').replace(',' , ' ').replace('<span class="now">' , ' ').replace('<div class="now">' , ' ')
match = re.compile('"info">(.+?)<.+?"ttl">(.+?)<.+?', re.S).findall(data)
for info, ttl in match:
       
       desc = info.strip() + ' - ' + ttl.strip()
       print (desc)
 Когато се извиква скрипта се очаква да се добави като аргумент число .При мен работи с допълнителен bash скрипт.
Код:
#!/bin/bash
echo "
btv = 13
btvc = 4725
nova = 42
knova = 20
hbo = 14
hbo2 = 11212
hbo3 = 11213
discovery = 56
bnt1 =11199
bnt2 = 11087
bnt3 = 11234
bnt4 = 11235
dav = 11120
tv1000 = 8429
ort = 11133
movst = 11178
ntv = 11244
nickt = 11256"


let ch=0

#as long as phonex is 0 keep looping
while [ $ch -eq 0 ];
do
    #get channel
        echo "Избери канал"
        read ch

    #make sure the input contains digits
        if [[ $ch =~ [0-9] ]];
        then
        #if it does contain digits
        #change ch value to stop loop
                python3 ~/bin/tvpr $ch # това е пътя и името на горният скрипт
                let ch=1

        else

                clear
                echo "invalid number"
                sleep 1
        fi
done
Може да се направи и с един файл само на питон, но понеже познанията ми за питон клонят към нула го направих както мога Rolleyes
 
Отговор
#14
Вместо горният скрипт може използвате този направо от десктопа ,ако ползвате KDE, преди това инсталирайте от пакетния си менижър kdialog.
Код:
#!/bin/bash



choice=$(kdialog --combobox "Избери телевизия:" "BTV" "BTVCinema" "BTVComedy" "BTVAction" "FOX""FoxLife" "Nova" "KinoNova" "HBO" "HBO2" "HBO3" "TV1000" "Discovery" "Explorer" "Nature" "History" "HistoryCH" "NGW" "NG" "ORT" "MoviStar" "BNT1" "BNT2" "BNT3" "BNT4" "DaVinci" "NikToons" "Nikilodeon" "BulgariaONAIR");

        case "$choice" in
            BTV)
                tv=$(python3 ~/bin/tvpr 13)
                kdialog --msgbox "$tv";
                ;;
            BTVCinema)
                tv=$(python3 ~/bin/tvpr 4725)
                kdialog --msgbox "$tv";
                ;;
            BTVComedy)
                tv=$(python3 ~/bin/tvpr 4404)
                kdialog --msgbox "$tv";
                ;;
            BTVAction)
                tv=$(python3 ~/bin/tvpr 4403)
                kdialog --msgbox "$tv";
                ;;
            Nova)
                tv=$(python3 ~/bin/tvpr 42)
                kdialog --msgbox "$tv";
                ;;
            KinoNova)
                tv=$(python3 ~/bin/tvpr 20)
                kdialog --msgbox "$tv";
                ;;
            FOX)
                tv=$(python3 ~/bin/tvpr 11092)
                kdialog --msgbox "$tv";
                ;;
            FoxLife)
                tv=$(python3 ~/bin/tvpr 36)
                kdialog --msgbox "$tv";
                ;;
            HBO)
                tv=$(python3 ~/bin/tvpr 14)
                kdialog --msgbox "$tv";
                ;;
            HBO2)
                tv=$(python3 ~/bin/tvpr 11212)
                kdialog --msgbox "$tv";
                ;;
            HBO3)
                tv=$(python3 ~/bin/tvpr 11213)
                kdialog --msgbox "$tv";
                ;;
            TV1000)
                tv=$(python3 ~/bin/tvpr 8429)
                kdialog --msgbox "$tv";
                ;;
            MoviStar)
                tv=$(python3 ~/bin/tvpr 11178)
                kdialog --msgbox "$tv";
                ;;
            BNT1)
                tv=$(python3 ~/bin/tvpr 11199)
                kdialog --msgbox "$tv";
                ;;
            BNT2)
                tv=$(python3 ~/bin/tvpr 11087)
                kdialog --msgbox "$tv";
                ;;
            BNT3)
                tv=$(python3 ~/bin/tvpr 11234)
                kdialog --msgbox "$tv";
                ;;
            BNT4)
                tv=$(python3 ~/bin/tvpr 11235)
                kdialog --msgbox "$tv";
                ;;
            BulgariaONAIR)
                tv=$(python3 ~/bin/tvpr 38)
                kdialog --msgbox "$tv";
                ;;
            ORT)
                tv=$(python3 ~/bin/tvpr 11133)
                kdialog --msgbox "$tv";
                ;;
            Discovery)
                tv=$(python3 ~/bin/tvpr 56)
                kdialog --msgbox "$tv";
                ;;
            Explorer)
                tv=$(python3 ~/bin/tvpr 9899)
                kdialog --msgbox "$tv";
                ;;
            Nature)
                tv=$(python3 ~/bin/tvpr 11125)
                kdialog --msgbox "$tv";
                ;;
            History)
                tv=$(python3 ~/bin/tvpr 8117)
                kdialog --msgbox "$tv";
                ;;
            HistoryCH)
                tv=$(python3 ~/bin/tvpr 11158)
                kdialog --msgbox "$tv";
                ;;
            NGW)
                tv=$(python3 ~/bin/tvpr 11112)
                kdialog --msgbox "$tv";
                ;;
            NG)
                tv=$(python3 ~/bin/tvpr 65)
                kdialog --msgbox "$tv";
                ;;
            DaVinci)
                tv=$(python3 ~/bin/tvpr 11120)
                kdialog --msgbox "$tv";
                ;;
            Nikilodeon)
                tv=$(python3 ~/bin/tvpr 11159)
                kdialog --msgbox "$tv";
                ;;
            NikToons)
                tv=$(python3 ~/bin/tvpr 11256)
                kdialog --msgbox "$tv";
                ;;
            *)
                kdialog --sorry "Не си избрал TV";
                ;;
        esac;
 
Отговор
  


Отваряне на: