Vytvoření skriptu pro klikání na odkazy na webových stránkách

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


Re:Vytvoření skriptu pro klikání na odkazy na webových stránkách
« Odpověď #1 kdy: 10. 12. 2020, 16:52:41 »
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.

Re:Vytvoření skriptu pro klikání na odkazy na webových stránkách
« Odpověď #2 kdy: 10. 12. 2020, 19:16:56 »
hele tady máš domácák ty fylozofe ;D ;D :D ;)
Kód: [Vybrat]
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 ::) ::)
lidi postižený environmentálním žalem hele choděj za ekopsycholožkama hele 🤡 💆 🤡 💆