• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    設(shè)計(jì)網(wǎng)站后臺(tái)數(shù)據(jù)采集程序

    2019-07-10 00:59:56江蘇王坤
    網(wǎng)絡(luò)安全和信息化 2019年7期
    關(guān)鍵詞:憑證字符頁面

    ■ 江蘇 王坤

    編者按:在日常的工作中,需要周期性的登錄某些站點(diǎn)獲取任務(wù)信息、任務(wù)進(jìn)展?fàn)顟B(tài)、匯總數(shù)據(jù)及傳送文件至共享服務(wù)器等,登錄步驟繁瑣且密碼復(fù)雜多樣,登錄成功后需要逐個(gè)查看并保存任務(wù),日常操作過程中工作效率不高,需要花費(fèi)大量時(shí)間。本文介紹了利用Python模擬登錄網(wǎng)站后臺(tái)并采集數(shù)據(jù)的程序?qū)崿F(xiàn)原理及設(shè)計(jì)方法。

    Python是一門非常快捷的工具語言,類庫非常豐富,在解決工作及生活中各類問題都有很多現(xiàn)成的工具和例子。近年來,Python成為數(shù)據(jù)科學(xué)家們在數(shù)據(jù)分析、可視化和機(jī)器學(xué)習(xí)方面的語言,它可以帶來高效率和高生產(chǎn)力。利用Python采集數(shù)據(jù),在自動(dòng)登錄環(huán)節(jié),需要對(duì)驗(yàn)證碼進(jìn)行識(shí)別,識(shí)別正確后,利用POST提交用戶名、密碼信息完成登錄操作。登錄成功后,系統(tǒng)會(huì)返回登錄憑證的Cookie信息,利用登錄憑證查找特定數(shù)據(jù),如數(shù)據(jù)存在更新則保存為mht文件。

    圖1 數(shù)據(jù)采集程序功能流程

    程序功能介紹

    程序功能如圖1所示,其難點(diǎn)在于如何實(shí)現(xiàn)自動(dòng)登錄及利用登錄憑證抓取特定數(shù)據(jù)。在自動(dòng)登錄過程中,由于驗(yàn)證碼采用了空心化、扭曲、翻轉(zhuǎn)、干擾線等手段防止程序的自動(dòng)識(shí)別,在特定頁面的訪問上,需要獲取登錄憑證。同時(shí),頁面采取了“反盜鏈”機(jī)制,對(duì)頁面來源、頁面代理進(jìn)行嚴(yán)格檢測。因此,在程序設(shè)計(jì)過程中,需要訓(xùn)練樣本,打造模型,完成對(duì)驗(yàn)證碼的識(shí)別并容錯(cuò)控制,在采集數(shù)據(jù)過程中,需要 “偽裝”成正常用戶行為,繞過頁面檢測。

    自動(dòng)登錄

    1.驗(yàn)證碼識(shí)別技術(shù)

    設(shè)計(jì)驗(yàn)證碼的主要目的是區(qū)分人類和計(jì)算機(jī),用來防止網(wǎng)絡(luò)機(jī)器人的一些行為。因此許多人開始研究網(wǎng)絡(luò)機(jī)器人技術(shù),用來實(shí)現(xiàn)郵箱自動(dòng)注冊、群發(fā)信息、自動(dòng)灌水、自動(dòng)登錄等功能。目前,各種類型網(wǎng)站系統(tǒng)都利用驗(yàn)證碼阻止網(wǎng)絡(luò)機(jī)器人入侵,從而驗(yàn)證碼識(shí)別技術(shù)成為研究熱點(diǎn)。

    通過批量下載大量驗(yàn)證碼分析,驗(yàn)證碼采用了空心化、扭曲、翻轉(zhuǎn)、干擾線等手段防止程序的自動(dòng)識(shí)別,同時(shí)干擾線顏色與驗(yàn)證碼顏色相近,無法有效去除。驗(yàn)證碼如圖2所示。

    驗(yàn)證碼采用4位隨機(jī)字符,字符采用數(shù)字和大寫字母組成,字符位置固定??赏ㄟ^云除噪音、灰度化、二值化后,對(duì)字符進(jìn)行切割,切割后保存到對(duì)應(yīng)文件夾內(nèi),如圖3所示。

    由于噪音線條和驗(yàn)證碼字符的顏色相近,去噪難度較大,只能去除黑點(diǎn)和顏色較深的部分。在人工標(biāo)注好切割后的驗(yàn)證碼后,利用svm[2]、pca[3]訓(xùn)練數(shù)據(jù),生成pca.model及clf.model文件,最后測試識(shí)別成功率在70%左右。

    2.登錄獲取會(huì)話令牌

    Python中cookielib[4]庫(python3中 為 http.cookiejar)為存儲(chǔ)和管理cookie提供客戶端支持,該模塊主要功能是提供可存儲(chǔ)cookie的對(duì)象,使用此模塊捕獲cookie并在后續(xù)連接請(qǐng)求時(shí)重新發(fā)送,還可以用來處理包含cookie數(shù)據(jù)的文件。這個(gè)模塊主要提供了這幾個(gè)對(duì)象:CookieJar,F(xiàn)ileCookieJar,MozillaCookieJar,LWPCook ieJar,此處主要用到LWPCookieJar。def login():

    loginurl1 = "https://www.fjhh.com/workspace/sys.LoginCtl.depLogin.do"

    圖2 驗(yàn)證碼形態(tài)

    圖3 切割驗(yàn)證碼

    loginurl2 = "https://www.fjhh.com/workspace/sys.LoginCtl.login.do"

    cj = cookielib.LWPCookieJar()

    cookie_support = urll ib2.HTTPCookieProcessor(cj)

    opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)

    urllib2.install_opener(opener)

    img_req=urllib2.Request("https://www.fjhh.com/workspace/Captcha.jpg")

    img_response=opener.open(img_req)

    try:

    out=open('captcha.jpg','wb')

    #print img_response.read()

    out.write(img_response.read())

    out.flush()out.close()

    p r i n t'------------Veri fy------------'

    # print 'Get code success'

    except IOError:

    print 'file wrong'#input code

    img_code=captcha("cap tcha.jpg")

    print img_code

    print 'your code is%s'%img_code

    for index,item in enumerate(cj):

    tmp = re.compile('Co okie (.*) for').findall(str(item))

    cookievalue = tmp[0]

    headers = {'User-Agent' : 'Mozilla/5.0(Windows NT 6.1; WOW64;rv:14.0) Gecko/20100101 Firefox/14.0.1',

    'Referer' : '******'}postData1 = {

    'userType' : 'intern al',

    'departmentname' :'fjhh',

    'password' :'password-fjhh',

    'captcha_key' : img_code

    }

    postData1 = urllib.urlencode(postData1)

    request = urllib2.Request(loginurl1,postData1, headers)

    l o g i n _response=opener.open(request)

    login_response=login_response.read()

    #如果驗(yàn)證碼出錯(cuò),則

    if("Verfication code is wrong" in login_response):

    print "Fail,Login1 Again"

    login()

    圖4 程序運(yùn)行效果圖

    print 'login1 success'

    運(yùn)行后如圖4所示。

    特定內(nèi)容的抓取

    為了快速準(zhǔn)確匹配到特定內(nèi)容,需要用到正則表達(dá)式[5]來實(shí)現(xiàn)此功能。正則表達(dá)式使用單個(gè)字符串來描述、匹配一系列符合某個(gè)句法規(guī)則的字符串。在很多文本編輯器里,正則表達(dá)式通常被用來檢索、替換那些符合某個(gè)模式的文本。在Python中利用re模塊來實(shí)現(xiàn)正則匹配。在匹配特定內(nèi)容前,在header頭的User-Agent參數(shù)填寫IE客戶端參數(shù),“偽裝”成正常用戶的訪問。

    def saveHttpPage(url,cookie,taskID,type_ccc):

    url = "https://www.fjhh.com"+url

    request = urllib2.Request(url)

    request.add_header('User-Agent', 'Mozilla/4.0(compatible; MSIE 8.0;Windows NT 6.1; WOW64;Trident/4.0; SLCC2;.NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C;.NET4.0E)')

    request.add_header('Referer','https://www.fjhh.com/workspace/tests.LabSubTasksCtl.listLabTasks.do')

    request.add_header('Language', 'zh-CN,zh;q=0.8')

    request.add_header('Cookie', cookie)

    response = urllib2.urlopen(request)

    response_body =response.read()

    people_weituo= re.compile('').findall(response_body)

    filename =re.compile('appNumber"value="(.*)">').findall(response_body)

    applyID = filename[0].decode('utf8')

    applyTime_tmp= re.compile('20(.*)<').findall(response_body)

    applyTime ="20"+apply Time_tmp[0].decode('utf 8')

    productSortCode_tmp =re.compile('productSortC

    ode" value="(.*)">').findall(response_body)

    productSortCode=productSortCode_tmp[0].decode('utf8')

    存儲(chǔ)及傳送技術(shù)

    獲得特定數(shù)據(jù)后,先保存為html文件,再調(diào)用pywin32庫中的win32com.client將html轉(zhuǎn)換為mht格式,方便IE瀏覽器用戶的訪問。

    1.將html文件轉(zhuǎn)化為mht格式

    def html2mht(filenam e):

    filename2 = os.path.join(os.p

    ath.abspath('.'),file name)

    try:

    iMsg = Dispatch('CDO.Message')

    iMsg.CreateMHTMLBody('file://

    /' + filename2)

    iMsg.GetStream().SaveToFile(os.path.splitext(filename2)[0]+'.mht')

    #mht文件生成后,刪除html文件,此處需優(yōu)化os.remove(filename2)

    except Exception,e:

    print filename+"is error"

    2.利用Samba傳輸文件

    保存好文件后,利用Samba協(xié)議將文件傳輸至文件共享服務(wù)器。

    conn = SMBConnection(userID, password, client_machine_name, server_name, domain=domain_name, use_ntlm_v2=True,is_direct_tcp=True)

    conn.connect(server_ip, 445)

    shares = conn.listShares()

    remotefilelist = []

    for share in shares:

    if not share.isSpecial and share.name not in ['NETLOGON','SYSVOL']:

    sharedfiles = conn.listPath(share.name,'/')

    for sharedfile in sharedfiles:

    #

    print(sharedfile.filename)

    remotefilelist.append(sharedfile.filename)

    num = 0

    def copy2Remote(file name,):

    try:

    file = open(filename,'rb')

    c o n n .storeFile('share',filename, file) #share mean share name

    file.

    close()

    global num

    num = num + 1

    print str(num) + " "+ filename + " upload"

    except:

    pass

    def getFileName(path):

    f_list = os.listdir(p ath)

    for i in f_list:

    # os.path.splitext():分離文件名與擴(kuò)展名

    if os.path.splitext(i)[1] == '.mht':

    if i.decode("gbk") in remotefilelist:

    print "ERROR! %s already exists."%i

    else:

    copy2Remote(i.decode("g bk"))

    getFileName(".")

    print str(num) + "files had upload!"

    conn.close()

    猜你喜歡
    憑證字符頁面
    大狗熊在睡覺
    帶您了解醫(yī)保電子憑證
    刷新生活的頁面
    尋找更強(qiáng)的字符映射管理器
    已完成匯交并出具匯交憑證的項(xiàng)目統(tǒng)計(jì)
    字符代表幾
    一種USB接口字符液晶控制器設(shè)計(jì)
    電子制作(2019年19期)2019-11-23 08:41:50
    消失的殖民村莊和神秘字符
    (2018年)《中國司法》
    司法所工作(2017年8期)2017-05-17 02:54:23
    (2018年)《司法所工作》
    司法所工作(2017年8期)2017-05-17 02:54:22
    宜君县| 怀宁县| 福海县| 龙游县| 屯门区| 来安县| 济宁市| 永济市| 晴隆县| 定陶县| 隆安县| 甘孜| 乃东县| 卓资县| 万盛区| 论坛| 淮阳县| 浦江县| 阿克陶县| 兖州市| 赣榆县| 扶沟县| 江山市| 仪征市| 阜新| 治县。| 桂阳县| 华蓥市| 腾冲县| 泸西县| 福建省| 阿拉善左旗| 凌海市| 星座| 特克斯县| 垦利县| 舟山市| 襄垣县| 双柏县| 祁东县| 鞍山市|