2012-07-13 64 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

相关问题