0

まず、私は店舗からこのデータを取得する許可を得ているので、合法性はここでは問題になりません。

さまざまなオンラインストアから情報を取得し、1時間に1回データベースに保存しようとしています。

サンプルサイト:http ://www.uptherestore.com/department/accessories

私はこのようなPHPスクレイプを試しました:

<?php
$file_string = file_get_contents('http://www.uptherestore.com/department/accessories');
preg_match('/<div class="view view-uc-products view-id-uc_products view-display-id-page_3 storeview view-dom-id-1">
(.*)<\/div>/i', $file_string, $title);
$title_out = $title[1];?>
<p><strong>Accessories:</strong> <?php echo $title_out; ?></p>

しかし、それは私に同類のエラーを与えています:

 [14-Feb-2013 07:39:49 UTC] PHP Warning:  DOMDocument::loadHTML() [<a href='domdocument.loadhtml'>domdocument.loadhtml</a>]: htmlCheckEncoding: encoder error in Entity, line: 7 in scraping.php on line 5

ログファイルからの完全なエラーはここにあります:http://pastebin.com/W2Bhkc0s

そのサイトから何とかこすり取ったとしても、結果の最初のページのみが返されます(すべてのページが必要な場合)これに対する私の現在の解決策は次のとおりです。

  • jQueryを使用して、ページ下部のページャーに含まれる要素の数を確認します
  • これらの各ページをスクレイプするループを実行します

しかし、これは理想的ではありません。ご覧のとおり、ページの下部に1〜9ページがありますが、「最後」をクリックすると、実際には11ページのコンテンツがあります。要するに、このようなサイトからデータをスクレイピングするための最良の方法は何ですか?前述のように、ストアの所有者はすべて私にコンテンツの使用を許可してくれましたが、特に技術的なことは気にせず、サーバーへのアクセスを許可したり、サーバーの.htaccessにコードを入れて私のWebサイトからのリクエストを許可したりすることはできません。

4

3 に答える 3

1

ページングは​​簡単です。「次へ」というリンクを見つけて、そこに表示されなくなるまでたどります。xpathに慣れていない限り、優れたhtmlパーサーライブラリ(phpquery、simple-html-dom)が必要です。それを行う正しい方法を見つけるためにかなりの時間を費やす準備をしてください。そして何よりも、正規表現を使用するように指示する人の言うことを聞かないでください。

于 2013-02-21T08:48:38.570 に答える
0

cURLと正規表現を使用して、必要なものをフィルタリングします。Google cURL php.netサイトは、必要なすべての情報を提供します

于 2013-02-21T01:17:01.043 に答える
0

まず第一に、あなたのエラーメッセージはあなたのphpコードに適合していないようです:phpは正規表現を使用してhtmlを解析しようとしています(間違っています!)そしてエラーメッセージはあなたがhtmlパーサー(DOMDocument)を使用してhtmlを解析していることを示唆しています(正しい方法)。

あなたがする必要があることは次のとおりです:

  1. 製品ページからhtmlを取得します(現在行っているように...);
  2. そのページがデータベースですでに解析されているかどうかを確認します(次のポイントを参照)。
  3. htmlパーサーを使用して、必要なページから情報を取得し、すべてをデータベースに保存します。これには、製品ページへのリンクや、そのページの別の識別プロパティ、およびある種のタイムスタンプが含まれます。これにより、何をしたかがわかります。すでに;
  4. htmlパーサーを使用して、html内のすべての製品リンクを取得します。
  5. 見つけたすべての製品リンクについて、1に進みます。

スクリプトが無限ループに入ったり、実行時間が長すぎたりしないように、ロジックを組み込む必要がありますが、基本的にはそれだけです。ブラウザで操作の結果を実際に確認するまで、browser / javascript/ajaxは必要ありません。

于 2013-02-21T01:39:40.723 に答える