2012-07-13 26 views
0

我有一個大字符串(來自網頁的html代碼)。製作一個包含在一個大字符串中的鏈接數組

現在的問題是如何解析圖像的鏈接。

我想製作該網頁中所有圖像鏈接的數組。

我知道如何做到這一點我的java,但我不知道如何做解析字符串,並在shell中做字符串操作。我知道有很多技巧,我想這可以很容易完成。

到底

我想是這樣的

#!/bin/bash 

read BIG_STRING <<< $(curl some_web_page_with_links_to_images.com) 

#parse the big string and fill the LINKS variable 

    # fill this with the links to image somewhow (.jpg and .png only) 
    #after the parsing the LINKS should look like this 
    LINKS=("www.asd.com/asd1.jpg" "www.asd.com/asd.jpg" "www.asd.com/asd2123.jpg") 


    #I need the parsing and to fill the LINKS variable with the links from the web page 

    # get length of an array 
    tLen=${#LINKS[@]} 


    for ((i=0; i<${tLen}; i++)); 
    do 
     echo ${LINKS[$i]} 
    done 

謝謝您的答覆,你救了我的挫折

+2

'for url in「$ {LINKS [@]}」;做echo $ url; done'。但是,我認爲你不會從試圖在'bash'中解析HTML獲得任何東西。 – chepner 2012-07-13 15:03:07

回答

0

的日子很難提供比近似更多。讓我們假設所有的有趣環節都href=""屬性,並有至多一個href每行屬性(和鏈接也只有一條線,其實我不知道如果換行被允許裏面的URL。

讓我們假設你的資源文件是所謂test.html

下應打印在這些假設下的所有鏈接:

sed -n 's/.*\<href="\([^"]*\)".*/\1/p' test.html 

要理解這是如何工作的,你應該知道什麼是正則表達式,並已閱讀了關於sed的教程(特別是如何s ubstitute命令有效)

+0

但這會找到所有的鏈接,對不對?如何找到* .jpg和* .png鏈接,即鏈接以jpg或png結尾 – Lukap 2012-07-13 15:15:18

+0

@Lukap:多次傳遞:第1步,查找所有'href's;第2步,找到你想要的。進一步實現這個複雜的正則表達式是可能的,但可能不是最好的解決方案。也就是說,它會是'sed -r -n -e's /.* \ Sorpigal 2012-07-13 16:03:23

+0

@Lukap :這兩步解決方案就像'sed -n's /.* \ 2012-07-13 17:26:49

1

爲什麼不從正確的工具開始?解析HTML很困難,特別是sed。如果從Mojolicious項目有mojo工具,你可以這樣做:

mojo get http://example.com a attr href 

然後就是檢查每個行是否與jpgpng,或任何結束。

+0

+1取決於你需要做什麼,'mojo'可能是一個很好的(因爲「更正確」)專業解決方案(即使沒有辦法做它在面對無效的真實世界輸入時「完全正確」)。另一方面,正則表達式很好理解,沒有人知道mojo /它是否安裝了... – 2012-07-13 17:39:07

相關問題