用ASP实现远程抓取网页到本地数据库

若梦化影

若梦化影

2016-02-19 17:08

今天图老师小编给大家介绍下用ASP实现远程抓取网页到本地数据库,平时喜欢用ASP实现远程抓取网页到本地数据库的朋友赶紧收藏起来吧!记得点赞哦~

  接到一个任务是把中国名牌网站的某些内容添加到我们的网站上,这些网站上有些页面是文章链接列表,点击链接会出现文章的详细内容显示页,根据这个规律,结合正则表达式,XMLHTTP技术,Jscript服务端脚本,以及ADO技术,写了一个小程序,把这些内容抓取到了本地数据库。抓取下来,然后就数据库对数据库导数据就比较方便了。先建立一个Access数据库,结构如下

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)Id自动编号标识,主键oldID数字旧数据编码Title标题文本Content备注内容

  具体实现代码如下

  

<%@LANGUAGE="JSCRIPT" CODEPAGE="936"%><!-- METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library"TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4}" --><% //打开数据库 try {  var strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("#db.mdb");  var objConnection = Server.CreateObject("ADODB.Connection");  objConnection.Open(strConnectionString); } catch(e) {  Response.Write(e.description);  Response.End(); }%><script language="jscript" runat="server">//远程获取数据function GetData(){ var xHttp = new ActiveXObject("microsoft.xmlhttp"); xHttp.open("POST","http://www.chinamp.org/mppro2.php",false); xHttp.send(); return(xHttp.responseText);}//利用正则表达式提取符合条件的链接function GetLinks(str){ var re = new RegExp("<a[^<>]+?>((.|n)*?)</a>", "gi"); var a = str.match(re); //第一次搜索 for(var i=0;i<a.length;i++) {  var t1,t2;  var temp;  var r = /qy.php?id=(d+)/ig;  if(!r.test(a[i]))continue;  temp = a[i].match(/qy.php?id=(d+)/ig);  t1 = RegExp.$1;  temp = a[i].match(/<font[^<>]+?color="#000000">(.*?)</font>/ig);  t2 = RegExp.$1;  if(t1 == t2)continue;  SaveArticle(t1,t2,GetContent(t1)); }}//通过提取的链接获取ID,并通过这个ID取抓取相应的文章function GetContent(id){ var xHttp = new ActiveXObject("microsoft.xmlhttp"); xHttp.open("POST","http://www.chinamp.org/qy.php?id=" + id,false); xHttp.send(); var str = xHttp.responseText; var re = new RegExp("<span[^<>]+?style="font-size:10.8pt">(.*?)</span>", "gi"); var a = str.match(re); return(RegExp.$1);}//入库function SaveArticle(oldID,Title,Content){ var oRst = Server.CreateObject("ADODB.Recordset"); var sQuery; sQuery = "SELECT oldID,Title,Content FROM Articles" oRst.Open(sQuery,objConnection,adOpenStatic,adLockPessimistic); oRst.AddNew(); oRst("oldID") = oldID; oRst("Title") = Title; oRst("Content") = Content; oRst.Update(); oRst.Close(); Response.Write(Title + "抓取成功" + "<br>");}</script><HTML><HEAD><TITLE> 抓取文章</TITLE><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></HEAD><BODY><%=GetLinks(GetData())%></BODY></HTML>

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

  下一步就是,把这个Access的数据库的内容导入到服务器的数据库里了,但是还有一些东西,就是原来的文章是分类的,所以导入的时候还得手工分类,因为在分析链接的时候正则表达式本来写就很麻烦,但还算严谨,如果把分类也用正则表达式解析的话,会很麻烦,因为分类是包含在<td>里面的,而那个页的<td>标签又很多,要想定位分类文字所在的<td>会很麻烦,即便写出来,程序也会失去灵活性,变得难以维护,所以现在只做到了这一步。

展开更多 50%)
分享

猜你喜欢

用ASP实现远程抓取网页到本地数据库

Web开发
用ASP实现远程抓取网页到本地数据库

数据库远程控制的ASP实现

ASP
数据库远程控制的ASP实现

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

用XMLHTTP对象抓取网页源代码拆分数据写入数据库

Web开发
用XMLHTTP对象抓取网页源代码拆分数据写入数据库

用存储过程实现ASP对数据库访问

ASP
用存储过程实现ASP对数据库访问

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用ASP和WML来实现数据库查询

ASP
用ASP和WML来实现数据库查询

用ASP实现对ORACLE数据库的操作

ASP
用ASP实现对ORACLE数据库的操作

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

用Visual C#发送电子邮件

用Visual C#发送电子邮件

win10常用快捷键

win10常用快捷键
下拉加载更多内容 ↓