【爬虫应用篇】- 抓取App内容自动发布到论坛

背景介绍

昨天接到一个需求,朋友有个留言板系统、他希望可以有个爬虫程序、每天可以爬取一个App上的最新资讯、自动发布到留言板系统上。

项目梳理

  • 了解留言板系统
    由于朋友不懂技术、所以直接把朋友整个留言板系统拿过来了、哇塞、打开一看、是由ASP+ACCESS 古董级搭站方式、估计是从哪个宝买的系统...没有去深究他
  • 思考实现方式
  • 1、软件运行在服务器 直接访问ACCESS、每天直接更新到ACCESS数据库
  • 2、软件运行在客户端 留言板系统增加一个数据接口服务、客户端将采集到的数据POST到这个数据接口服务、由这个接口服务提交数据到ACCESS。
  • 3、留言板系统增加一个使用ASP语言搭建一个采集服务、留言板系统增加一个数据接口服务、每天直接在浏览器运行这个采集服务就可以了

项目开始

考虑到程序简便性、和新鲜性决定使用第三种方案、使用ASP搭建采集服务和数据接口服务

项目实施

采集对象APP-税问精选

关于如何采集APP上的内容、稍后会有详细介绍、在此在做简单介绍、不做展开

  • 保证手机和电脑同一局域网下
  • 电脑开启Fiddler4、并设置相关htts和端口
  • 将Fiddle4的端口和电脑的IP配置到手机上
    这时访问APP,Fiddler4就可以监测到请求的header相关信息了、

具体的采集流程不做过多阐述 直接放下代码

<!--
autor:索索软件工作室
date:2017-01-18
QQ:859867801
-->
<%@language=vbscript codepage=65001 %>
<% Response.Charset = "utf-8" %>
<%
Server.ScriptTimeOut = 500

postUrl = "http://localhost:81/sprider_post.asp"

'获取列表
msg = getHTTPPage("http://app.taxwen.com/taxcloud/read/find/getAllClassify")
'Response.write(msg)

'解析列表
arru = RegExpTest("ncid"":""(.*?)""", msg)
arruText = RegExpTest("name"":""(.*?)""", msg)
for i=0 to ubound(arru)-1

    itemUrl = "http://app.taxwen.com/taxcloud/read/find/getSubClassById?ncid="+ arru(i)
    'response.write(itemUrl&"<br>")
    msgItem = getHTTPPage(itemUrl)
    'response.write(msgItem&"<br>")
    
    arruItem = RegExpTest("cid"":""(.*?)""", msgItem)
    arruItemText = RegExpTest("name"":""(.*?)""", msgItem)

    for j=0 to ubound(arruItem)-1
        
        itemUrlList = "http://app.taxwen.com/taxcloud/read/findlist/newslist?cid="+arruItem(j)+"&pageNo=1"
        'response.write(itemUrlList&"<br>")

        msgItemList = getHTTPPage(itemUrlList)

        'response.write(msgItemList&"<br>")

        arruItemDet = RegExpTest("docid"":""(.*?)""", msgItemList)
        arruItemDetTime = RegExpTest("indate"":(.*?),", msgItemList)
        arruItemDetText = RegExpTest("title"":""(.*?)""", msgItemList)

        for k=0 to ubound(arruItemDet)-1
            ctime = CDbl(arruItemDetTime(k))
            nTime = CDbl(getTime())
            If ctime > nTime Then
                itemUrlListDet = "http://app.taxwen.com/taxcloud/read/findlist/getnewscontent?docid="+arruItemDet(k)+"&userid= "
                
                'response.write("ctime:"&ctime&"-getTime:"&getTime()&"-"&FromUnixTime(ctime, +8)&"大余"&FromUnixTime(getTime(), +8)&"<br>")

                msgItemListDet = getHTTPPage(itemUrlListDet)

                title = RegExpTest("<title>(.*?)</title>", msgItemListDet)
                txt = RegExpTest("<div style=""border-top: solid 1px #eee;""></div>([\s\S]*?)</div>", msgItemListDet)
                
                
                If IsEmpty(title)=False And IsEmpty(txt)=False And ubound(txt)>=1 And ubound(title)>=1 Then
                    txtsrc = txt(0)
                
                    arruItemDetImg = RegExpTest("img data-original=""(.*?)""", txtsrc)
                    for n=0 to ubound(arruItemDetImg)-1
                        patrn = "<img data-original="""+arruItemDetImg(n)+""" src=""./media/jquery/loading.gif"" style=""max-width:100%"">"
                        replStr = "[img]"&arruItemDetImg(n)&"[/img]"
                        txtsrc = ReplaceHTML(txtsrc, patrn, replStr)
                    Next
                    
                    response.write arruText(i)&"-"&arruItemText(j)&"-"&arruItemDetText(k)&"-"&FromUnixTime(ctime, +8)
                    param = "title="&title(0)&"&txt="+txtsrc&"&homepage="+itemUrlListDet
                    srst = PostHTTPPage(postUrl, param)
                    rst = CDbl(srst)

                    If rst > 0 Then
                        response.write ":上传成功"&"<br>"
                    ElseIf rst < 0 Then
                        response.write ":已存在"&"<br>"
                    Else
                        response.write ":上传失败"&"<br>"
                    End If

                End If
            End If
        Next
    Next
Next


Function FromUnixTime(intTime, intTimeZone)
    If Len(intTime) =13 Then
        intTime = left(intTime, 10)
    End if


    If IsEmpty(intTime) or Not IsNumeric(intTime) Then
        FromUnixTime = Now()
        Exit Function
    End If         
    If IsEmpty(intTime) or Not IsNumeric(intTimeZone) Then intTimeZone = 0
    FromUnixTime = DateAdd("s", intTime, "1970-01-01 00:00:00")
    FromUnixTime = DateAdd("h", intTimeZone, FromUnixTime)
End Function


Public Function getTime()
    getTime = DateDiff("s", "1970-01-01 08:00:00", Date()) * 1000 + Int(CDbl(Timer()) * 1000)-60*60*24*3*1000
End Function


function PostHTTPPage(url,data)
    dim Http
    set Http=server.createobject("MSXML2.SERVERXMLHTTP.3.0")
    Http.open "POST",url,false
    Http.setRequestHeader "CONTENT-TYPE", "application/x-www-form-urlencoded"
    Http.send(data)
    if Http.readystate<>4 then
    exit function
    End if
    PostHTTPPage=bytesToBSTR1(Http.responseBody,"utf-8")
    set http=nothing

End Function


Function  bytesToBSTR1(body,Cset)
    if lenb(body)=0  then
       bytesToBSTR1=""
       exit  function
    end if
    dim mystream
    set mystream=server.createobject("adodb.stream")
    mystream.type=2
    mystream.mode=3
    mystream.open
    mystream.writetext body
    mystream.position=0
    mystream.charset=Cset
    mystream.position=2
    bstr=mystream.readtext()
    mystream.close
    set mystream=nothing
    bytesToBSTR1=bstr
End Function

 Function getHTTPPage(url)
    dim objXML
    set objXML=createobject("MSXML2.XMLHTTP")
    objXML.open "get",url,false
    objXML.send()
    If objXML.readystate<>4 then
        exit function
    End If
    getHTTPPage=bytesToBSTR1(objXML.responseBody,"utf-8")
    set objXML=nothing
    if err.number<>0 then err.Clear
End Function

Function RegExpTest(patrn, strng)
    Dim regEx, Match, Matches ' 建立变量。
    Set regEx = New RegExp ' 建立正则表达式。
    regEx.Pattern = patrn ' 设置模式。
    regEx.IgnoreCase = True ' 设置是否区分大小写。
    regEx.Global = True ' 设置全程可用性。

    Set Matches = regEx.Execute(strng) ' 执行搜索。
    For Each Match in Matches ' 遍历 Matches 集合。

    RetStr = RetStr & Match.SubMatches(0) & "," '值为123和44的数组

    Next
    RegExpTest = Split(RetStr, ",")
End Function 


'正则替换函数
Function ReplaceHTML(srcstr, patrn, replStr)
    Set regEx = New RegExp
    regEx.Pattern = patrn
    regEx.IgnoreCase = True
    regEx.Global = True
    regEx.Execute(srcstr)
    ReplaceHTML = regEx.Replace(srcstr, replStr)
    Set regEx = Nothing
End Function

%>```

## 具体的数据接口服务

<%@language=vbscript codepage=65001 %>

<% Response.Charset = "utf-8" %>
<%
Server.ScriptTimeOut = 500

UserName = "Admin-S"
Face = ""
sex = ""
HomePage = Request.form("homepage")
Email = "admin6@qq.com"
Subject = Request.form("title")
content = Request.form("txt")
content = Replace(content,"imgsrc=", "img src=")
IPinfo = "127.0.0.1"
bookdate = now
pic = "p16.gif"
secret = "0"
qq = "25250508"
mark = "0"
fontcolor = "标题醒目"

Set rs11 = Server.CreateObject( "ADODB.Recordset" )

rs11.open "Select * From guest where subject = '"&Subject&"' and HomePage = '"&HomePage&"'order by id desc" ,Conn,1,1
id=rs11("id")
rs11.close
If id > 0 Then
Response.write -1
set rs11=Nothing
Else
sql="Insert Into guest (username,face,sex,homepage,mail,subject,content,IP,lydate,lastdate,pic,secret,qq,lastname,mark,fontcolor) Values('"& UserName &"','"& Face &"','"& sex &"','"& HomePage &"', '"& Email &"','"& Subject &"','"&content &"','"& IPinfo &"','"& bookdate &"','"& bookdate &"','"& pic &"',"& secret &",'"&qq&"','——',"&mark&",'"&fontcolor&"')"

conn.Execute sql

Set rs = Server.CreateObject( "ADODB.Recordset" )

rs.open "Select * From guest order by id desc" ,Conn,1,1
id=rs("id")
rs.close

Response.write(id)
set rs=Nothing

End If

conn.close
%>

# 结束
>  以上有问题,欢迎留言
整个留言版系统
   [git源码包](https://github.com/ZhouYoung/ly_web)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容