我在找工作。我正在制作一个每天都会有一次cron的脚本。它正在从网站上提取文字和链接。在正则表达式模式方面,我很无奈。
以下是我要提取的数据的示例:
<div class="cat-list-item job-list-item">
<h3 class="expressway full-width"><a href="/about/careers/network_engineer_voip_telephony">Network Engineer - VoIP Telephony</a></h3>
<div class="career-summary">
<p>
Provide daily support, proactive maintenance and independent troubleshooting, and identify capacity/performance issues to ensure
</p>
</div>
<p class="locations-heading"><b>Locations</b></p>
<ul class="locations-list normal">
<li>
Elizabethtown Headquarters
</li>
</ul>
<div class="list-bottom">
<a class="learn-more replace" href="/about/careers/network_engineer_voip_telephony">Learn More</a>
</div>
这是我到目前为止所做的:
<?php
$url = "http://bluegrasscellular.com/about/careers/";
$input = @file_get_contents($url) or die("Could not access file: $url");
$regexp = "<h3 class=\"expressway full-width\"><a\s[^>]*href=\"\/about\/careers\/(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
if (preg_match_all("/$regexp/siU", $input, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
// $match[2] = link address
// $match[3] = link text
echo "<a href='http://bluegrasscellular.com/about/careers/{$match[2]}'>{$match[3]}</a><br>";
}
}
?>
所有这一切都是拉动文本和href关闭。我也想抓住以下内容:
我最终希望将这些存储在数据库中并通知我任何新职位。我不知道如何解决这个问题。非常感谢任何帮助。
答案 0 :(得分:2)
使用Dom文档类。从以下开始:
$doc = new DOMDocument();
//load HTML string into document object
if ( ! @$doc->loadHTML($html)){
return FALSE;
}
//create XPath object using the document object as the parameter
$xpath = new DOMXPath($doc);
然后,您需要为要提取的每个元素编写查询。要获取“职业路径”div中的文本,您可以使用以下xpath查询:
$query = "//div[@class='career-summary']";
//XPath queries return a NodeList
$res = $xpath->query($query);
$text = trim($res->item(0)->nodeValue);
我没有测试过,但这是一般的想法。以下查询应从指定的列表元素中获取文本:
$query = "//ul[@class='locations-list normal']";
为了做这种事情,了解xpath查询是值得的。在使用HTML或XML时,它们比正则表达式要好得多。
修改强>
要访问多个项目,您可能需要更改查询。例如,如果有多个列表项,则可以按如下方式更改查询:
$query = "//ul[@class='locations-list normal']/li";
“/ li”表示您希望“ul”标记中的列表项具有指定的类。获得结果后,可以使用foreach循环遍历它们:
$out = array;
foreach ($res as $node){
$out[] = $node->nodeValue;
}