Cách thu thập dữ liệu trang web bằng Laravel Dusk Spider với các ví dụ

Trong bài viết sau, chúng tôi sẽ cung cấp cho bạn một số câu trả lời cho câu hỏi Cách thu thập dữ liệu trang web bằng Laravel Dusk Spider với các ví dụ . Tôi thực sự hy vọng đây là câu trả lời bạn đang tìm kiếm và nó sẽ giúp bạn tiết kiệm thời gian. thực thi

Cách thu thập dữ liệu trang web bằng Laravel Dusk Spider với các ví dụ - Thu thập dữ liệu trang web bằng Laravel Dusk Spider
artisan('migrate:fresh');
    }

    /** @test */
    public function urlSpider()
    {

        $startingLink = Page::create([
            'url' => self::$startUrl,
            'isCrawled' => false,
        ]);

        $this->browse(function (Browser $browser) use ($startingLink) {
            $this->getLinks($browser, $startingLink);
        });
    }

    protected function getLinks(Browser $browser, $currentUrl){

        $this->processCurrentUrl($browser, $currentUrl);


        try{

            foreach(Page::where('isCrawled', false)->get() as $link) {
                $this->getLinks($browser, $link);
            }


        }catch(Exception $e){

        }
    }

    protected function processCurrentUrl(Browser $browser, $currentUrl){

        //Check if already crawled
        if(Page::where('url', $currentUrl->url)->first()->isCrawled == true)
            return;

        //Visit URL
        $browser->visit($currentUrl->url);

        //Get Links and Save to DB if Valid
        $linkElements = $browser->driver->findElements(WebDriverBy::tagName('a'));
        foreach($linkElements as $element){
            $href = $element->getAttribute('href');
            $href = $this->trimUrl($href);
            if($this->isValidUrl($href)){
                //var_dump($href);
                Page::create([
                    'url' => $href,
                    'isCrawled' => false,
                ]);
            }
        }

        //Update current url status to crawled
        $currentUrl->isCrawled = true;
        $currentUrl->status  = $this->getHttpStatus($currentUrl->url);
        $currentUrl->title = $browser->driver->getTitle();
        $currentUrl->save();
    }


    protected function isValidUrl($url){
        $parsed_url = parse_url($url);

        if(isset($parsed_url['host'])){
            if(strpos($parsed_url['host'], self::$domain) !== false && !Page::where('url', $url)->exists()){
                return true;
            }
        }
        return false;
    }

    protected function trimUrl($url){
        $url = strtok($url, '#');
        $url = rtrim($url,"/");
        return $url;
    }

    protected function getHttpStatus($url){
        $headers = get_headers($url, 1);
        return intval(substr($headers[0], 9, 3));
    }
}

Nếu bạn không hài lòng với câu trả lời của tôi về Cách thu thập dữ liệu trang web bằng Laravel Dusk Spider với các ví dụ. Xem thêm các chủ đề tương tự hoặc để lại cho tôi một câu hỏi mới

chưa xác định