请问能否用JavaScript提取其他网站的网页并保存到一个字符串变量里?

vnking 2009-02-03 01:57:10
请问能否用JavaScript提取其他网站的网页并保存到一个字符串变量里?

然后自己解析提取有用数据,在自己的页面中显示!
...全文
151 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
f10icq 2009-02-09
  • 打赏
  • 举报
回复
用JavaScript截取网页中的有用代码,放到自己的显示区域内。
archu 2009-02-04
  • 打赏
  • 举报
回复
提醒一下,如果你是Windows系统的话,而且你是做web server的情况,使用ServerXMLHTTP比较好。至于为什么,你可以参考以下文章:
http://support.microsoft.com/kb/290761
vincentmax 2009-02-04
  • 打赏
  • 举报
回复
good, studying.
homejiji 2009-02-04
  • 打赏
  • 举报
回复
mark
lihan6415151528 2009-02-03
  • 打赏
  • 举报
回复
不会有这段提示吧。楼主参考下面代码

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<script type="text/javascript">

$ = document.getElementById;

var ForAppending = 8; // 追加模式
var ForReading = 1; // 读取模式
var ForWriting = 2; // 写入模式

function AppendFileText(filename, text)
{
var fso = new ActiveXObject("Scripting.FileSystemObject"); // 文件系统
var istream = fso.OpenTextFile(filename, ForAppending, true);
if (!istream) return;
try {
istream.write(text);
istream.Close();
return true;
} catch (e) {
return false;
} finally {
istream = null;
fso = null;
}
}

/// <summary>
/// 追加日志
/// </summary>
/// <param name="text">日志文本</param>
function AppendLog(text) {
$("TextareaLog").value += text;
AppendFileText("log.txt", text);
}

/// <summary>
/// 获取链接的文本内容
/// </summary>
/// <param name="url">页面链接地址</param>
/// <returns>返回页面HTML文本</returns>
function GetUrlText(url) {
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
try {
xmlhttp.open("get", url, false);
xmlhttp.send();
return xmlhttp.responseText;
} catch (e) {
return "";
} finally {
xmlhttp = null;
}
}

function dateFormat(date, separator){
date = typeof date == "number" ? new Date(date) :
(typeof date == "string" ? new Date(Date.parse(date)) : date);
separator = typeof separator == "string" ? separator : "$1年$2月$3日 $4时$5分$6秒";
var str = "" + date.getFullYear() + "-" + (date.getMonth() + 101) + "-" + (date.getDate() + 100) + " " +
(date.getHours() + 100) + ":" +(date.getMinutes() + 100) + ":" + (date.getSeconds() + 100);
return str.replace(/^(\d+)-\d*(\d{2})-\d*(\d{2}) \d*(\d{2}):\d*(\d{2}):\d*(\d{2})$/g, separator);
}

function GameItem(itemText) {
var re = /<td>\s*<a\s+href="\/Games\/PawnList.aspx\?id=(\d+)&checkid=(\d+)"\s*target="_blank">\s*([A-Z]+):\s*(.*?)<\/a>\s*<\/td>\s*<td>\s*(.*?)\s*<\/td>\s*<td>\s*(\d+)\s*\/\s*(\d+)\s*.*?<\/td>/ig;
var match = re.exec(itemText);
if (!match) return;
this.gameid = match[1];
this.checkid = match[2];
this.index = match[3];
this.caption = match[4];
this.odds = match[5];
this.point = match[6];
this.count = match[7];
}

function GameInfos(htmlText) {
htmlText = htmlText.replace(/\r\n/g, " ");
var re = /<span\s+class="time">停止时间:(.*?)<\/span>/ig;
var match = re.exec(htmlText);
this.time = new Date(match[1].replace(/-/g, "//"));

var matchs = htmlText.match(/<td>\s*<a\s+href="\/Games\/PawnList.aspx\?id=(\d+)&checkid=(\d+)"\s*target="_blank">\s*([A-Z]+):\s*(.*?)<\/a>\s*<\/td>\s*<td>\s*(.*?)\s*<\/td>\s*<td>\s*\d+\s*\/\s*\d+\s*.*?<\/td>/ig);
this.items = [];
this.point = 0;
this.count = 0;
for (var i = 0; matchs && i < matchs.length; i++) {
var item = new GameItem(matchs[i]);
this.items.push(item);
this.point += parseInt(item.point);
this.count += parseInt(item.count);
}
}

function PostRequest(url, deleteInfo)
{
var data = "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=" + encodeURIComponent(deleteInfo.viewState) +
"&reasonGroup=2&ctl00%24ContentPlaceHolder1%24tb_Reason=" + encodeURIComponent($("TextReason").value) +
"&ctl00%24ContentPlaceHolder1%24bt_Submit=%E7%A1%AE%E5%AE%9A&" +
"__EVENTVALIDATION=" + encodeURIComponent(deleteInfo.eventValidation);
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
try {
xmlhttp.open("Post", url, false);
xmlhttp.setRequestHeader("Referer", url);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Accept-Encoding", "gzip,deflate");
xmlhttp.setRequestHeader("Content-Length", data.length);
xmlhttp.send(data);
return xmlhttp.responseText;
} catch (e) {
return e.message;
} finally {
xmlhttp = null;
}
}

function CheckboxRefreshClick() {
if (!$("CheckboxRefresh").checked) return;
var htmlText = GetUrlText("http://community.csdn.net/Games/GamePawn.aspx?id=" + $("TextareaId").value + "&_t_" + Math.random());
var gameInfos = new GameInfos(htmlText);
var note = "";
var webTime = new Date(new Date().getTime() + parseInt($("TextareaDiffer").value));
note += "时间:" + dateFormat(gameInfos.time) + "\r\n";
note += "时间:" + dateFormat(webTime) + "\r\n";
note += "倒计时:" + (gameInfos.time - webTime) / 1000 + "秒\r\n";
note += "总分数:" + gameInfos.point + "\r\n";
note += "总人数:" + gameInfos.count + "\r\n";
note += "-------明细------\r\n";
for (var i = 0; i < gameInfos.items.length; i++) {
note += "选项:" + gameInfos.items[i].index + ",";
note += "人数:" + gameInfos.items[i].count + ",";
note += "分数:" + gameInfos.items[i].point + ",";
note += "平均:" + parseInt(gameInfos.items[i].point) / parseInt(gameInfos.items[i].count) + "\t";
note += gameInfos.items[i].caption + "\r\n";
}
$("TextareaNote").value = note;
setTimeout("CheckboxRefreshClick();", parseInt($("TextareaDelay").value));
}
</script>

<table style="width:100%;height:100%;">
<tr style="height:10%">
<td>
<div>
ID:<input type="input" value="337" id="TextareaId" style="width:50px;" />
<input type="checkbox" id="CheckboxRefresh" onclick="CheckboxRefreshClick();" /><label for="CheckboxRefresh">自动刷新</label>
刷新频率(毫秒):<input type="input" value="1000" id="TextareaDelay" style="width:60px;" />
网络时间差(毫秒,服务器减本地时间):<input type="input" value="12000" id="TextareaDiffer" style="width:60px;"/>
</div>
<div>
</div>
</td>
</tr>
<tr>
<td>
信息:
<textarea id="TextareaNote" style="width:100%; height:100%"></textarea>
</td>
</tr>
<!--<tr>
<td>
日志:
<textarea id="TextareaLog" style="width:100%; height:100%"></textarea>
</td>
</tr>-->
</table>
</body>
</html>
vnking 2009-02-03
  • 打赏
  • 举报
回复
楼上的代码可行,谢谢!

不过在浏览时会提示:该页正在访问其控制范围外的信息。这有些危险。是否继续?

如何消除这段提示?
CutBug 2009-02-03
  • 打赏
  • 举报
回复
<html>
<head>
<script>
var xmlHttp = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
window.onload=function()
{
xmlHttp.open("get","http://topic.csdn.net/u/20090203/13/f5ff51c5-879e-4975-a2f3-2ffe84bdc962.html",true);
xmlHttp.onreadystatechange = processRequest;
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.send(null);
}
function processRequest()
{
if(xmlHttp.readyState==4)
{
if(xmlHttp.status==200)
{
alert(xmlHttp.responseText);
document.getElementById("container").innerHTML=xmlHttp.responseText;
}
}
}
</script>
</head>
<body>
<div id="container">

</div>
</body>
</html>
vnking 2009-02-03
  • 打赏
  • 举报
回复
XMLHTTP 不是说不能跨域访问的吗?
archu 2009-02-03
  • 打赏
  • 举报
回复
http://www.w3schools.com/XML/xml_http.asp

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧