Ich versuche, die gekratzten Daten in meiner Datenbank zu speichern. Es werden nur die Ergebnisse ausgegeben, sodass das Crawlen normal ist. Aber es liegt definitiv ein Fehler bei der Definition der Variablen und deren Übergabe an mysql-insert vor. Ich erhalte die Meldung „Neuer Datensatz erfolgreich erstellt“. Das Ergebnis der Variablen ist leer und das Datum existiert.
<?php $html = file_get_contents('https://www.marketwatch.com/market-data/us?mod=market-data-center'); $scriptDocument = new DOMDocument(); libxml_use_internal_errors(TRUE); if(!empty($html)){ $scriptDocument->loadHTML($html); libxml_clear_errors(); $scriptDOMXPath = new DOMXPath($scriptDocument); $scriptRow = $scriptDOMXPath->query('//th[starts-with(text(), "ISSUES:")]//following::td[6]');if($scriptRow->length > 0){foreach($scriptRow as $row){echo $row->nodeValue;}} // echo result works $scriptRow = $scriptDOMXPath->query('//th[starts-with(text(), "ISSUES:")]//following::td[6]');if($scriptRow->length > 0){foreach($scriptRow as $row){$row->nodeValue = $nasdaq_dec;}} // defining variable does not work }; $host_name = ''; $database = ''; $user_name = ''; $password = ''; try { $conn = new PDO("mysql:host=$host_name; dbname=$database;", $user_name, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "INSERT INTO `morgenroutine` (date,nasdaq_dec) VALUES (NOW(), '$nasdaq_dec')"; $conn->exec($sql); echo "成功创建新记录"; } catch(PDOException $e) { echo $sql . "<br>" . $e->getMessage(); } $conn = null; ?>
现在我明白了!我在mysql中将格式更改为"text",并将行更改为:
$scriptRow = $scriptDOMXPath->query('//th[starts-with(text(), "ISSUES:")]/following::td[6]');if($scriptRow->length > 0){foreach($scriptRow as $row){$nasdaq_dec = $row->nodeValue;}}