Jak sledovat odkazy na webu pomocí Pythonu

Obsah

Dnes vás budu učit procházet odkazy na stránce s Pythonem (škrábání webu), to může být velmi užitečné pro automatické sledování obsahu na webových stránkách a nemusíte to dělat ručně. V programu, který přináším, je každý odkaz získán čtením html, můžete program upravit tak, aby vyhledával určitý obsah a zobrazoval pouze odkazy, o které máte zájem.

Můžete také provádět škrábání webu pomocí souboru robots.txt nebo souborů Sitemap, které webové stránky mají.

PoznámkaZobrazený kód funguje v Pythonu 3.x, pokud ho chcete spustit ve verzi 2.x, budete muset provést malé úpravy.

Zde je kód:

 fronta importu import urllib.request import re from urllib.parse import urljoin def download (page): try: request = urllib.request.Request (page) html = urllib.request.urlopen (request) .read () print ("[ *] Stáhnout OK >> ", stránka) kromě: print ('[!] Chyba při stahování', stránka) návrat Žádný návrat html def crawlLinks (stránka): searchLinks = re.compile ('] + href = ["'] ( . *?) ["']', re.IGNORECASE) queue = queue.Queue () queue.put (page) visit = [page] print (" Searching for links in ", page) while (queue.qsize () > 0): html = download (queue.get ()) if html == None: continue links = searchLinks.findall (str (html)) for link in links: link = urljoin (page, str (link)) if ( odkaz nebyl navštíven): queue.put (odkaz) navštívil.připojit (odkaz), pokud __name__ == "__main__": crawlLinks ("http://www.solvetic.com") 
První věc, kterou uděláme, je jáimportujte potřebné knihovny, pro regulární výrazy (re), použít frontu (frontu), vytvářet požadavky a číst stránku (urllib.request) a pro konstrukci absolutních URL ze základní URL a jiné URL (urljoin).

Kód rozdělen na 2 funkce
ke staženíPomáhá nám to stáhnout html stránky. Nepotřebuje mnoho vysvětlování, jediná věc, kterou dělá, je požadavek na požadovanou stránku, přečte její html, pokud vše proběhne dobře, zobrazí se zpráva OK OK a pokud neukáže, že došlo k chybě (zde jsme mohl zobrazit informace o chybě), na konci vrátí přečtené html nebo None.
sledovat odkazyJe to hlavní funkce a bude probíhat přes každý odkaz. Pojďme to trochu vysvětlit:

  • Vytvoříme proměnnou s regulárním výrazem, která nám pomůže najít odkazy v html.
  • Proměnnou typu tail spustíme úvodní stránkou, pomůže nám to uložit odkazy v „pořadí“, ve kterém jsme je objevili. Rovněž spustíme proměnnou typu seznamu nazvanou navštíveno, kterou použijeme k uložení odkazů při jejich návštěvě. To se provádí, aby se zabránilo nekonečné smyčce, představte si, že stránka x odkazuje na stránku y, a to zase na stránku x, všechny přičemž budeme tyto odkazy vkládat donekonečna.
  • Jádrem funkce je smyčka while, která bude spuštěna, pokud má fronta odkazy, takže zkontrolujeme, zda je velikost větší než 0. Při každém průchodu odstraníme odkaz z fronty a odešleme jej do funkce stahování , to nám vrátí html, pak hledáme odkazy a zkontrolujeme, zda jsme ho již navštívili, pokud ne, přidáme jej do fronty a do seznamu.

PoznámkaMůže se zdát, že je seznam nadbytečný, ale chystáme se odstranit a odstranit odkazy z fronty, takže kontrola by nebyla správná, možná ten odkaz, který jsme před chvílí navštívili a už není ve frontě, ale bude v seznamu.

O vykonání kódu se postará poslední část kódu mimo funkce. Na následujícím obrázku můžete vidět snímek obrazovky běžícího kódu, který trasuje solvetic.

Pokud chcete, můžete si pomoci knihovnou, která existuje pro python s názvem BeautifulSoup, bude se zdát velmi snadno ovladatelná, doporučuji.

V případě, že chcete kód, zde je zip:

TraverseLinks.zip 646 bajtů 493 stažení

Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod
wave wave wave wave wave