http://mirror6.club.sohu.com/readjsnew-nature_pics-586596-0.html打开上面的网址就明白怎么回事了...

解决方案 »

  1.   

    打开那页面地址栏运行如下代码...javascript:(function(is){var i,r=/"([^"]+)"/,o={},a=[];for(i=0;i<is.length;i++){if(is[i].nodeType!=3){if(is[i].tagName=="IMG"){if(!o[is[i].src])o[is[i].src]=1;}else if(r.test(is[i].currentStyle.backgroundImage)){if(!o[RegExp.$1])o[RegExp.$1]=1;}}}for(i in o)a[a.length]=i;document.body.innerHTML='<img alt="" src="'+a.join('" \/><br \/><img alt="" src="')+'" \/>';})(document.getElementsByTagName("*"));
    for
    http://blog.csdn.net/muxrwc/archive/2007/09/12/1781928.aspx
      

  2.   

    1, ajax取回网页源码, 用正则取得所有.2, 用IFRAME放个URL, 在parent里面取得IFRAME里网页所有document.images
    for(var i in document.images)
    alert(i.src);3, 到flashget根目录找找他的接口网页.4, 等别人回答. 只能说这么多了. 谢谢.
      

  3.   

    哦.上面不能用FOR IN.只能用for(var i=0;i<document.images.length;i++)
    alert(document.images[i].src);
      

  4.   

    muxrwc:
    非常感谢,
    不过我不知道怎么运行你的JScript code,没有经验
    可否指教一二。
      

  5.   

    他的那页里面的代码是完整的, 下面的那一堆只是压缩过后的.
    原理也就是用document.getElementsByTagName("*)取得所有元素,然后用正则过滤一次.
    但问题是你要取搜狐的图片. 你可以把JS代码写到他的网页里面吗? BS不付负责的回答..
      

  6.   

    - -发表于:2008-04-08 10:33:374楼 得分:0 
    打开那页面地址栏运行如下代码...  我有说过的吧?
    我说用IE打开目标页,
    然后从目标页的IE地址栏运行此代码..我那文章里也介绍过了...PS
    你说的那个images for in的方法若在IIS运行会受到同源策略的显示..则会报一个没有权限的错误.
    不管你的iframe属于top或者是子页..
      

  7.   


    呵呵.那么看来只能用AJAX了. 但AJAX也有同域问题.
    至于FLASHGET的, 它注册过ACTIVEX当然很好办. 只要C分析当前网页就行了.
    你的代码直接用javascript:xxx放IE地址栏里面.....可能有也是没啥用的哦. 呵呵.
    LZ你去看看他们的帖子有没提供RSS或者XML, 有的话会好办点.
      

  8.   

    muxrwc:
    你的方法可以得到问题中网页的图片,但是换个帖子就不能工作了,比如:
    http://club.women.sohu.com/r-fashion-1421541-0-9562-0.html
    这个就不行了。不知道为什么。rotApple:
    学习ajax要什么基础吗
      

  9.   

    muxrwc: 
    对不起,你的方法可以。
    但是我有个问题,
    你的方法可以定义带有参数输入吗。
    比如说输入一个网址作为参数,就可以得到图片的链接。
    因为我有很多网页。但是网页地址有规律。我想做个网页列表,然后批量运行你的程序,或者你的程序读入这个网页列表,
    输出所有图片的链接,最后用其他下载软件下载。不知道你有更好的建议吗。
      

  10.   

    你是不是要做网摘啊. 就是新闻小偷和音乐小偷之类? 你要做图片小偷?那只能AJAX, 你可以去百度搜ajax新闻小偷看看就知道了.这种程序原理(AJAX)就是在服务器用XmlHttpRequest取得目标地址的HTML代码, 然后可以用楼上那位同志提供的正则过滤出图片地址即可.
      

  11.   

    没有呢。LP喜欢图片,给我分配的任务。JScript可以像一般应用程序,带输入参数运行吗。 
      

  12.   

    当然不能了. JScript不是你想像的C,VB之类可以单独运行的程序.它是一种脚本, 没有浏览器执行它, 它单独是运行不了的. 所以JScript只能在网页(或其它有运行环境的宿主)里运行.
      

  13.   


    如果你只是抓图片, 你应该会C吧?SOCKET打开网页,请求回来的所有源码用BOOST的REGEX分析出来, 再自动SOCKET一个个请求回来保存到本地, OVER啦! 呵呵.BOOST::REGEX类去sourceforge.net下载.
    SOCKET请求的类可以用AmHttpSocket, 这个类的使用很简单, 可以去网上找一下.
      

  14.   

    哪有什么办法可以:
    1。 从文件读入页面地址
    2。 调用muxrwc的代码,分析指定页面,
    3。 保存滤出的图片地址
      

  15.   

    C会,但是SOCKET,BOOST都不会。这些需要从头开始学,可以尝试一下!
      

  16.   


    一, 从文件读入页面地址
        正常理论是做不到的, 或者FSO, 或者AJAX二, 调用muxrwc的代码,分析指定页面
        不可能, 它的代码只能运行在IE地址栏, 分析不了页面三, 保存滤出的图片地址
        JS做不到保存, 只能用FSO.但前提是如果在本地用FSO的话, 打开网页后会提示脚本不安全.
    不建议.
      

  17.   


    所以, 你需要的功能建议是从C写个基于CMD窗口的程序. 会好一点. JS做到你提的三点非常非常勉强..  几乎做不到.
      

  18.   

    明白了。
    BOOST的REGEX可以完成muxrwc代码的分析功能吗,
    感觉都是正则过滤。
      

  19.   

    muxrwc:
    请问你的分析js包内图片程序可以通过java或者C#实现吗,语法和jscript一样吗?
      

  20.   

    抱歉,我前几天刚想学.net
    对于C#还不是很了解...
    所以还不能改成那个版的...
    不过如果能用C#可以直接用socket实现..比这个效率要高的多...<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>着急回家细节没处理,比如多层iframe啊编码啊。。等问题</title>
    <style type="text/css">
    html, body {
    height:100%;
    padding:0;
    margin:0;
    }body {
    text-align:center;
    }1iframe {
    display:none;
    }textarea {
    width:990px;height:535px;
    width:500px;
    height:200px;
    }
    </style>
    <script language="vbscript">
    Function vbTOGB(bata)
    Dim i, ThisCharCode, NextCharCode
    Dim Strng: Strng = ""
    For i = 1 To LenB(bata)
    ThisCharCode = AscB(MidB(bata, i, 1))
    If ThisCharCode < &H80 Then
    Strng = Strng & Chr(ThisCharCode)
    Else
    NextCharCode = AscB(MidB(bata, i + 1, 1))
    Strng = Strng & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
    i = i + 1
    End If
    Next
    vbTOGB = Strng
    End Function
    </script>
    <script type="text/javascript">
    var LOOK = {

    obj : null

    , empty : new Function , pool : [] //Iframe未使用池 , makeAJAX : function () {
    //做一个XMLHTTP
    return new window.ActiveXObject('Microsoft.XMLHTTP');
    }

    , borrowAJAX : function () {
    //借出一个XMLHTTP
    return this.pool.length ? this.pool.pop() : this.makeAJAX();
    }

    , returnAJAX : function (ajax) {
    //还给一个Iframe
    this.pool[this.pool.length] = ajax;
    }

    , send : function (url, callback) {
    //随便拽个对象,随便的用下
    var wc = this, ajax = this.borrowAJAX(); //借用

    ajax.open('GET', url, true) //暂不考虑缓存
    ajax.onreadystatechange = function () {
    if (ajax.readyState == 4) {
    if (ajax.status == 200) callback(url, vbTOGB(ajax.responseBody));
    ajax.onreadystatechange = wc.empty;
    wc.returnAJAX(ajax);
    }
    }
    ajax.send(null);
    }

    , callback : function (url, value) {

    var o = {}, a = [], i;

    var pat1 = /url\s*\(([^)]+)\)/ig; //样式表里
    var pat2 = /<(?:"[^"]*"|'[^']*'|[^"'>])+?background=(?:"([^"]*)"|'([^']*)'|([^ "'>]*))(?:"[^"]*"|'[^']*'|[^"'>])*>/ig; //元素的背景图
    var pat3 = /<img(?:"[^"]*"|'[^']*'|[^"'>])+?src=(?:"([^"]*)"|'([^']*)'|([^ "'>]*))(?:"[^"]*"|'[^']*'|[^"'>])*>/ig; //IMG元素的属性
    //暂时先管这么多

    while (pat1.test(value)) {
    i = RegExp.$1;
    if (!o[i]) o[i] = 1;
    }
    while (pat2.test(value)) {
    i = (RegExp.$1 || '') + (RegExp.$2 || '') + (RegExp.$3 || '');
    if (!o[i]) o[i] = 1;
    }
    while (pat3.test(value)) {
    i = (RegExp.$1 || '') + (RegExp.$2 || '') + (RegExp.$3 || '');
    if (!o[i]) o[i] = i;
    }

    for (i in o) a[a.length] = i.indexOf('http://') > -1 ? i : url + i;
    this.obj.value += a.join('\n') + '\n';

    }

    , search : function (urls) {
    var wc = this;
    for (var i = 0 ; i < urls.length ; i ++) {
    this.send(urls[i], function () { wc.callback(arguments[0], arguments[1]); });
    }
    }

    , get : function (id) {
    var obj = this.obj = document.getElementById(id), a = obj.value.match(/^http:\/\/.*?$/img);
    obj.value = ''
    this.search(a);
    }};
    </script>
    </head>
    <body>
    <textarea id="wc">
    http://www.google.cn/
    http://www.baidu.com/
    </textarea>
    <input type="button" value="get" onclick="LOOK.get('wc')" />
    </body>
    </html>
      

  21.   

    刚开始想用IFRAME,后来发现用HTA还是有同源策郁闷了...白写了半天...而后又改成XMLHTTP了.
      

  22.   

    非常感谢muxrwc:
    好像不能访问js包里面的图片,
    能否加上对他们的检测。
      

  23.   

    muxrwc: 
    你的程序就快达到我的要求了。
    不知道一次输入1000个网址,可能输出10000个链接,你的程序不会出现问题吧:-)麻烦你到下面这个链接去发言,我好结贴,给你100分。
    http://topic.csdn.net/u/20080404/23/3a727f0d-5644-4b3c-94ea-1e14d995b3ea.html 
      

  24.   

    晕倒...
    别放那么多啊...
    我没控制排队什么的...
    基本属于多少次请求多少个对象,而且都是for执行的,你放那么多,很可能会down的...
    另外..
    如果匹配css里和js里.
    css到是没问题.如果是js的话那很麻烦的..
    因为规则相当的不严紧...
    所以很麻烦的...
      

  25.   

    专家muxrwc: 
    我有几点不明白:
    javascript:(function(is){var i,r=/"([^"]+)"/,o={},a=[];for(i=0;i<is.length;i++){if(is[i].nodeType!=3){if(is[i].tagName=="IMG"){if(!o[is[i].src])o[is[i].src]=1;}else if(r.test(is[i].currentStyle.backgroundImage)){if(!o[RegExp.$1])o[RegExp.$1]=1;}}}for(i in o)a[a.length]=i;document.body.innerHTML='<img alt="" src="'+a.join('" \/><br \/><img alt="" src="')+'" \/>';})(document.getElementsByTagName("*"));1,为什么你这个程序可以读js包内图片;
    2,是哪条语句读js包内图片链接(我看不出来);
    3,is是什么,怎么把XMLHTTP程序里面的value(网页的content)转成is;
    4,为什么你的XMLHTTP里面就不能实现上面这个程序读js包内图片链接的功能;再次感谢!
      

  26.   

    xmlhttp那个方式是访问那个页面,然后按正则规则抓取(那个东西有中文图片名的BUG)因为米处理乱码,:D而
    javascript:
    是在当前状态下。。
    利用dom来抓所有的元素
    如果元素是img则读src
    否则读手选样式的背景图片即backgroundImage另外当前状态下,是JS执行完毕的状态。
    就是说。你用JS通过DOM来修改HTML元素的属性后
    这样执行获取的语句,自然就有一些图片地地址了第二种是
    javascript:alert(document.documentElement.outerHTML);第一种是
    直接查看文件源代码通俗的说,第一种是执行前的HTML代码分析的
    第二种是执行后的代码分析的。
      

  27.   

    总算明白一点了。
    那有没有可能实现
    后台执行js,然后分析执行后的代码。
    这样问题是不是就可以解决了。
    本人不懂,随便想的。如果我要学习web开发,分析的话,应该从什么开始,html,xml,jscript,ajax....???
      

  28.   

    通俗的说,第一种是执行前的HTML代码分析的 
    第二种是执行后的代码分析的。
    说反了- -可以分析。不过就是麻烦点:D学web开发的话可以先从html入手
      

  29.   

    :D
    还有1W3多才升星呢T_T飘走忙去
      

  30.   

    一般策略
    1\取得源码,各种方式均可,VB之类的可用xmlhttp
    2\正则提取链接地址,各种语言均有正则
    3、远程读取或链接(可以直接链接,也可保存本地xmlhttp就可以)