同じサイトの多くのページからコピーリンクが必要です。 は次のようになります:/download.php?id=xxxxx 必要なページを持つためにIDに1を追加するだけです... これらのページでは、コード内のリンクを取る必要があります: href = "http: //www.site.com/xxxxxxxxxxxx " (xは変数)多くのページからリンクをコピーするスクリプト
可能でしょうか? おかげ
同じサイトの多くのページからコピーリンクが必要です。 は次のようになります:/download.php?id=xxxxx 必要なページを持つためにIDに1を追加するだけです... これらのページでは、コード内のリンクを取る必要があります: href = "http: //www.site.com/xxxxxxxxxxxx " (xは変数)多くのページからリンクをコピーするスクリプト
可能でしょうか? おかげ
は、正規表現を使用してそれを実行しようとしているWebページからURLやリンクテキストを取得しようとしたとき
は、おそらく最大の過ちの人々が作るHTMLを解析するREGEXを使用しないでください。ジョブは正規表現で行うことができますが、ドキュメント全体に何回もpregループを張るのに高いオーバーヘッドがあります。正しい方法と、より速く、無限にクールな方法は、DOMを使用することです。 getLinks関数でDOMを使用することで、ウェブページ上のすべてのリンクをキーとして、またリンク名を値として持つ配列を簡単に作成できます。この配列は、任意の配列やリストのようにループさせることができます。 HTMLを読み込むときにエラー抑制が使用されることに注意してください。これは、DOCTYPEで定義されていない無効なHTMLエンティティに関する警告を抑制するためです。もちろん、実稼働環境では、エラー報告は無効になり、エラー報告はnoneに設定されます。
<?php
function getLinks($link){
$ret = array();
/*** a new dom object ***/
$dom = new domDocument;
/*** get the HTML via FGC,
Tho prefer using cURL instead but that's out of scope of the question..
(@suppress those errors) ***/
@$dom->loadHTML(file_get_contents($link));
/*** remove silly white space ***/
$dom->preserveWhiteSpace = false;
/*** get the links from the HTML ***/
$links = $dom->getElementsByTagName('a');
/*** loop over the links ***/
foreach ($links as $tag){
/*** only add download links to the return array ***/
if(strpos($tag->getAttribute('href'),'/download.php?id=')!=false){
$ret[$tag->getAttribute('href')] = $tag->childNodes->item(0)->nodeValue;
}
}
return $ret;
}
?>
使用例
<?php
/*** a link to search ***/
$link = "http://www.site.com";
/*** get the links ***/
$urls = getLinks($link);
/*** check for results ***/
if(sizeof($urls) > 0){
foreach($urls as $key=>$value){
echo $key . ' - '. $value . ' - ' . str_ireplace('http://www.site.com/download.php?id=','',$key). '<br >';
}
}else{
echo "No links found at $link";
}
?>
はい、それは可能です。 –
あなたはこれまでに何を試しましたか、これをあなた自身のためにしようとしましたか? psは正規表現の方法を使わないでください... –