1. 程式人生 > >基於網路爬蟲的負面資訊蒐集系統

基於網路爬蟲的負面資訊蒐集系統

這篇應該早就寫的,該程式已實際運行了一段時間。

主要模組(網路爬蟲+微信互動)

1、網路爬蟲毫無疑問是本專案的核心,由於定位蒐集p2p的負面資訊,我們嘗試了三個目標源(百度、網貸之家、網貸天眼)

核心策略 平臺名稱+負面關鍵字

負面關鍵字可以後臺實施維護,平臺名稱需要使用者在微信公眾號內輸入

(1)爬蟲頭資訊的偽裝

_send_headers = {
    'Host':'www.wdzj.com',
    'User-Agent':'Mozilla/5.0 (Windows NT 6.2; rv:16.0) Gecko/20100101 Firefox/16.0',
    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Connection':'keep-alive'
(2)BeautifulSoup解析返回的頁面
request = urllib2.Request(_PREFIX_START+platformName,headers=_send_headers)
response = urllib2.urlopen(request)
soup = BeautifulSoup(response.read(), "lxml")
(3)定時任務方式無限爬取和定時更新微信的token(2小時實效)
threads = []
#以子執行緒方式啟動定時獲取access_token的任務。2小時一次
t1 = threading.Thread(target=getAccessToken)
threads.append(t1)

t2 = threading.Thread(target
=ZhijiaScanner) threads.append(t2) t3 = threading.Thread(target=SkyeyeScanner) threads.append(t3) for t in threads: #t.setDaemon(True) t.start()
2、微信公眾號部分

(1)微信訊息的獲取

@app.route('/wx',methods=['get','post'])
def wx():
該介面拿到微信的所有回撥資訊,分類處理即可
(2)微信回撥資訊的分類處理
if request.method == 'POST':

    #print 'post'
    #print request.data
    #獲取使用者傳送的訊息
    xml_recv = ET.fromstring(request.data)

    #先分析訊息型別
    MsgType=xml_recv.find("MsgType").text

    if 
MsgType == "text": return TextMsgDealer.dealTextMsg(xml_recv) elif MsgType == "event":#收到點選時間
這些在微信的介面文件可以容易閱讀
3、過程中的問題
flask自帶server並不穩定,顯而易見,tomcat不能省
及時處理髮給微信平臺的訊息,接受到響應後及時打標記;
elif  Event=="TEMPLATESENDJOBFINISH":#接收到一條模版資訊回覆

    MsgId=xml_recv.find("MsgID").text
    config.myLogger.info("接收到編號為: '%s' 的模版資訊回覆" % MsgId)
    #根據msgID將對應的傳送記錄狀態置為1成功
    dao.updatePushStatus(MsgId)