, 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>
for
http://blog.csdn.net/muxrwc/archive/2007/09/12/1781928.aspx
for(var i in document.images)
alert(i.src);3, 到flashget根目录找找他的接口网页.4, 等别人回答. 只能说这么多了. 谢谢.
alert(document.images[i].src);
非常感谢,
不过我不知道怎么运行你的JScript code,没有经验
可否指教一二。
原理也就是用document.getElementsByTagName("*)取得所有元素,然后用正则过滤一次.
但问题是你要取搜狐的图片. 你可以把JS代码写到他的网页里面吗? BS不付负责的回答..
打开那页面地址栏运行如下代码... 我有说过的吧?
我说用IE打开目标页,
然后从目标页的IE地址栏运行此代码..我那文章里也介绍过了...PS
你说的那个images for in的方法若在IIS运行会受到同源策略的显示..则会报一个没有权限的错误.
不管你的iframe属于top或者是子页..
呵呵.那么看来只能用AJAX了. 但AJAX也有同域问题.
至于FLASHGET的, 它注册过ACTIVEX当然很好办. 只要C分析当前网页就行了.
你的代码直接用javascript:xxx放IE地址栏里面.....可能有也是没啥用的哦. 呵呵.
LZ你去看看他们的帖子有没提供RSS或者XML, 有的话会好办点.
你的方法可以得到问题中网页的图片,但是换个帖子就不能工作了,比如:
http://club.women.sohu.com/r-fashion-1421541-0-9562-0.html
这个就不行了。不知道为什么。rotApple:
学习ajax要什么基础吗
对不起,你的方法可以。
但是我有个问题,
你的方法可以定义带有参数输入吗。
比如说输入一个网址作为参数,就可以得到图片的链接。
因为我有很多网页。但是网页地址有规律。我想做个网页列表,然后批量运行你的程序,或者你的程序读入这个网页列表,
输出所有图片的链接,最后用其他下载软件下载。不知道你有更好的建议吗。
如果你只是抓图片, 你应该会C吧?SOCKET打开网页,请求回来的所有源码用BOOST的REGEX分析出来, 再自动SOCKET一个个请求回来保存到本地, OVER啦! 呵呵.BOOST::REGEX类去sourceforge.net下载.
SOCKET请求的类可以用AmHttpSocket, 这个类的使用很简单, 可以去网上找一下.
1。 从文件读入页面地址
2。 调用muxrwc的代码,分析指定页面,
3。 保存滤出的图片地址
一, 从文件读入页面地址
正常理论是做不到的, 或者FSO, 或者AJAX二, 调用muxrwc的代码,分析指定页面
不可能, 它的代码只能运行在IE地址栏, 分析不了页面三, 保存滤出的图片地址
JS做不到保存, 只能用FSO.但前提是如果在本地用FSO的话, 打开网页后会提示脚本不安全.
不建议.
所以, 你需要的功能建议是从C写个基于CMD窗口的程序. 会好一点. JS做到你提的三点非常非常勉强.. 几乎做不到.
BOOST的REGEX可以完成muxrwc代码的分析功能吗,
感觉都是正则过滤。
请问你的分析js包内图片程序可以通过java或者C#实现吗,语法和jscript一样吗?
对于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>
好像不能访问js包里面的图片,
能否加上对他们的检测。
你的程序就快达到我的要求了。
不知道一次输入1000个网址,可能输出10000个链接,你的程序不会出现问题吧:-)麻烦你到下面这个链接去发言,我好结贴,给你100分。
http://topic.csdn.net/u/20080404/23/3a727f0d-5644-4b3c-94ea-1e14d995b3ea.html
别放那么多啊...
我没控制排队什么的...
基本属于多少次请求多少个对象,而且都是for执行的,你放那么多,很可能会down的...
另外..
如果匹配css里和js里.
css到是没问题.如果是js的话那很麻烦的..
因为规则相当的不严紧...
所以很麻烦的...
我有几点不明白:
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包内图片链接的功能;再次感谢!
javascript:
是在当前状态下。。
利用dom来抓所有的元素
如果元素是img则读src
否则读手选样式的背景图片即backgroundImage另外当前状态下,是JS执行完毕的状态。
就是说。你用JS通过DOM来修改HTML元素的属性后
这样执行获取的语句,自然就有一些图片地地址了第二种是
javascript:alert(document.documentElement.outerHTML);第一种是
直接查看文件源代码通俗的说,第一种是执行前的HTML代码分析的
第二种是执行后的代码分析的。
那有没有可能实现
后台执行js,然后分析执行后的代码。
这样问题是不是就可以解决了。
本人不懂,随便想的。如果我要学习web开发,分析的话,应该从什么开始,html,xml,jscript,ajax....???
第二种是执行后的代码分析的。
说反了- -可以分析。不过就是麻烦点:D学web开发的话可以先从html入手
还有1W3多才升星呢T_T飘走忙去
1\取得源码,各种方式均可,VB之类的可用xmlhttp
2\正则提取链接地址,各种语言均有正则
3、远程读取或链接(可以直接链接,也可保存本地xmlhttp就可以)