2013-07-13 47 views
2

我期待通過包含元素的HTML請求解析提取網址:從標籤

<img src="https://pbs.twimg.com/media/...." alt="Embedded image permalink"</a> 

要設法得到IMG SRC標籤。我想要的只是網址。

在這一點上,我可能會過度。使用Request和Cheerio嘗試完成此操作。

在我嘗試做這20個不同的方式這裏是我目前的代碼。

var dummy; 
request('http://t.co/....', function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
    $ = cheerio.load(response.body); 
    dummy = $('img[alt=Embedded image permalink]').attr('html'); 
    console.dir(dummy); 
    } 
} 

我得到的錯誤信息:

selector = selector.substr(data[0].length); 
TypeError: Cannot read property '0' of null 

正如我已經說過了,可能這過於複雜。什麼是最簡單的(或者僅僅是功能性)的方式來做到這一點?

+0

爲什麼你不只是使用一些更瑣碎,像字符串函數和正則表達式? –

+0

我絕對過於複雜的事情。開始使用正則表達式,但我的正則表達式技能沒有達到鼻菸 - 拋棄它並轉向這個方向。傑里米,試過了,只是有未定義的錯誤? – chuckjones242

回答

1

使用正則表達式!

像這樣的東西應該做的伎倆:

html.match(/<img [^>]*src="([^"]*)"/g) 

看到這裏的工作例如:http://www.rubular.com/r/f89Y9fHGtN(注意:紅寶石正則表達式比那些JS有點不同,但我不知道該這樣一個很酷的工具。後者)

 


正則表達式說明:

<img - 符合標籤的開頭。

[^>]* - 有點棘手。這可以擺脫src參數前面的內容(例如,參數alt)。此版本在參數內部存在>字符時失敗,這可能不會發生。您可以嘗試用.*替代此部分,該部分將在此情況下起作用,另一方面,當參數值以src=結尾時失敗。

src=" - 這找到了src參數。

([^"]*) - 捕獲裏面的URL。

" - 發現值的結尾。

 

一些人,當遇到一個問題,認爲「我知道,我將使用正則表達式。」現在他們有兩個問題。

 

+0

更接近這兩種方法!所以這裏是現在的情況。以此URL爲例:https://twitter.com/LindsayBaines/status/355971561175531520/photo/1/large並通過rubular運行HTML。您可以獲取頁面上的所有圖像。我試圖把它縮小到最後附加的那個:large。這就是爲什麼我試圖得到匹配... data-url =「https://pbs.twimg.com/media/BPCqP7ZCQAEe1Pg.png:large」 data-resolved-url-large =「https:// pbs.twimg.com/media/BPCqP7ZCQAEe1Pg.png:large「> – chuckjones242

+0

這有幫助嗎? 'html.match(/ )* src =「([^」] *:large)「/ g)' –

+0

爲了清楚起見,我只在捕獲塊中添加了':large'部分。 –

0

因此,如果我理解正確,您想立即減去url跟在src字符串中的文本字符串?

爲什麼你不把所有的文本放在一個變量中,然後雙重分割?

例如:

var arrayOfElements = $("#txt").val().split("src="); 
    var replacing = arrayOfElements[1].replace(/"/g, "'"); 
    var url = replacing.split("'"); 

    //You can now access the element by using url[1] 

你可以看到一個工作示例HERE。祝你好運!