收录日期:2018/10/22 22:46:01 时间:2016/05/20 18:27:55 标签:ASP.NET
我现在有一个html文件,里面存在<img src='1.jpg'>之类的东西,我想截得那些图片,不知道如何做。本来想用正则表达式,但是不太正确,况且htm里包含了css,css里面可能还链接了图片,所有找不全图片。
是不是可以用httphandler截到每一个对服务器得请求
请高手指教!
先从<body>开始判断呀。
如果在客户端,可以用
var iLen = document.getElementsByTagName("IMG").length;
alert(iLen);
for(var i = 0; i < iLen; i ++)
{
var oNode = document.getElementsByTagName("IMG").item(i);
alert(oNode.src);
}
如果是服务端取得html文件来进行判断的话,

就搜索"<IMG"打头的标签
in javascript, do

<script>
alert(document.images.length);
</script>

>>>是不是可以用httphandler截到每一个对服务器得请求

yes, but you need to map those images tag to aspnet_isapi.dll and map them to a handler if you want
in javascript, do

<script>
alert(document.images.length);
</script>

>>>是不是可以用httphandler截到每一个对服务器得请求

yes, but you need to map those images tag to aspnet_isapi.dll and map them to a handler if you want
9494,up
panyee is right
我举一个例子,如果下面有一个语句,你能截出图片地址吗
<img title='test' src='asdf/sdf.jpg'  title='123123.jpg' >
我觉得客户端,快乐王子的方法不错,如果在服务器端,我上面的语句,你能截得出吗?
如果用正则表达式,总是不准确,因为不正确的html代码,浏览器一样能解析
比如说
<img  src=asdf/sdf.jpg  title='123123.jpg' board='0' >
<img  src='asdf/sdf.jpg'  title='123123.jpg' >
<img  src="asdf/sdf.jpg"  title='123123.jpg' >
<img  title='123123.jpg'  src="asdf/sdf.jpg"   >
这上面几句,变化无穷,其实是一个图片路径,如果用正则表达式,恐怕达不到效果
高手指教



输入一个地址,就可以把那个网页中的链接提取出来,下面这段代码可以轻松实现,主要的是用到了正则表达式。查看例子 

GetUrl.aspx代码如下:

<%@ Page Language="vb" CodeBehind="GetUrl.aspx.vb" AutoEventWireup="false" Inherits="aspxWeb.GetUrl" %>
<html>
<head>
<META http-equiv="content-type" content="text/html; charset=gb2312">
</head>
<body>
<form id="Form1" method="post" runat="server">
  <P>
    <asp:Label id="Label1" runat="server"></asp:Label>
    <asp:TextBox id="urlTextBox" runat="server" Width="336px">
http://lucky_elove.www1.dotnetplayground.com/
</asp:TextBox>
    <asp:Button OnClick="scrapeButton_Click" id="scrapeButton" runat="server"></asp:Button>
 </P>
  <HR width="100%" SIZE="1">
  <P>
    <asp:Label id="TipResult" runat="server"></asp:Label>
    <asp:TextBox id="resultLabel" runat="server" TextMode="MultiLine" 
Width="100%" Height="400"></asp:TextBox>
 </P>
</form>
</body>
</html> 
后代码GetUrl.aspx.vb如下:

Imports System.IO
Imports System.Net
Imports System.Text
Imports System.Text.RegularExpressions
Imports System

Public Class GetUrl
  Inherits System.Web.UI.Page
  Protected WithEvents Label1 As System.Web.UI.WebControls.Label
  Protected WithEvents urlTextBox As System.Web.UI.WebControls.TextBox
  Protected WithEvents scrapeButton As System.Web.UI.WebControls.Button
  Protected WithEvents TipResult As System.Web.UI.WebControls.Label
  Protected WithEvents resultLabel As System.Web.UI.WebControls.TextBox

#Region " Web 窗体设计器生成的代码 "

  '该调用是 Web 窗体设计器所必需的。
  <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

  End Sub

  Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
    'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
    '不要使用代码编辑器修改它。
    InitializeComponent()
  End Sub

#End Region

  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    '在此处放置初始化页的用户代码
    Label1.Text = "请输入一个URL地址:"
    scrapeButton.Text = "分离Href链接"
  End Sub
  Private report As New StringBuilder()
  Private webPage As String
  Private countOfMatches As Int32

  Public Sub scrapeButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    webPage = GrabUrl()
    Dim myDelegate As New MatchEvaluator(AddressOf MatchHandler)

    Dim linksExpression As New Regex( _
        "\<a.+?href=['""](?!http\:\/\/)(?!mailto\:)(?>foundAnchor>[^'"">]+?)[^>]*?\>", _
        RegexOptions.Multiline Or RegexOptions.IgnoreCase Or RegexOptions.IgnorePatternWhitespace)

    Dim newWebPage As String = linksExpression.Replace(webPage, myDelegate)

    TipResult.Text = "<h2>从 " & urlTextBox.Text & "分离出的Href链接</h2>" & _
        "<b>找到并整理" & countOfMatches.ToString() & " 个链接</b><br><br>" & _
        report.ToString().Replace(Environment.NewLine, "<br>")
    TipResult.Text &= "<h2>整理过的页面</h2><script>window.document.title='抓取网页中的链接'</script>"
    resultLabel.Text = newWebPage
  End Sub
  
  Public Function MatchHandler(ByVal m As Match) As String
    Dim link As String = m.Groups("foundAnchor").Value
    Dim rToL As New Regex("^", RegexOptions.Multiline Or RegexOptions.RightToLeft)
    Dim col, row As Int32
    Dim lineBegin As Int32 = rToL.Match(webPage, m.Index).Index

    row = rToL.Matches(webPage, m.Index).Count
    col = m.Index - lineBegin

    report.AppendFormat( _
        "Link <b>{0}</b>, fixed at row: {1}, col: {2}{3}", _
        Server.HtmlEncode(m.Groups(0).Value), _
        row, _
        col, _
        Environment.NewLine _
    )
    Dim newLink As String
    If link.StartsWith("/") Then
      newLink = link.Substring(1)
    Else
      newLink = link
    End If

    countOfMatches += 1
    Return m.Groups(0).Value.Replace(link, newLink)
  End Function

  Private Function GrabUrl() As String
    Dim wc As New WebClient()
    Dim s As Stream = wc.OpenRead(urlTextBox.Text)
    Dim sr As StreamReader = New StreamReader(s, System.Text.Encoding.Default)
    GrabUrl = sr.ReadToEnd
    s.Close()
    wc.Dispose()
  End Function

End Class

try

string s = "............";

Regex re = new Regex(@"<img[^>]+src\s*=\s*(?:(['""])(?<url>.*?)\1|(?<url>\S+))[^>]*>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
MatchCollection mc  = re.Matches(s);
foreach (Match m in mc)
Console.WriteLine(m.Groups["url"].Value);
好东西,up先,收藏再
太谢谢思归了,你真牛
我也知道用正则,但太复杂的不会,呵呵
我好好学习一下
也谢谢快乐王子的好方法。
思归能否告诉我另一种方法
以前在delphi中,我是自定义了一个命名空间,比如说http://<我自定义的命名空间>/1.htm
这样1.htm中的所有图片,包括CSS,JS我都能截到
因为每次向服务器提交的时候,我都能截住
可我不知道.net中怎么做,请思归告诉我,谢谢!
还有你的正则表达式还有点问题
比如<img title='qwe' src=‘asdf/sdf.jpg’  title='src=dddd'>
它截出来的结果是不正确的
请修改你的正则表达式,太深入的我不懂
你给简单说说你的正则表达式吧,谢谢
大家都想听
up 收藏
>>>>这样1.htm中的所有图片,包括CSS,JS我都能截到

don't know what you are talking about, either use MSDHTML to parse your file or use regular expressions

>>>>它截出来的结果是不正确的
Regex re = new Regex(@"<img[^>]+?src\s*=\s*(?:(['""])(?<url>.*?)\1|(?<url>\S+))[^>]*>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
请问如何取得src="file///c:\sdah\sa.jpg"中"c:\sdah\sa.jpg"
是不是Regex re = new Regex(@"<img[^>]+?src\s*=\s*(?:(['""])(?:(file///))(?<url>.*?)\1|(?<url>\S+))[^>]*>", RegexOptions.IgnoreCase | RegexOptions.Singleline);

一个使用Indy控件的问题!!愿出500分 如何使用SQL访问ODBC数据源! 我的IT职业生活(之四) 急,哪位大哥给一个12x12的UNICODE点阵字库,万分感谢! 在线急等,分不够再加! 100分,求阵列卡安装方法的详细资料 一个使用Indy控件的问题!!愿出500分 急,哪位大哥给一个12x12的UNICODE点阵字库,万分感谢! 这个语句应该怎么写?应该算简单的吧 fastreport页数问题? ComboBox的输入限制问题。大家进来看看,特别是高手 求教:如何获得WEB应用程序的根路径 水源这么大,有没有姓\"艾\"的?找同姓.UP有分.哈 今天大家都回来了?我就大宴宾客一天啦!! intel c++ v8.1 与 vs.net 2003 的集成问题 [在线等待] vc下调试,字符型和16进制的转换是怎么实现的? 帮帮我呀!!网络安全的方案 画一个可以拖动的框架时,怎样让他像WINDOWS画板里那样不受背景颜色的影响? 求教各路编程高手 比赛中断 今天在xp上遇到非常怪的一件事 水晶报表3层子报表的实现?希望高手解答. 正在做编译器,有可视化的问题请教 呵呵,今天俺阳历生日,在这里碰到两个生日的了,同喜同喜,放分! 求扩充控件功能的方法、思路? excel中,如何取得某一列数据的个数(重复的不算) 這樣的二次觸發要怎樣寫,高手請進!高分相送,在線等! 正在做编译器,有可视化的问题请教 单击button根据listbox中的项向div中动态添加控件。为什么在单击另一个button时,先前添加的控件都不见了。 别了,丰田杯