2010-11-03 71 views
0

我的工作在PHP(这是非常新的我)解析器通过以下源搜索:解析HTML与PHP

http://web2.uconn.edu/wdlcalendar/index.php/month/list/2010-11-02/All/All/UConn_Master_Calendar1/

解析器的目标是存储所需本地机器上的数据库中的信息:我们需要日期(例如11月1日),事件的名称,事件的时间以及指向该特定事件的“更多信息”页面的链接(它嵌入在作为超链接的事件的名称)。

第一部分:我使用getElementsByTagName(“h3”)获取日期,例如11月1日。但是,在HTML文档中,我不想要其他两个元素。

问题:有没有办法告诉解析器关注代码的特定部分或特定的字符串?

第二部分:我遇到的另一个问题是,指向事件页面的链接和代表事件名称的字符串在同一个HTML标记中混合在一起。我如何分别取出这些信息,因为getElementsByTagName()函数(以我的理解)将无法做到这一点。下面是HTML的一部分:

<a class="smoothbox" href="http://web2.uconn.edu/wdlcalendar/index.php/occurrence/57237"> 
WEAR RED DAY 
<em>All Day</em> 
</a> 
</li> 

的想法是,我想有“穿红色DAY”(名称)“全天”(时间)和“http://web2.uconn.edu /wdlcalendar/index.php/occurrence/57237“(链接)作为单独的元素存储在我们的数据库中。怎么样?!

+0

请问您可以告诉我们您正在使用哪个解析器? – texpert 2010-11-03 00:50:05

+0

*(相关)* [解析HTML的最佳方法](http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662) – Gordon 2010-11-03 08:18:47

+0

http://www.codinghorror.com /blog/2009/11/parsing-html-the-cthulhu-way.html – APC 2010-11-04 05:51:53

回答

4

如果你正在手动编写解析器,你做错了。我的建议是你使用existing HTML parser。另一种选择是尝试使用正则表达式来解决您的问题,但如果您的页面格式发生任何变化,它更可能是一个脆弱的临时解决方案。

+1

建议第三方替代[SimpleHtmlDom](http://simplehtmldom.sourceforge.net/),它实际上使用[DOM](http:// php.net/manual/en/book.dom.php)而不是字符串分析:[phpQuery](http://code.google.com/p/phpquery/),[Zend_Dom](http://framework.zend .com/manual/en/zend.dom.html),[QueryPath](http://querypath.org/)和[FluentDom](http://www.fluentdom.org)。 – Gordon 2010-11-03 08:18:27

+1

建议SimpleHTMLDom和正则表达式就像告诉OP在瘟疫和霍乱之间做出选择。 – Gordon 2010-11-03 08:23:40

+0

公平不够,提高您的额外建议。这里的主要观点是,建议他继续尝试编写自己的解析器的道路更糟糕。 – M2tM 2010-11-03 16:31:07