我正在尝试使用DOM抓取这种格式的链接列表:
<h2 class="h2"><a href="this-is-a-link">List item 1</a></h2>
<h2 class="h2"><a href="this-is-another-link">List item 2</a></h2>
<h2 class="h2"><a href="and-another">List item 3</a></h2>
我需要将PHP的内容<h2>
(例如“列表项1”)和随附内容href
(例如“ this-is-a-link”)都作为变量。
我可以使用一个foreach
循环分别刮取每个图像,但是一旦尝试通过嵌套foreach
循环同时打印两个图像,每个图像都会<h2>
重复多次。
我是在正确的轨道上,还是有更好的方法来解决此问题?
编辑
我应该说,我正在抓取各种各样的网站,其中一些网站具有上面的格式,但是对于其他网站,<a>
则是其他位置,例如在包含div的位置。
这是我的代码:
function jobscrape($name, $url, $jobpage_url_root, $job_title_location, $job_title_url_location, $job_text) {
echo "<h3>".$name."</h3>";
// CREATE NEW DOM DOCUMENT BASED ON JOBLIST URL
$html = file_get_contents($url);
$doc = new DOMDocument();
libxml_use_internal_errors(TRUE);
// CHECK IF ANY HTML IS RETURNED (I.E. IF ABOVE HAS WORKED)
if(!empty($html)) {
// LOAD HTML INTO DOM DOCUMENT, CREATE NEW XPATH AND SET VARIABLE FOR THE JOB TITLE LOCATION
$doc->loadHTML($html);
libxml_clear_errors(); // remove errors for yucky html
$xpath = new DOMXPath($doc);
// LOOP THROUGH JOBS LIST
$row = $xpath->query("$job_title_location");
// CHECK IF THERE ARE ANY ROWS MATCHING THE ABOVE LOCATION
if ($row->length > 0) {
// PULL THOSE ROWS INTO AN ARRAY
foreach ($row as $jobpage_titles) {
// SET THE JOBPAGE TITLE VARIABLE
$jobpage_title = $jobpage_titles->nodeValue;
// echo $jobpage_title."<br>";
// LOOP THROUGH JOBS PAGE URLS
$row2 = $xpath->query("$job_title_url_location");
// CHECK IF THERE ARE ANY ROWS MATCHING THE ABOVE LOCATION
if ($row2->length > 0) {
//echo $jobpage_title." - hello<br>";
// PULL THOSE ROWS INTO AN ARRAY
foreach ($row2 as $jobpage_urls) {
// TRY TO PRINT VARIABLE FROM BEFORE
$href = $jobpage_url_root.$jobpage_urls->attributes->getNamedItem('href')->value;
echo "<a href='".$href."'>".$jobpage_title."</a><br>";
}
}
}
}
}
}
我的输出是为每个URL一次打印每个列表元素,例如:
<h2 class="h2"><a href="this-is-a-link">List item 1</a></h2>
<h2 class="h2"><a href="this-is-another-link">List item 1</a></h2>
<h2 class="h2"><a href="and-another">List item 1</a></h2>
<h2 class="h2"><a href="this-is-a-link">List item 2</a></h2>
<h2 class="h2"><a href="this-is-another-link">List item 2</a></h2>
<h2 class="h2"><a href="and-another">List item 2</a></h2>
<h2 class="h2"><a href="this-is-a-link">List item 3</a></h2>
<h2 class="h2"><a href="this-is-another-link">List item 3</a></h2>
<h2 class="h2"><a href="and-another">List item 3</a></h2>
只是更大的规模,因为我要抓三件以上的东西。
在这种情况下,您可能不需要嵌套foreach循环。由于您获得的是元素的href属性和同一元素的文本节点,因此可以在循环中以相同的迭代方式完成此过程,而无需嵌套。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句