簡體   English   中英

使用 xpath 從格式不正確的頁面解析 XML

[英]Parse XML from not well formed page using xpath

Notice : While writing this question, I notice that there is a Github API that solves my problem without HTML parsing: https://api.github.com/repos/mozilla/geckodriver/releases/latest I decided to ask it anyway since I我測試了如何解決所描述的解析格式錯誤的 HTML 本身的問題。 所以請不要投票,因為它有一個 github API。 我們可以用任何其他頁面拋出驗證錯誤替換 github。

我想下載最新版本的geckodriver 通過獲取最新標簽的重定向目標,我在發布頁面上

curl $(curl -s "https://github.com/mozilla/geckodriver/releases/latest" --head | grep -i location | awk '{print $2}' | sed 's/\r//g') > /tmp/geckodriver.html

geckodriver-vx.xxx-linux64.tar.gz的第一個資產是必需的鏈接。 由於 XML 是示意圖,因此應正確解析。 xmllint 等不同的xmllint可以使用xpaths解析它。 由於 xpath 對我來說是新的,因此我嘗試了對 header 的簡單查詢。 但是xmllint拋出了很多錯誤:

$ xmllint --xpath '//div[@class=Header]' /tmp/geckodriver.html
/tmp/geckodriver.html:51: parser error : Specification mandate value for attribute data-pjax-transient
  <meta name="selected-link" value="repo_releases" data-pjax-transient>
                                                                      ^
/tmp/geckodriver.html:107: parser error : Opening and ending tag mismatch: link line 105 and head
  </head>
         ^
/tmp/geckodriver.html:145: parser error : Entity 'nbsp' not defined
                Sign&nbsp;up
                          ^
/tmp/geckodriver.html:172: parser error : Entity 'rarr' not defined
es <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;
...

還有很多。 似乎 github 頁面的格式不正確,因為規范要求它。 我也試過xmlstarlet

xmlstarlet sel -t -v -m '//div[@class=Header]' /tmp/geckodriver.html

但結果是相似的。

當 HTML 格式不正確時,是否無法使用這些工具提取一些數據?

curl $(curl -s "https://github.com/mozilla/geckodriver/releases/latest" --head | grep -i location | awk '{print $2}' | sed 's/\r//g') > /tmp/geckodriver.html

使用-L可能更簡單,並讓curl遵循重定向

curl -L https://github.com/mozilla/geckodriver/releases/latest

然后, xmllint 接受--html參數,以使用 HTML 解析器:

xmllint --html --xpath '//div[@class=Header]'

但是,這與該頁面上的任何內容都不匹配,因此您可能希望將 XPath 基於以下內容:

'string((//a[span[contains(.,"linux")]])[1]/@href)'

產生:

/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-linux32.tar.gz

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM