3

我正在尝试使用 VB.NET (2010) 来获取出现在特定网页上的每个图像的绝对 URL。到目前为止,我已经弄清楚如何获取图像标签内的所有 URL,就像这样......

        For Each SeparateImage As HtmlElement In WebBrowser1.Document.Images
        ListBox1.Items.Add(SeparateImage.GetAttribute("src"))
        Next

这完美无缺。但我不知道如何提取出现在 CSS 样式中的图像 URL。例如...

        background-image:url('image.jpg');

有谁知道一个简单的方法来做到这一点?我不仅需要从内联 CSS 代码中提取图像 URL,还需要从外部样式表中提取图像 URL。

我认为一种方法是获取整个 HTML 页面页面和相关 CSS 样式表的源代码,然后使用一堆字符串拆分和/或正则表达式解析出所有图像 URL。但是,由于我可能会遇到“相对”URL 路径的所有不同可能性,因此找出每个图像的正确绝对URL 可能会变得相当复杂。例如...

    background-image:url('image.jpg');
    background-image:url('/image.jpg');
    background-image:url('./image.jpg');
    background-image:url('../image.jpg');
    background-image:url('../otherdirectory/image.jpg');

所以......如果有这样的东西真的很好......

        For Each CSS_Style As HtmlElement In WebBrowser1.Document.Styles
        ListBox1.Items.Add(CSS_Style.GetAttribute("background-image"))
        Next

有谁知道我如何能够完成这样的事情?或者有任何其他不涉及令人麻木的正则表达式和逻辑的想法?:)

提前致谢!

4

1 回答 1

0

如果您特别想避免“对正则表达式和逻辑感到麻木”,您是否考虑过HtmlAgilityPack

以下简短代码应显示从 bbc.co.uk 网站下载的 HTML 中包含的所有图像 URL。扩展此代码以解析来自 HTML 文档引用的任何 CSS 文件的图像链接应该不会太难。

Imports HtmlAgilityPack

Module Module1

    Sub Main()
        Dim mainUrl As String = "http://www.bbc.co.uk"
        Dim doc As HtmlDocument
        doc = New HtmlDocument()
        Dim sourceString As String = New System.Net.WebClient().DownloadString(mainUrl)
        doc.LoadHtml(sourceString)
        For Each link As HtmlNode In doc.DocumentNode.SelectNodes("//img[@src]")
            Dim linkAddress = GetAbsoluteUrl(link.Attributes("src").Value, mainUrl)
            Console.WriteLine("Image: {0}", linkAddress)
        Next
    End Sub
    '
    Function GetAbsoluteUrl(partialUrl As String, baseUrl As String)
        Dim myUri = New Uri(partialUrl, UriKind.RelativeOrAbsolute)
        If (myUri.IsAbsoluteUri = False) Then
            myUri = New Uri(New Uri(baseUrl), partialUrl)
        End If
        GetAbsoluteUrl = myUri
    End Function

End Module
于 2015-12-14T16:14:54.520 回答