使用PHP的explode()进行HTML抓取被认为是一种不好的做法?
我一直在编写代码,但似乎无法绕过正则表达式。
这使我想到了以下问题:使用PHP的爆炸破解一串html代码来选择文本的位是不好的做法? 我需要为各种信息刮掉一页,并由于我的可怕的正则表达式知识(在一个完整的软件工程学位,我不得不写一个......)我决定使用explode()。
我在下面提供了我的代码,所以比我更有经验的人可以告诉我是否使用正则表达式是必要的!
public function split_between($start, $end, $blob)
{
$strip = explode($start,$blob);
$strip2 = explode($end,$strip[1]);
return $strip2[0];
}
public function get_abstract($pubmed_id)
{
$scrapehtml = file_get_contents("http://www.ncbi.nlm.nih.gov/m/pubmed/".$pubmed_id);
$data['title'] = $this->split_between('<h2>','</h2>',$scrapehtml);
$data['authors'] = $this->split_between('<div class="auth">','</div>',$scrapehtml);
$data['journal'] = $this->split_between('<p class="j">','</p>',$scrapehtml);
$data['aff'] = $this->split_between('<p class="aff">','</p>',$scrapehtml);
$data['abstract'] = str_replace('<p class="no_t_m">','',str_replace('</p>','',$this->split_between('<h3 class="no_b_m">Abstract','</div>',$scrapehtml)));
$strip = explode('<div class="ids">', $scrapehtml);
$strip2 = explode('</div>', $strip[1]);
$ids[] = $strip2[0];
$id_test = strpos($strip[2],"PMCID");
if (isset($strip[2]) && $id_test !== false)
{
$step = explode('</div>', $strip[2]);
$ids[] = $step[0];
}
$id_count = 0;
foreach ($ids as &$value) {
$value = str_replace("<h3>", "", $value);
$data['ids'][$id_count]['id'] = str_replace("</h3>", "", str_replace('<span>','',str_replace('</span>','',$value)));
$id_count++;
}
$jsonAbstract = json_encode($data);
echo $this->indent($jsonAbstract);
}
我强烈建议您尝试一下PHP Simple HTML DOM解析器库。 它处理无效的HTML,旨在解决您正在处理的相同问题。
文档中的一个简单示例如下所示:
// Create DOM from URL or file
$html = file_get_html('http://www.google.com/');
// Find all images
foreach($html->find('img') as $element)
echo $element->src . '<br>';
// Find all links
foreach($html->find('a') as $element)
echo $element->href . '<br>';
使用正则表达式来处理任何事情都不是必须的,尽管使用它们并知道何时使用它们会很有用。
它看起来像你刮的PubMed,我猜在加价方面有相当的静态标记。 如果你有什么工作和执行,你希望我看不到任何理由切换到使用正则表达式,他们不一定会在这个例子中更快。
学习正则表达式并尝试使用一种语言,这种类型的任务包括perl或python。 它会为你节省很多时间。 起初他们可能看起来令人生畏,但他们对于大部分任务来说非常简单。 尝试阅读:http://perldoc.perl.org/perlre.html
链接地址: http://www.djcxy.com/p/16535.html上一篇: Is using PHP's explode() for HTML scraping considered a bad practice?
下一篇: php