如何用PHP高效采集新聞列表和詳情?

利用phpcURL高效抓取新聞列表及詳情

本文將詳細講解如何用PHP和cURL高效抓取新聞列表和詳情頁內容。主要挑戰在于:一、從列表頁提取新聞標題和完整URL;二、根據列表頁URL,進一步抓取詳情頁內容,最終整合標題、URL和內容進行展示。

首先,解決從列表頁獲取新聞標題和完整URL的問題。通過分析列表頁源代碼,我們可以利用正則表達式匹配標簽中的href屬性和title屬性(如果存在)來提取新聞標題和相對路徑。由于提取的路徑通常是相對路徑,我們需要將其轉換為完整URL。這需要在代碼中添加網站根域名。

如何用PHP高效采集新聞列表和詳情?

<?php $url = 'http://www.xx.com/news'; // 列表頁URL $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_REFERER, ''); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (windows NT 6.1; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/86.0.4240.198 Safari/537.36"); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // ... 其他cURL選項 ... $html = curl_exec($ch); curl_close($ch);  preg_match_all('/<a href="https://www.php.cn/link/01bebc8e971d09cb90cf5756b340f24c".*??>(.*?)/s', $html, $matches); $newslist = []; foreach ($matches[1] as $key => $relativepath) {     $completepath = $url . '/' . ltrim($relativepath, '/'); // 轉換為完整URL     $newslist[] = [         'title' => $matches[2][$key],         'url' => $completepath,     ]; }  // 現在 $newslist 數組包含標題和完整URL var_dump($newslist); ?>

接下來是第二個挑戰:從詳情頁提取新聞內容。同樣,我們使用cURL獲取詳情頁HTML,然后使用正則表達式提取

內的內容作為新聞內容。需要注意的是,正則表達式需要根據具體的詳情頁HTML結構進行調整。

立即學習PHP免費學習筆記(深入)”;

<?php foreach ($newslist as $news) {     $ch = curl_init($news['url']);     // ... 其他cURL選項 ...     $detailHtml = curl_exec($ch);     curl_close($ch);      preg_match('/<div class="content text-xs">(.*?)</div>/s', $detailHtml, $contentMatch);     $content = isset($contentMatch[1]) ? $contentMatch[1] : ''; // 處理無內容的情況      // 輸出結果     echo "標題: " . $news['title'] . "n";     echo "鏈接: " . $news['url'] . "n";     echo "內容: " . $content . "nn"; } ?>

這段代碼展示了如何使用cURL和正則表達式完成新聞列表和詳情的抓取。請根據實際網站結構調整正則表達式,并添加必要的錯誤處理和異常處理。 記住,在抓取數據時,務必遵守網站的robots.txt規則和相關法律法規。

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享