Cách thu thập dữ liệu trang web bằng Laravel Dusk Spider với các ví dụ
Ngày đăng:
14/12/2022
Trả lời:
0
Lượt xem:
158
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 |