Ich versuche, ein Suchformular mit Curl (über PHP) zu kratzen. Ich dachte, alles sei richtig oder nah, aber das scheint nicht der Fall zu sein. Um ein wenig Hintergrundwissen zu erhalten, versuche ich Daten aus einem Suchformular zu sammeln (oder zu scrappen), in das der Benutzer einen Datumsbereich einfügt und dann die Suche einreicht. Die Ergebnisse werden dann unter den Sucheingaben angezeigt. Die Seite verwendet AJAX/JavaScript, um Daten zu laden.Sammeln von Daten von einer Website, die Ajax/Javascript verwendet. - CURL
Wenn ich das PHP-Skript ausführen, bekomme ich nichts zurück. Ich habe print_r
hinzugefügt, um die Ergebnisse zu sehen, aber nichts zeigt.
Hier ist mein Skript. Alle Ratschläge sind willkommen.
<?php
class Scraper {
// Class constructor method
function __construct() {
$this->useragent = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3';
$handle = fopen('cookie.txt', 'w') or exit('Unable to create or open cookie.txt file.'."\n"); // Opening or creating cookie file
fclose($handle); // Closing cookie file
$this->cookie = 'cookie.txt'; // Setting a cookie file to store cookie
$this->timeout = 30; // Setting connection timeout in seconds
}
// Method to search and scrape search details
public function scrapePersons($searchString = '') {
$searchUrl = 'https://virre.prh.fi/novus/publishedEntriesSearch';
$postValues = array(
'businessId' => '',
'startDate' => '07072016',
'endDate' => '08072016',
'registrationTypeCode' => 'kltu.U',
'_todayRegistered' => 'on',
'domicileCode' => '091',
'_domicileCode' => '1',
'_eventId_search' => 'Search',
'execution' => 'e2s1',
'_defaultEventId' => '',
);
$search = $this->curlPostFields($searchUrl, $postValues);
return $search;
}
// Method to make a POST request using form fields
public function curlPostFields($postUrl, $postValues) {
$_ch = curl_init(); // Initialising cURL session
// Setting cURL options
curl_setopt($_ch, CURLOPT_SSL_VERIFYPEER, FALSE); // Prevent cURL from verifying SSL certificate
curl_setopt($_ch, CURLOPT_FAILONERROR, TRUE); // Script should fail silently on error
curl_setopt($_ch, CURLOPT_COOKIESESSION, TRUE); // Use cookies
curl_setopt($_ch, CURLOPT_FOLLOWLOCATION, TRUE); // Follow Location: headers
curl_setopt($_ch, CURLOPT_RETURNTRANSFER, TRUE); // Returning transfer as a string
curl_setopt($_ch, CURLOPT_COOKIEFILE, $this->cookie); // Setting cookiefile
curl_setopt($_ch, CURLOPT_COOKIEJAR, $this->cookie); // Setting cookiejar
curl_setopt($_ch, CURLOPT_USERAGENT, $this->useragent); // Setting useragent
curl_setopt($_ch, CURLOPT_URL, $postUrl); // Setting URL to POST to
curl_setopt($_ch, CURLOPT_CONNECTTIMEOUT, $this->timeout); // Connection timeout
curl_setopt($_ch, CURLOPT_TIMEOUT, $this->timeout); // Request timeout
curl_setopt($_ch, CURLOPT_POST, TRUE); // Setting method as POST
curl_setopt($_ch, CURLOPT_POSTFIELDS, $postValues); // Setting POST fields (array)
$results = curl_exec($_ch); // Executing cURL session
curl_close($_ch); // Closing cURL session
return $results;
}
// Class destructor method
function __destruct() {
// Empty
}
}
$testScrape = new Scraper(); // Instantiating new object
$data = json_decode($testScrape->scrapePersons()); // Scraping people records
print_r($data);
?>
Vielen Dank für Ihre Antwort! Sie erwähnten das Kopieren des obigen Codes. Meinst du das Hinzufügen des Codes in das PHP-Skript oder etwas anderes? Verzeihen Sie, dass ich dumm bin. Mein Gehirn ist gebraten. – MangoPie
Sie müssen die Sicherheitsprüfung auch in cURL implementieren. Sie müssen also die Aktion (die sich nicht ändern sollte), den j_username, und j_password und POST erhalten. Am Ende werden Sie 2 POST-Anfragen machen, 1, die Sie jetzt haben, um die Suche zu machen, und eine 2, um über die Sicherheitsprüfung zu kommen. – pmcilwaine