2010-11-03 75 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