基於網路爬蟲的負面資訊蒐集系統
阿新 • • 發佈:2019-02-08
這篇應該早就寫的,該程式已實際運行了一段時間。
主要模組(網路爬蟲+微信互動)
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)