【爬蟲應(yīng)用篇】- 抓取App內(nèi)容自動發(fā)布到論壇

背景介紹

昨天接到一個需求希停,朋友有個留言板系統(tǒng)、他希望可以有個爬蟲程序、每天可以爬取一個App上的最新資訊辰企、自動發(fā)布到留言板系統(tǒng)上。

項(xiàng)目梳理

  • 了解留言板系統(tǒng)
    由于朋友不懂技術(shù)况鸣、所以直接把朋友整個留言板系統(tǒng)拿過來了牢贸、哇塞、打開一看镐捧、是由ASP+ACCESS 古董級搭站方式潜索、估計(jì)是從哪個寶買的系統(tǒng)...沒有去深究他
  • 思考實(shí)現(xiàn)方式
  • 1、軟件運(yùn)行在服務(wù)器 直接訪問ACCESS懂酱、每天直接更新到ACCESS數(shù)據(jù)庫
  • 2竹习、軟件運(yùn)行在客戶端 留言板系統(tǒng)增加一個數(shù)據(jù)接口服務(wù)、客戶端將采集到的數(shù)據(jù)POST到這個數(shù)據(jù)接口服務(wù)列牺、由這個接口服務(wù)提交數(shù)據(jù)到ACCESS整陌。
  • 3、留言板系統(tǒng)增加一個使用ASP語言搭建一個采集服務(wù)、留言板系統(tǒng)增加一個數(shù)據(jù)接口服務(wù)泌辫、每天直接在瀏覽器運(yùn)行這個采集服務(wù)就可以了

項(xiàng)目開始

考慮到程序簡便性随夸、和新鮮性決定使用第三種方案、使用ASP搭建采集服務(wù)和數(shù)據(jù)接口服務(wù)

項(xiàng)目實(shí)施

采集對象APP-稅問精選

關(guān)于如何采集APP上的內(nèi)容震放、稍后會有詳細(xì)介紹宾毒、在此在做簡單介紹、不做展開

  • 保證手機(jī)和電腦同一局域網(wǎng)下
  • 電腦開啟Fiddler4殿遂、并設(shè)置相關(guān)htts和端口
  • 將Fiddle4的端口和電腦的IP配置到手機(jī)上
    這時訪問APP伍俘,F(xiàn)iddler4就可以監(jiān)測到請求的header相關(guān)信息了、

具體的采集流程不做過多闡述 直接放下代碼

<!--
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 ' 建立正則表達(dá)式癌瘾。
    regEx.Pattern = patrn ' 設(shè)置模式。
    regEx.IgnoreCase = True ' 設(shè)置是否區(qū)分大小寫饵溅。
    regEx.Global = True ' 設(shè)置全程可用性妨退。

    Set Matches = regEx.Execute(strng) ' 執(zhí)行搜索。
    For Each Match in Matches ' 遍歷 Matches 集合蜕企。

    RetStr = RetStr & Match.SubMatches(0) & "," '值為123和44的數(shù)組

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


'正則替換函數(shù)
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

%>```

## 具體的數(shù)據(jù)接口服務(wù)

<%@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 = "標(biāo)題醒目"

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
%>

# 結(jié)束
>  以上有問題咬荷,歡迎留言
整個留言版系統(tǒng)
   [git源碼包](https://github.com/ZhouYoung/ly_web)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市轻掩,隨后出現(xiàn)的幾起案子幸乒,更是在濱河造成了極大的恐慌,老刑警劉巖唇牧,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件罕扎,死亡現(xiàn)場離奇詭異,居然都是意外死亡丐重,警方通過查閱死者的電腦和手機(jī)腔召,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扮惦,“玉大人臀蛛,你說我怎么就攤上這事⊙旅郏” “怎么了浊仆?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長豫领。 經(jīng)常有香客問我抡柿,道長,這世上最難降的妖魔是什么氏堤? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任沙绝,我火速辦了婚禮,結(jié)果婚禮上鼠锈,老公的妹妹穿的比我還像新娘闪檬。我一直安慰自己,他們只是感情好购笆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布粗悯。 她就那樣靜靜地躺著,像睡著了一般同欠。 火紅的嫁衣襯著肌膚如雪样傍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天铺遂,我揣著相機(jī)與錄音衫哥,去河邊找鬼。 笑死襟锐,一個胖子當(dāng)著我的面吹牛撤逢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播粮坞,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蚊荣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了莫杈?” 一聲冷哼從身側(cè)響起互例,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎筝闹,沒想到半個月后媳叨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡关顷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年肩杈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片解寝。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡扩然,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出聋伦,到底是詐尸還是另有隱情夫偶,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布觉增,位于F島的核電站兵拢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏逾礁。R本人自食惡果不足惜说铃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一访惜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腻扇,春花似錦债热、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至舶沿,卻和暖如春墙杯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背括荡。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工高镐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畸冲。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓避消,卻偏偏與公主長得像,于是被迫代替她去往敵國和親召夹。 傳聞我的和親對象是個殘疾皇子岩喷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容