» »

Web crawler

Web crawler

gregakop ::

Zdravo,

Rad bi napisal en simple web crawler, ki bi iz danega url-ja in podstrani pobral določene informacije.

Ali je najbolje, da uporabim cURL ali ima kdo kakšne drug predlog?
Za cURL sem našel tudi en primer pa ne dela z relativnimi url-ji: http://stackoverflow.com/questions/2313...

Kako bi spremnenil gornjo kodo da bi delala z relativnimi url-ji?

Hvala za pomoč že vnaprej.

Lp, Grega

mason6 ::

Katero tehnologijo boš uporabil? Sklepam, da PHP, potem je tisti primer ok. Zakaj ne bi spremenil relativnega v absolutnega? http://stackoverflow.com/questions/2268...

Če imaš kakšno možnost delati v .NET potem uporabi htmlagilitypack in potem parsaj preko teh razredov.
LP

mirancar ::

piše da dela z relativnimi url-ji
Edit: I fixed some bugs from Tatu's version (works with relative URLs now).

tole verjetno zaznava relativni url:
if (0 !== strpos($href, 'http')) {


če ti ne dela pa zdebugiraj, izpisuj $href al pa $url na začetku da vidiš če mu dela pravilno

priporočam curl

gregakop ::

Spdaj je dejanska koda, ki sme jo uporabil
function crawl_page($url, $depth = 5)
{
    static $seen = array();
    if (isset($seen[$url]) || $depth === 0) {
        return;
    }

    $seen[$url] = true;

    $dom = new DOMDocument('1.0');
    @$dom->loadHTMLFile($url);

    $anchors = $dom->getElementsByTagName('a');
    foreach ($anchors as $element) {
        $href = $element->getAttribute('href');
        if (0 !== strpos($href, 'http')) {
            $path = '/' . ltrim($href, '/');
            if (extension_loaded('http')) {
                $href = http_build_url($url, array('path' => $path));
            } else {
                $parts = parse_url($url);
                $href = $parts['scheme'] . '://';
                if (isset($parts['user']) && isset($parts['pass'])) {
                    $href .= $parts['user'] . ':' . $parts['pass'] . '@';
                }
                $href .= $parts['host'];
                if (isset($parts['port'])) {
                    $href .= ':' . $parts['port'];
                }
                $href .= $path;
            }
        }

        echo $href.'<br />';
        crawl_page($href, $depth - 1);
    }
    //echo "URL:",$url,PHP_EOL,"CONTENT:",PHP_EOL,$dom->saveHTML(),PHP_EOL,PHP_EOL;
}

crawl_page("http://www.thewhiskyexchange.com/", 4);


Zaenkrat samo izpisujem linke. Niti približno ne izpiše vseh linkov, ki so na strani. Ne uspem ugotovit kaj ni ok.

Ali lahko to mogoče kdo potestira in mi da kak nasvet glede tega kaj ne štima v skripti?

Hvala in Lp, Grega

Zgodovina sprememb…

  • spremenil: gregakop ()

b3D_950 ::

hmmm, ker imaš onClick?:

<li><div class="product" onclick="location.href='P-25847.aspx'">


$dom->getElementsByTagName('a');
Zdaj ko je mir, jemo samo krompir.

mirancar ::

morda daj primere katerih ne najde in napiši kaj sploh najde

potem pogledaš source code od strani

recimo eno stvar ki jo vidim je tale skripta:
function quicklinks(){document.write("<div class=\"link\"><a href=\"/customerservice-delivery-charges.aspx\" title=\"Delivery Charges\">Delivery Charges</a><a href=\"/customerservice-help-ordertracking.aspx\" title=\"Track your order\">Order Tracking</a><a href=\"/customerservice-site-map.aspx\" class=\"lr\" title=\"Site Map\">Site Map</a></div>");}

Pero_SLO ::

Zanima me, če je web crawling/scraping legalno početje? Berem da je nekako sivo področje.

Hvala in LP

b3D_950 ::

Če uporabljaš za svoje projekte, ne vem v čem bi bil problem.
Web browser v ozadju počne nekaj podobnega, ko klikaš po spletnih straneh.

https://www.screamingfrog.co.uk/seo-spi...
Zdaj ko je mir, jemo samo krompir.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Slo-Tech userscripts

Oddelek: Izdelava spletišč
175194 (2646) jype
»

[Java]Shranjevanje/Branje nastavitev za povezavo z podatkovno bazo

Oddelek: Programiranje
192644 (2418) KernelPanic
»

pomoč PHP in DOM elementi

Oddelek: Izdelava spletišč
91290 (1101) MrBrdo
»

getElementsByTagName ne dela v Chromu

Oddelek: Programiranje
141686 (1424) win64
»

PHP, povezava, _SESSION

Oddelek: Izdelava spletišč
9856 (681) Lion29

Več podobnih tem