Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: kingulator 10. 12. 2020, 16:20:38
-
Dobry den,
potřeboval by jsem vytvořit skript, který by kliknul na náhodný článek na wikipedii a pak klikal na první odkaz v daném článku do doby než by se dostal na stránku o filosofii.
Problém je, že se po chvilce vždy zacyklím. První odkaz mě pošle na nějaký článek a odkaz v něm zpět na zmiňovaný první článek.
Prý existují různé typy odkazů z kterých jsou některé validní a některé ne. Na internetu jsem k tématu našel jen tohle: https://stanosimo.eu/4-typy-internetoveho-odkazu-hyperlinku/ z čehož jsem nepochopil, který typ odkazu je který.
Mohli byste mi poradit? Předem děkuji
-
Prý existují různé typy odkazů z kterých jsou některé validní a některé ne.
Ne.
Problém je, že se po chvilce vždy zacyklím. První odkaz mě pošle na nějaký článek a odkaz v něm zpět na zmiňovaný první článek.
Mohli byste mi poradit? Předem děkuji
Nadefinujte si jinak pravidla pro klikání. Např. tak, že nebude klikat na první odkaz, ale na první odkaz, který vede na stránku, kterou jste ještě nenavštívil. Také byste se měl nějak postavit k tomu, že některé odkazy na Wikipedii se přesměrovávají. Takže můžete kliknout na ještě nenavštívený odkaz, ale dostanete se na již navštívenou stránku. Pak máte dvě možnosti – buď se vrátit zpět na předchozí stránku a hledat další nenavštívený odkaz. Nebo pokračovat z té stránky, kde už jste jednou byl, prvním nenavštíveným odkazem. Bude to jiný odkaz, než kterým jste odešel poprvé, takže se nezacyklíte.
-
hele (https://gitlab.com/Gretulililinka/zdrojacky-ruzny-nahromadeny/-/blob/master/wiki_walker.py) tady máš domácák ty fylozofe ;D ;D :D ;)
import requests
from bs4 import BeautifulSoup
import queue
# prolejzá wikipedii a dycky se snaží přejít na první nenaštívenej další vodkaz na nějakej wiki článeček noa ty články jakoby počitá dokavaď nenajde nějakej vo fylozofii nebo už nemá jako kam jít jinam :O ;D
kolikaty_clanek = 1
url = 'https://en.wikipedia.org/wiki/Special:Random'
posledni_navstivene = queue.Queue(
1000) # si myslim že je jakože dost nepravděpodobný že budem cyklovat pokaždý ve stejný tisícovce článečků :D ;D
while True:
# stáhnem stránku z url a uděláme z ní BeautifulSoup oběkt
stranka = BeautifulSoup(requests.get(url).content, features='lxml')
titulek = stranka.find('h1', {'id': 'firstHeading'}) # titulek stránky
# zda je jakoby vo tý fylofozii daná stránka
# najdem div kde sou uvedený kategorie danýho článku
kategorie = stranka.find('div', {'id': 'catlinks'})
for link in kategorie.findAll('a'):
if 'Category:Philosophy' in link['href']:
# pokud tam je vodkaz na fylozofii tak jako asi máme hotovo
print('našli sme fylozfii!!!!!!!!!!!!')
print(f'ato na {kolikaty_clanek}. článku')
quit()
# pokud ne najdem vodkaz a deme dál
# najdem div s obsahem stránky
wiki_block = stranka.find('div', {'id': 'mw-content-text'})
linky = wiki_block.findAll('a')
# hledáme takovej link aby měl jenom jeden jedinej attribut 'href'
# vostatní mužou bejt vobrázky titulky nebo něco divnýho
# pokuď vobsahujou znak ':' tak taky jako zahazujem
next_url = None
for link in linky:
if not link.has_attr('class'):
if 'wikimedia' in link['href'] or ':' in link['href']:
# link je špatnej/divnej takže berem další v pořadí
continue
# zkusíme sestavit novou url a kouknout jestli sme tam nááhodou už nebyli
# do fronty naštívenejch
next_url = 'https://en.wikipedia.org' + link['href']
if next_url in posledni_navstivene.queue:
next_url = None
continue
# print(link)
break
# pokud nenajdem žádnej validní link
if next_url is None:
print('neni kam pokracovat!!!!!!! :O :O :\'( :\'(')
print(f'selhali sme na {kolikaty_clanek}. radku')
quit()
print(f'ze stránky s titulkem: {titulek.text} přecházíme na \'{next_url}\'')
# z fronty musíme zahazovat ručně
if posledni_navstivene.full():
posledni_navstivene.get()
# strčíme naštívenou do fronty
posledni_navstivene.put(next_url)
url = next_url
kolikaty_clanek += 1
print('\'oop je uplně na houby\' řek aristoteles platonusoj ale pppppššššššššš :O :O :D ;D')
btw člověk co vyrobí blogísek kde je jakoby nejmíň půlka textovýho vobsahu udělaná v máznutým nečitelným <img> vobrázku by měl bejt rači sticha a rád žeje rád....................... :o :o ::) ::)