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


Оценете темата:
  • 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
 
Отговор
  


Отваряне на: