Wie behebe ich einen 403 Forbidden Error beim Scraping einer Website mit PHP Simple HTML DOM Parser?
Posted: 27 Dec 2024, 10:32
Ich versuche, mit dem PHP Simple HTML DOM Parser Daten von einer Website zu extrahieren. Allerdings erhalte ich jedes Mal, wenn ich versuche, den HTML-Inhalt der Seite abzurufen, den Fehler 403 Forbidden.
Zur Fehlerbehebung habe ich versucht, mit Guzzle benutzerdefinierte Header, einschließlich eines User-Agent, festzulegen PHP zur Nachahmung einer Browseranfrage. Trotzdem besteht das Problem weiterhin und ich kann den Inhalt der Webseite nicht abrufen.
Ich vermute, dass der Server über zusätzliche Mechanismen wie IP-Blockierung, Anti-Bot-Schutz oder Cookies verfügt, die den 403-Fehler verursachen.
Zur Fehlerbehebung habe ich versucht, mit Guzzle benutzerdefinierte Header, einschließlich eines User-Agent, festzulegen PHP zur Nachahmung einer Browseranfrage. Trotzdem besteht das Problem weiterhin und ich kann den Inhalt der Webseite nicht abrufen.
Code: Select all
// using simple dom parser
require '../simple_html_dom.php';
$html = file_get_html('https://www.mywebsite.com');
$title = $html->find('title', 0);
$image = $html->find('img', 0);
echo $title->plaintext."
\n";
echo $image->src;
Code: Select all
// using guzzle
require '../../vendor/autoload.php';
use GuzzleHttp\Client;
$url = "https://www.mywebsite.com";
$client = new Client();
try {
$response = $client->request('GET', $url, [
'headers' => [
'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Accept-Language' => 'en-US,en;q=0.9',
'Accept-Encoding' => 'gzip, deflate, br',
'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Referer' => 'https://www.mywebsite.com',
]
]);
if ($response->getStatusCode() === 200) {
$html = $response->getBody()->getContents();
echo "Fetched HTML (first 500 characters):\n" . substr($html, 0, 500) . "\n\n";
// Continue with DOM parsing...
} else {
echo "Failed to fetch the URL. HTTP Status Code: " . $response->getStatusCode() . "\n";
}
} catch (Exception $e) {
echo "An error occurred: " . $e->getMessage() . "\n";
}
- Gibt es andere Header oder Konfigurationen, die ich einbeziehen sollte, um
den 403 Forbidden-Fehler zu umgehen? - Gibt es einen alternativen Ansatz oder eine alternative Bibliothek, die möglicherweise besser funktioniert
zum Scrapen von Websites damit Einschränkungen?