[英]How do i parse json data retrieved from php script in javascript or jquery
[英]Parse data from JavaScript of retrieved page
我正在使用OpenURI檢索網頁:
require 'open-uri'
page = open('http://www.example.com').read.scrub
現在,我想解析檢索到的頁面的屬性playerurl
, playerdata
和pageurl
的值。 它們出現在<script>
標記中:
<script>
..
..
PlayerWatchdog.init({
'playerurl': 'http://cdn.static.de/now/player.swf?ts=2011354353',
'playerdata': 'http://www.example.com/player',
'pageurl': 'http://www.example.com?test=2',
});
..
..
</script>
什么是最明智的方式來做到這一點?
您可以使用HTML解析器(例如Nokogiri )來分解HTML文檔,並快速找到所需的<script>
標記。 <script>
標記內的內容是文本,因此Nokogiri的text
方法將返回該text
。 然后,可以有選擇地檢索所需的行,可以通過一個簡單的正則表達式來完成:
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<html>
<head>
<script>
PlayerWatchdog.init({
'playerurl': 'http://cdn.static.de/now/player.swf?ts=2011354353',
'playerdata': 'http://www.example.com/player',
'pageurl': 'http://www.example.com?test=2',
});
</script>
</head>
</html>
EOT
script_text = doc.at('script').text
playerurl, playerdata, pageurl = %w[
playerurl
playerdata
pageurl
].map{ |i| script_text[/'#{ i }': '([^']+')/, 1] }
playerurl # => "http://cdn.static.de/now/player.swf?ts=2011354353'"
playerdata # => "http://www.example.com/player'"
pageurl # => "http://www.example.com?test=2'"
at
返回第一個匹配的<script>
Node實例。 根據HTML,您可能不需要第一個匹配的<script>
。 您可以改用search
,它會返回NodeSet ,類似於Nodes的數組,然后從NodeSet中獲取特定的元素,或者可以使用XPath代替CSS選擇器,從而輕松地指定特定的所需標簽的出現。
找到標簽后, text
將返回其內容,任務將從Nokogiri轉到使用模式來查找所需內容。 /'#{ i }': '([^']+')/
是尋找單詞的簡單模式,在i
傳入,后跟: '
然后捕獲所有內容,直到下一個'
。 該模式將傳遞給String的[]
方法。
Ruby沒有內置的javascript解析功能。 您可以使用正則表達式,盡管它對頁面的格式非常敏感(例如,如果頁面開始使用雙引號來表示字符串,則該表達式會中斷):
playerurl = page[/'playerurl':\s*'([^']*)'/, 1]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.