DOMDocument
とDOMXPath
に必要なHTMLデータがあります。XPathクエリとHTML - アンカー内で特定のHREFを検索するタグ
しかし、特定の<a>
タグでhref
の値にアクセスして取得する必要があります。以下は、基準です:
href
は含まれています:some-site.vendor.com/jobs/[#idnumber]/job
(すなわちsome-site.vendor.com/jobs/23094/job
)href
はない含まれていますsome-site.vendor.com/jobs/search?search=pr2
href
はない含まれていますsome-site.vendor.com/jobs/intro
href
はありません含まれています。www.someothersite.com/
href
はない含まれています:media.someothersite.com/
href
はない含まれていますjavascript:void(0)
これらの(同様の)クエリのどちらかが4-6以外のすべてをフェッチする - それは良いことだ:
$joblinks = $xpath->query('//a[@href[contains(., "https://some-site.vendor.com/jobs/")]]');
$joblinks = $xpath->query('//a[@href[contains(., "job")]]');
しかし、最終的には#1のようなhrefを含むすべてのアンカータグにアクセスする必要があります。 d実際のhref値を変数/配列に代入します。ここで私がやっているものだ:これは本当に私を叩きされ
$payload = fetchRemoteData(SPEC_SOURCE_URL);
// suppress warning(s) due to malformed markup
libxml_use_internal_errors(true);
// load the fetched contents
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->loadHTML($payload);
// parse and cache the required data elements
$xpath = new DOMXPath($dom);
//$joblinks = $xpath->query('//a[@href[contains(., "some-site.vendor.com/jobs/")]]');
$joblinks = $xpath->query('//a[@href[contains(., "job")]]');
foreach($joblinks as $joblink) {
var_dump(trim($joblink->nodeValue)); // dump hrefs here!
}
echo "\n";
- 私は近いが、私はちょうど正しくクエリを微調整および/または実際のhrefの値にアクセスできないようです。私がこの質問のために何らかのプロトコルを遵守しなかったなら、私の謙虚な謝罪...
ANY/ALLヘルプは大歓迎です! Thanxあまりにも前に!
hrefの値をフィルタすることが必要ですXPathクエリのみを使用しますか?私はそれが可能だと確信していますが、私の頭がそれを見て痛い(典型的なXPath)。おそらく '$ xpath-> query()'を使用して、幅広いパターン(例えば、 'href =" https://some-site.vendor.com/jobs/ ")にマッチするノードのリストを取得し、数行のPHPを使用して、各ノードのhrefの値をより詳細に調べてください。 –
「XPath 1.1」ではなく「XPath 1.0」は、これを不必要に冗長にしています...しかし、これはすべて私たちが持っているものです。私は['registerphpfunctions'](http://php.net/manual/en/domxpath.registerphpfunctions.php)との正規表現マッチを行う関数を作成します。 – Wrikken