Halloweenská akce! Na stránce s dobitím bodů zadej dole kód STRASIDELNYCH20 a získej porci +20% bodů zdarma!
Akce končí 31.10. o půlnoci.
Avatar
Matěj Strnad:23. května 18:21

Nevíte jak mám udělat robota na stahování webů a ukládání jejich obsahu do DB? Popis:
Robot by měl stahovat weby které najde v DB.Potom na webu najde title a description. Pokud nenajde description tak vezme text z nadpisů a textu o maximální délce 100 znaků.Potom vybere text a nadpisy o maximální délce 2500 znaků.Vše zapíše do DB a soubor webu smaže. Robota chci udělat v PHP. Nebude problém se stránkamy zakázanýmy souborem robots.txt ?. Děkuji za odpověď. ( Ano snažím se o fulltextové vyhledávání ) :)

Odpovědět 23. května 18:21
Ty vaše internety!
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:24. května 8:38

$str = file_get_conten­t($url);
A pak uz pouzijes str_pos+substr nebo reg. vyrazy preg_match/preg_re­place.

Akceptované řešení
+20 Zkušeností
Řešení problému
 
Nahoru Odpovědět 24. května 8:38
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:24. května 9:02

Takhle, nevidim duvod, proc se s tim drbat v php, kdyz jsou hotove exe soubory

 
Nahoru Odpovědět  +1 24. května 9:02
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na Matěj Strnad
Petr Čech:24. května 10:54

A chceš hledat pouze v určitém seznamu stránek, nebo se snažíš udělat crawler (indexuje vše, na co narazí)?

Nahoru Odpovědět  +1 24. května 10:54
the cake is a lie
Avatar
Odpovídá na Petr Čech
Matěj Strnad:24. května 13:58

Robot bude indexovat to co mám v DB když najde novou stránku tak ji zapíše do DB robotovy který bude stejný ale bude se zabývat jen nalezenýmy odkazy. :)

Nahoru Odpovědět 24. května 13:58
Ty vaše internety!
Avatar
Odpovídá na Peter Mlich
Martin Štěpánek :24. května 21:27

On to dělá, aby se lépe naučil s PHP ;) Samozřejmě nejlepší takovou věc by bylo napsat to v rychlém céčku, aby to mělo smysl, ale to by mu nepomohlo...

Nahoru Odpovědět 24. května 21:27
Nesnáším, když někdo u if nepoužívá {}, byť se jedná o jeden řádek.
Avatar
Odpovídá na Matěj Strnad
Martin Štěpánek :24. května 21:28

Ono celkově by se ti hodilo, kdyby sis za pomocí regexu nebo prácí s DOMem nalezl všechny odkazy na stránce a uložil -> ty pak taky procházel a pořád dokola, získáš díky tomu docela dost stránek (záleží na tom, jak dlouho to necháš běžet).

Nahoru Odpovědět 24. května 21:28
Nesnáším, když někdo u if nepoužívá {}, byť se jedná o jeden řádek.
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na Martin Štěpánek
Martin Dráb:26. května 19:45

To by ani nutné nebylo, spíše poskládat z více součástí. Weby se dají celkem dobře stahovat utilitou wget (řeší i odkazy v nich, má slušně široké možnosti natavení) a zbytek (ukládání dat DB) třeba menším skriptem v Pythonu. Pokud je cílem napsat si něco jako vlastní wget, tak rozhodně směle do toho, úloha to není zrovna jednoduchá, pokud má řešit všechny možné případy.

Jako úloha pro procvičení PHP mi to přijde dost nevhodné vzhledem k primárnímu použití tohoto jazyka, tedy na tvorbu webů. Jistě, najdou se i protipříklady (např. malware rodiny Zeus), ale podle mě to není rozumná cesta.

Nahoru Odpovědět 26. května 19:45
2 + 2 = 5 for extremely large values of 2
Avatar
Odpovídá na Martin Dráb
Matěj Strnad:26. května 19:50

Takže spíše python? :)

Nahoru Odpovědět 26. května 19:50
Ty vaše internety!
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na Matěj Strnad
Martin Dráb:26. května 20:00

Co jsem pochopil z tvého zadání, chceš prográmek, který poběží na pozadí (třeba na serveru), občas se podívá, zda nedostal za úkol stáhnout nějaký web, pokud ano, začne jej stahovat a provádět další věci dle tvých přání.

V tomtto případě mi přijde Python lepší.

Nahoru Odpovědět 26. května 20:00
2 + 2 = 5 for extremely large values of 2
Avatar
Matěj Strnad:26. května 20:04

Jak se dá v pythonu stáhnout web? :)

Nahoru Odpovědět  -1 26. května 20:04
Ty vaše internety!
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:28. května 14:16

Porad se ptas na to same :)
Nevim, zda si rozumime. Web stahujes bud html stranku nebo komplet vsechno, kazdy soubor, ktery pro zobrazeni stranky potrebujes (css, js, obrazek). A dal muzes stahovat dalsi stranky podle odkazu v html strance. To lze do nekonecna nebo nastavil level, treba, do hloubky 4 odkazu.
Kam si budes data ukladat, je tvuj problem. Je tam treba hlidat cesty a neukladat duplicity.

Jako skolni uloha by to melo fungovat asi tak, ze si vytvaris v php strom, prohledvas strom, zda tam uz takova stranka existuje, abys ji neduplikoval a pridas ji do seznamu. V podstate vystup by mohl byt jen strom stranek. Pripadne k nim pridane jmena souboru (obrazky, css, ...)
Pri ukladani souboru bych delal uplne stejnou adresarovou strukturu jako najdes u odkazu.

  • V php se da html stranka parsovat jako DOM nebo XML nebo pres si to muzes parsovat sam pres pres strpos, substring ci reg. vyrazy preg_match().

Stazeni souboru do stringu je pres file_get_content(). Dalo by se pouzit mozna fopen() nebo nejake funkce f-neco.

  • V pythonu to bude neco podobne. Staci zadat do googlu python py parser.
  • Idealni cesta je jit cestou hotovych programu, jak uz zminili wget. Existuje pro linux i win. Mozna se pro win jmenuje trochu jinak. Tam zadas pravne url webu, hloubku 4. Ze chces kompletne vsechny soubory. Od-enterujes a pak uz jen pockas, az to dostahuje. Wget muzes spoustet i pres php. Dal by se asi pouzit exec() nebo jeho alternativy, viz php.net/exec nadpis See also.
 
Nahoru Odpovědět 28. května 14:16
Avatar
Odpovídá na Martin Dráb
Martin Štěpánek :29. května 11:50

To jo, však jsem psal že to je něco pro c, ale klidně i Python. Já to myslel k procvičení jazyka jako takového. Je jedno že ta úloha není čistě webového ražení, pořád se na tom nacvičí OOP, práci s DOMem, funkce na pole atd...

Nahoru Odpovědět  +1 29. května 11:50
Nesnáším, když někdo u if nepoužívá {}, byť se jedná o jeden řádek.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.