2 回答

TA貢獻1776條經驗 獲得超12個贊
這不是您可能想聽到的答案,但您描述的方法都不會像普通瀏覽器客戶端那樣評估 JavaScript 和其他瀏覽器資源。相反,每個方法僅檢索您指定的文件的內容。快速瀏覽一下您所定位的網站,可以清楚地看到該表是作為 AJAX 調用的結果填充的,而您嘗試過的任何方法都無法評估該結果。
您需要依賴具有此類模擬功能的庫或腳本;即Selenium webdriverlaravel/dusk
的 PHP 綁定,或類似的東西。

TA貢獻1831條經驗 獲得超9個贊
這就是我使用 php curl 從網頁中抓取數(shù)據的方法:
// Defining the basic cURL function
function curl($url) {
$ch = curl_init(); // Initialising cURL
curl_setopt($ch, CURLOPT_URL, $url); // Setting cURL's URL option with the $url variable passed into the function
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Setting cURL's option to return the webpage data
$data = curl_exec($ch); // Executing the cURL request and assigning the returned data to the $data variable
curl_close($ch); // Closing cURL
return $data; // Returning the data from the function
}
// Defining the basic scraping function
function scrape_between($data, $start, $end){
$data = stristr($data, $start); // Stripping all data from before $start
$data = substr($data, strlen($start)); // Stripping $start
$stop = stripos($data, $end); // Getting the position of the $end of the data to scrape
$data = substr($data, 0, $stop); // Stripping all data from after and including the $end of the data to scrape
return $data; // Returning the scraped data from the function
}
$target_url = "https://www.somesite.com";
$scraped_website = curl($target_url);
$data_set_1 = scrape_between($scraped_website, "%before%", "%after%");
$data_set_2 = scrape_between($scraped_website, "%before%", "%after%");
%before% 和 %after% 是始終顯示在網頁上您要抓取的數(shù)據之前和之后的數(shù)據??赡苁?div 標簽或一些其他 html 標簽,這些標簽對于您想要獲取的數(shù)據來說是唯一的。

TA貢獻1824條經驗 獲得超8個贊
那么也許可以考慮使用curl 并模仿該網站正在使用的相同ajax 請求?當我搜索時,這就是我發(fā)現(xiàn)的: Mimicing an ajax call with Curl PHP
- 2 回答
- 0 關注
- 181 瀏覽
添加回答
舉報