file_get_contents
(または) を使用curl
して実際のソース コードを取得し、 (たとえば) を使用して解析する必要がありますDOMDocument
。たとえば、次のようなことを試すことができます。
最初に、ノードの innerHTML を取得できる関数を定義します ( Hiamに感謝します)。
function DOMinnerHTML(DOMNode $element)
{
$innerHTML = "";
$children = $element->childNodes;
foreach ($children as $child)
{
$innerHTML .= $element->ownerDocument->saveHTML($child);
}
return $innerHTML;
}
次に、コンテンツを取得し、ID で選択メニューを取得します
$ppa = file_get_contents('https://launchpad.net/~gregory-hainaut/+archive/pcsx2.official.ppa#field.series');
$doc = new DomDocument;
$doc->loadHTML($ppa);
$innerHTML = DOMinnerHTML($doc->getElementById('field.series_filter'));
エコー$innerHTML
すると、結果は次のようになります。
<option value="">Any series</option>
<option value="trusty">Trusty</option>
<option value="saucy">Saucy</option>
<option value="raring">Raring</option>
<option value="quantal">Quantal</option>
<option value="precise">Precise</option>
<option value="lucid">Lucid</option>
その結果から、選択メニューの内側の htmlしか取得していないことがわかります。したがって、返された innerHTML をselect
タグでラップする必要があります。
<select name='[your name]' [...other properties]>
<?=$innerHTML;?>
</select>
編集
OPはコメントで、すべてが機能していると述べましたが、上で選択したものとは異なる選択メニューが必要です。彼がスクレイピングしているページには無効なマークアップがあるため(2 つの別々select
のメニューに同じ がありますid
)、DOMDocument
getElementById
呼び出しは正しいノードを取得していません。これを修正するには、最初に親ノードを取得してからクエリを実行して探しているアイテムを見つけることができるように、DOM ツリーを見て一意の親要素を調整する必要があります。この場合、OP が必要とするメニューはdiv
ID が "" の の中にあるため、そのノードを取得してから、 を使用getElementsByTagName
して選択メニューを取得します。
//... get the code (set in $ppa) as per the original section
$doc->loadHTML($ppa);
//Grab the parent div because it has a unique ID
$parent_div = $doc->getElementById('series-widget-div');
//then seach for all <select> tags and grab the first one
$select_menu = $parent_div->getElementsByTagName('select')->item(0);
//... and now we're ready to get the innerHTML
$innerHTML = DOMinnerHTML( $select_menu );
//echo it out!
echo $innerHTML;