私はhtmlを取得するページと、それを解析するページを持っています。最終的な最終目標は、データをフォーマットしてローカルのdata.json
ファイルに保存します。私は、PHPよりはるかにうまくHTMLを解析するので、さまざまなスクリプトを使ってJavaScriptをミックスに追加しています。 (実際のアプリケーションでは、より複雑なHTMLの処理を行います。)ページ、Ajaxまたはカールの間でデータを同時に保存する
は、現在の反復は次のようになります。
のindex.php
public function parseHTML(string $site, string $html)
{
$data = [
'html' => '<div id="get">this is text</div>',
'site' => $site,
];
$url = 'tehsaurux.net/test.php';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 2);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$synonyms = curl_exec($ch);
if ($synonyms === false) {
print_r(curl_error($ch));
return false;
}
return $synonyms;
}
test.phpを
<?php
if (isset($_POST['html'])) {
echo $_POST['html'];
} else {
echo "No post data in the first test page.<br>";
}
?>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
result = $("#get").innerHTML;
$.post('test2.php', {data: result}, function(d) {
document.write("Here is the result of the second ajax request.", d);
});
</script>
test2.php
<?php
if (isset($_POST['data'])) {
echo "Test1 page data is ", print_r($_POST['data']), "<br>";
file_put_contents('data.txt', $data);
} else {
echo "NO DATA from page 1.<br>";
}
?>
そして最後にindex.php
にプリントとして出力:
Here is the result of the second ajax request.NO DATA from page 1.
Here is the result of the second ajax request.NO DATA from page 1.
test.php
test2.php
へのAjaxリクエストがデータを送信しないことを、次に表示されます。さらにdocument.write
のコールはtest.php
で、その出力はそれ自身ではなくindex.php
に書き込まれます。 Ajaxの呼び出しは基本的に最初のページにスクリプトをロードしますか?require
のような記述ですか?
私は実際に取り出したhtmlを外部スクリプトに送信して解析し、きれいでクリーンなcsvデータのリストを返すことができます。
。 。 。 。 また、私はdocument.write()
を使用して、返されるものであるため、各スクリプトページで目的のデータを印刷しようとしました。問題は、の結果と、の取得したhtmlが印刷されるという問題です。いいえ。
これらは公平なポイントです。バックスラッシュは以前の実装のアーティファクトです。あなたは彼らがそこに属していないのは正しいです。 2番目のポイント - 実際に送信されるHTMLはページ全体になります。これは、doctype宣言、頭部、本文、およびすべてを含みます。 '$("#get ")'は必要な情報を得るための適切なフィルタに置き換えられます。 – Naltroc