我正在尝试使用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
有谁知道我怎么能够完成这样的事情?或者有任何其他想法不涉及令人讨厌的正则表达式和逻辑? :)
提前致谢!
答案 0 :(得分:0)
如果您特别想避免"注意麻烦的正则表达式和逻辑",您是否考虑过HtmlAgilityPack?
以下简要代码应显示从bbc.co.uk网站下载的HTML中包含的所有图像网址。扩展此代码以解析从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