szaryobywatel
Dołączył: 21 Wrz 2016
Posty: 6062
Przeczytał: 80 tematów
Płeć: Mężczyzna
|
Wysł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()
|
|
|