Forum ŚFiNiA Strona Główna ŚFiNiA
ŚFiNiA - Światopoglądowe, Filozoficzne, Naukowe i Artystyczne forum - bez cenzury, regulamin promuje racjonalną i rzeczową dyskusję i ułatwia ucinanie demagogii. Forum założone przez Wuja Zbója.
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Śmieszny skrypt

 
Napisz nowy temat   Odpowiedz do tematu    Forum ŚFiNiA Strona Główna -> Świat skomputeryzowany
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
szaryobywatel




Dołączył: 21 Wrz 2016
Posty: 6062
Przeczytał: 80 tematów


Płeć: Mężczyzna

PostWysłany: Sob 0:33, 10 Sie 2024    Temat postu: Śmieszny skrypt

Kod:
import requests as r
from bs4 import BeautifulSoup as bs

def vou(dd):
    if len(dd) == 10:
        try:
            dd = dd.replace("."," ").split()
            if int(dd[0]) not in range(1,32) or int(dd[1]) not in range(1,13) or int(dd[2]) not in range(1999,2051):
                return False
            return True
        except:
            return False
    return False

def tok(x):
    wyj = ["[link widoczny dla zalogowanych]", ".", ",", ":", ";", "(", ")",
           "[", "]", "-", "~", '"']
    res = x
    for k in wyj:
        if k in x:
            res = res.replace(k,"")
    return res

def conv(data):
    miesiace = {"Sty":"01", "Lut":"02", "Mar":"03", "Kwi":"04", "Maj":"05",
                "Cze":"06", "Lip":"07", "Sie":"08", "Wrz":"09", "Paź":"10",
                "Lis":"11", "Gru":"12"}
    data = data.replace(".", " ")
    data = data.split()
    data.reverse()
    data = "".join(data)
    for i in miesiace:
        if i in data:
            data = data.replace(i, miesiace[i])
            break
    return int(data)

def dig(string):
    string = string[string.index(", ")+2:string.index("Temat:")-3]
    return string

def liter(name):
    sl = {"ą":"%B1", "ć":"%E6", "ę":"%EA", "ł":"%B3", "ń":"%F1", "ó":"%F3",
          "ś":"%B6", "ź":"%BC", "ż":"%BF",
          "Ą":"%A1", "Ć":"%C6", "Ę":"%CA", "Ł":"%A3", "Ń":"%D1", "Ó":"%D3",
          "Ś":"%A6", "Ź":"%AC", "Ż":"%AF", " ":"+"}
    for i in name:
        if i in sl:
            name = name.replace(i,sl[i])
    return name

def dek(d,p,n):
    for j in range(len(p)-(n-1)):
        tkn = " ".join(p[j:j+n])
        if tkn in d:
            d[tkn] += 1
        else:
            d[tkn] = 1
    return d

#@visan
def t3(url, hm):
    def sel(tag):
        return tag.name == "a" and tag.get("href") == url and tag.parent.name == "td"
    def sel2(tag):
        if isinstance(tag.get("href"), str):
            return tag.name == "a" and nm in tag.get("href") and tag.parent.name == "td"
        return False
   
    strona=r.get(url).content
    soup = bs(strona, "lxml")

    a = soup.find(sel)
    if a == None:
        nm = url[url.index(".html#"):]
        a = soup.find(sel2)
       
    par = a.parent.parent.parent
    [j.extract() for j in par.find_all("td", class_="quote")]
    pbody = par.find_all("span", class_="postbody")
    text = ""
    for j in pbody:
        text += j.get_text(strip=1, separator=" ") + " "
    if "_________________" in text:
        text = text[:text.index("_________________")]
    gan = tok(text).lower().split()
    print(f"{hm}")
    print(url)
    return gan
   
#@ver
def tanda(s, m, od="01.01.1999", do="01.01.2050", dl = 20):
    od, do = conv(od), conv(do)
    def s1(tag):
        return tag.name == "span" and "Forum:" in tag.get_text()
    def s2(tag):
        return tag.name == "a" and tag.get_text() == "Następny"
    def s3(tag):
        if tag.name != "b":
            return tag.name == "a" and ".html#" in tag.get("href")
        return False
    flag, flag2 = False, False
    dyk = {}
     
    soup = s

    while not flag:
        for i in soup.find_all(s1):
            hm = dig(i.get_text())
            dada = conv(hm)
            if dada >= od and dada <= do:
                flag2 = True
                post = t3(i.find(s3).get("href"), hm)
                dyk = dek(dyk,post,m)
            else:
                if flag2:
                    flag = True
                    break
        if not flag:               
            nas_t = soup.find(s2)
            if nas_t == None:
                flag = True
            else:
                nas_h = nas_t.get("href")
                soup = bs(r.get(nas_h).content, "lxml")
               
    gimou = dyk.items()
    gimou = sorted(gimou, key=lambda x: x[1], reverse=True)
    print("\n")
    print(f"Najczęściej używane zwroty (dl = {dl} wierszy):\n")
    for i in gimou[:dl]:
        print(i)
    print("\n")

def ini():
    inp = input("[user_name, ile_słów, od=DD.MM.RRRR, do=DD.MM.RRRR, dl=int], [q] - exit()\n")
    exit() if inp == "q" else ""
    inp = inp.split(",")
    for i in range(1,len(inp)):
        inp[i] = inp[i].replace(" ","")
    ar, kw = (), {}
    if len(inp) not in range(2,6):
        print("Nieprawidłowa ilość argumentów.")
        return None
    wys = "http://www.sfinia.fora.pl/search.php?search_author="
    soup = bs(r.get(wys+liter(inp[0])).content, "lxml")
   
    if len(soup.find_all("span", class_="maintitle")) < 2:
        if "Nie można powtarzać" in soup.find_all("span", class_="gen")[1].get_text():
            print("Śfinia: Nie można powtarzać wyszukiwania w tak niedługim czasie po poprzedniej próbie(...)")
            return None
        print("Nie ma takiego usera, albo podany user nie ma żadnych postów.")
        return None
    ar += (soup,)
    try:
        if int(inp[1]) < 1:
            print("Podano nieprawidłową ilość słów.")
            return None
    except:
        print("Ilość słów musi być liczbą naturalną >= 1")
        return None
    ar += (int(inp[1]),)
    for k in inp[2:]:
        vr = k[:2]
        vl = k[3:]
        if vr == "od" or vr == "do":
            if not vou(vl):
                print("Nieprawidłowy argument/format daty.")
                return None
            kw[vr] = vl
        if vr == "dl":
            try:
                if int(vl) < 1:
                    print("Podano nieprawidłową długość.")
                    return None
                kw[vr] = int(vl)
            except:
                print("Długość musi być liczbą naturalną >= 1")
                return None
    #print(ar,kw)
    if kw.get("od") == None and kw.get("do") == None:
        tn = input("Nie podano ram czasowych, przetworzyć wszystkie posty użytkownika?\n[t] - tak, [dowolny klawisz] - nie\n")
        if tn == "t":
            pass
        else:
            return None
    tanda(*ar,**kw)

if __name__ == "__main__":
    while 1:
        ini()
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum ŚFiNiA Strona Główna -> Świat skomputeryzowany Wszystkie czasy w strefie CET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Regulamin