1

</b>PHP のDOMDocument->loadHTML()システムを使用して、次のデータ (タグの 4.0m 後) を取得する最良の方法は何でしょうか? ある種のCSSスタイルのセレクターだと思いますか?

(LINE 240, always 240) <b>Current Price:</b> 4.0m

私はドキュメントを見回してきましたが、正直なところ、これは私にとって完全に異質です! さらに、次のような URL から、何千ものページのこのデータを取得するにはどうすればよいでしょうか。

http://site.com/q=item/viewitem.php?obj=11928

最小値/最大値はわかっています(obj=#スクレイピングする必要があるページの数)。それらすべてを段階的に取得し、MySQL データベースに出力name descriptionしますprice(現時点では、パーセンテージの上昇/低下についてはあまり心配していません)。 、そこから取得して自分のサイトに表示できます。

私が興味を持っているコードのメインブロックは次のとおりです。

<div class="subsectionHeader"> 
<h2> 
Item Name
</h2> 
</div> 
<div id="item_additional" class="inner_brown_box">  
Description of item goes here.
<br> 
<br> 
<b>Current Price:</b> 4.0m
<br><br> 
<b>Change in Price:</b><br> 
<span> 
<b>30 Days:</b> <span class="rise">+2.5%</span> 
</span> 
<span class="spaced_span"> 
<b>90 Days:</b> <span class="drop">-30.4%</span> 
</span> 
<span class="spaced-span"> 
<b>180 Days:</b> <span class="drop">-33.3%</span> 
</span> 
<br class="clear"> 
</div> </div> <div class="brown_box main_page"> 
<div class="subsectionHeader"> `

誰かがこれをどうやって進めるかについての骨の折れるヒントを提供できれば、それは大歓迎です!

4

3 に答える 3

1

正規表現で HTML を解析することは通常悪い考えですが、あなたの場合は正しい/簡単な方法かもしれません。strpos とプレーン テキスト パターンでチャンクするよりも十分に高速で、おそらく柔軟性があります。

上記のソース HTML でこの例を試してください。

//checked with php 5.3.3
if (preg_match('#<h2>(?P<itemName>[^>]+)</h2>.*?<div[^>]+id=([\'"])item_additional(\2)[^>]*>\s*(?P<description>[^<]+).*?<b>\s*Current\s+Price\s?:?</b>\s*(?P<price>[^<]+)#six',$src, $matches))
{
    print_r($matches);
} 

正規表現は複雑すぎるように見えるかもしれませんが、ドキュメントと RegexBuddy や Expresso のような便利なツールがあれば、誰でも簡単なものを書くことができます ;)

于 2011-03-15T03:17:49.140 に答える
0

SimpleHTMLDOMパーサーを使用できます-http ://simplehtmldom.sourceforge.net/

以下を使用してコンテンツを抽出します。

echo file_get_html('http://www.google.com/')->plaintext; 

次に、PHPstr関数を使用して4.0mを見つけます。

于 2011-03-14T23:58:32.057 に答える
0

DOM 解析は、これを行うための最も堅牢な方法です。

最速の方法が必要で、HTML 構造が一貫していることがわかっている場合は、オフセットの検索に使用する方がおそらく高速です。strposただし、ページ構造が変更されると壊れる可能性が高くなります。このようなもの:

$needles = array(
  'name' => "<div class=\"subsectionHeader\">\n<h2>\n"
  'description' => "<div id=\"item_additional\" class=\"inner_brown_box\">\n"
  'price' => "<b>Current Price:</b> "
);
$buffer = file_get_contents("http://site.com/q=item/viewitem.php?obj=1234");
$result = array();
foreach ($needles as $key => $needle) {
  $index1 = strpos($buffer, $needle);
  $index2 = strpos($buffer, "\n", $index1);
  $value = substr($buffer, $index1, $index2 - $index1);
  $result[$key] = $value;
}

末尾の空白を含めて、針を正確に正しくする必要があります。

于 2011-03-15T00:09:38.697 に答える