Публикации: 39 
	Теми: 2 
	Член от: Apr 2020
	
 Репутация: 
 2
	 
 
	
		
		
		11-03-2021, 13:23 
(Последна редакция: Преди 11-03-2021, 13:38 от zypy.)
		
	 
	
		Благодаря, би ли пояснил  
Код: ('"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)
  
	 
	
	
	
	
 
 
	
	
	
		
	Публикации: 1,665 
	Теми: 19 
	Член от: Nov 2015
	
 Репутация: 
 232
	 
 
	
	
		 (11-03-2021, 13:23)zypy написа:  Благодаря, би ли пояснил  
Код: ('"hour">(.+?)<.+?"name">(.+?)<.+?"type">(.+?)<')
  
и по точно защо е това и как работи , точно тази част  от кода  < .+?" 
  
Всъщност е само .+?, другото е от текста, който парсваме, а .+? означава да вземе всичко между две избрани неща. Т.е. заявката звучи така: 
намери всичко, което е между "hour">(тук вземи стойност 1) и <, след това просто прескачаме с .+? останалия текст, докато стигнем до следващото присвояване на стойност, която е между "name">(тук вземи стойност 2) и <, после пак прескачаме с .+? докато стигнем до третата стойност, която е между "type">(тук вземи стойност 3) и <. И това е всичко. За да вземеш стойност, трябва да я ограничиш между нещо, за това имаме начало, стойност, край. В нашия случай, просто < е първия символ в текста, след стйоността, която искаме да вземем и за това слагам него. Когато .+? е в скоби, означава, че присвояваме стойността на съответното място, а когато не е в скоби, просто прескачаме целия текст до следващото нещо, което ни интересува.
	  
	
	
	
	
 
 
	
	
	
		
	Публикации: 39 
	Теми: 2 
	Член от: Apr 2020
	
 Репутация: 
 2
	 
 
	
		
		
		28-05-2022, 21:05 
(Последна редакция: Преди 29-05-2022, 11:30 от zypy.)
		
	 
	
		Написах един скрипт който извлича програма за даден канал на телевизия от "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
 Може да се направи и с един файл само на питон, но понеже познанията ми за питон клонят към нула го направих както мога   
	 
	
	
	
	
 
 
	
	
	
		
	Публикации: 39 
	Теми: 2 
	Член от: Apr 2020
	
 Репутация: 
 2
	 
 
	
		
		
		11-06-2022, 12:44 
(Последна редакция: Преди 11-06-2022, 12:47 от zypy.)
		
	 
	
		Вместо горният скрипт може използвате този направо от десктопа  ,ако ползвате 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;
  
	 
	
	
	
	
 
 
	 
 |