2017-09-13 68 views
1

我試圖解析HTML頁:REBOL解析HTML:得到錯誤「稱號沒有價值」

url: https://dzone.com/articles/2-entity-framework-alternatives-or-give-me-data 
html: read url 

parse html [ 
    to {<h1 class="article-title" itemprop="headline">} 
    thru {<h1 class="article-title" itemprop="headli 
    ne">}copy title to {</h1>} 
] 

probe title 

不明白爲什麼這是行不通的,因爲我得到錯誤「的稱號有沒有值「

+0

我假設你有某種複製/粘貼錯誤編輯你的問題。但是如果你真的在你的字符串中有一個換行符,把它分割爲''headli'和'ne'>'',這是一個多行字符串,並且會嘗試將換行符作爲內容的一部分,所以我把它放回去了這是你問題的真正根源。 – HostileFork

+0

@HostileFork哎呀愚蠢的錯誤,我在火車上編碼:) – user310291

+0

請注意,** {無論}通過{無論} **將具有相同的效果,通過{無論} ** ...例如。 THRU包括TO的搜索邏輯以及數據的消耗。 – HostileFork

回答

3

我假設你使用Rebol/view,因爲免費版本不會做https,雖然rebol3會。

如果你想看看是否有什麼工作,你應該看看解析的返回值,你會看到它是false這意味着你的解析規則有問題。無論如何,這適用於我雖然標籤周圍的引號是沒有必要的,因爲<>都是字符串分隔符。

>> parse html [ 
    thru <h1 class="article-title" itemprop="headline"> 
    thru <h1 class="article-title" itemprop="headline"> 
    copy title to </h1> to end 
] 
== true 

>> trim/head/tail title 
== "2 Entity Framework Alternatives (or Give Me Data!)" 
+0

rebol3是否支持https?在Win 32 v 2.101.0.3.1上,我得到: ''>>閱讀https://www.dzone.com **訪問錯誤:缺少端口方案:https – Edoc

1

因爲第一to停止之前匹配的字符串,使thru開始在<h1 ...>中第一次出現的開始,而不是在第二,你可能會認爲它不工作,最有可能。在嘗試搜索第二個之前,您需要跳過第一個匹配項。你可以做到這一點使用兩個thru規則如圖另一個答案,或者只是重複規則的兩倍,以避免重複它:

parse html [ 
    2 thru <h1 class="article-title" itemprop="headline"> 
    copy title to </h1> to end 
] 

通知最終to end規則,這將使parse回報true如果你的規則,在實現成功結束。 to end規則是一個佔位符規則,因爲您不在乎跟隨</h1>的內容,而是希望無論如何都能達到輸入的結尾。

編輯:測試您提交的代碼在這裏工作正常不變。編輯你的問題實際上已經解決了錯誤的原因。我可以用您的original code重現您的問題。