亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        科技資訊智能采集服務(wù)的設(shè)計(jì)與實(shí)現(xiàn)

        2021-04-13 07:28:40于營(yíng)東
        科技視界 2021年7期
        關(guān)鍵詞:文章內(nèi)容列表報(bào)文

        于營(yíng)東

        (上海建工集團(tuán)工程研究總院,上海 201114)

        0 引言

        現(xiàn)階段集團(tuán)各子公司的科技資訊主要發(fā)布在各自的微信公眾號(hào)上,無(wú)法實(shí)現(xiàn)集團(tuán)內(nèi)部的科技資訊共享。 為實(shí)現(xiàn)集團(tuán)內(nèi)部的科技資訊共享,需開發(fā)科技資訊共享平臺(tái),將各子公司微信公眾號(hào)的科技資訊信息采集后存儲(chǔ)起來(lái)。

        1 總體設(shè)計(jì)

        基于Python+MySQL 的科技資訊采集服務(wù)的設(shè)計(jì)與實(shí)現(xiàn),要求實(shí)現(xiàn)定時(shí)數(shù)據(jù)抓取功能,數(shù)據(jù)可視化和檢索功能。 實(shí)現(xiàn)對(duì)集團(tuán)內(nèi)部微信公眾號(hào)的數(shù)據(jù)采集,然后對(duì)采集到的數(shù)據(jù)進(jìn)行分析和處理, 最后存入MySQL 數(shù)據(jù)庫(kù)中,方便后續(xù)的檢索和查看。 對(duì)于數(shù)據(jù)采集,要先獲取到公眾號(hào)的菜單,通過菜單獲取到具體的文章分類, 再通過文章分類獲取到文章列表,然后根據(jù)文章列表中的文章地址獲取文章內(nèi)容??傮w流程如圖1 所示。

        數(shù)據(jù)采集是基于HTTP 協(xié)議的, 核心步驟主要包括HTTP 協(xié)議請(qǐng)求報(bào)文、HTTP 響應(yīng)報(bào)文及數(shù)據(jù)解析過程。 根據(jù)系統(tǒng)數(shù)據(jù)采集采集操作、數(shù)據(jù)采集、任務(wù)調(diào)度及數(shù)據(jù)存儲(chǔ)4 部分功能結(jié)構(gòu)相關(guān)關(guān)系,采集流程為:

        (1) 按照采集頁(yè)面的查詢參數(shù)進(jìn)行采集參數(shù)設(shè)置,如時(shí)間、區(qū)域等參數(shù),一般為全數(shù)據(jù)采集,確定參數(shù)后進(jìn)行進(jìn)行HTTP 請(qǐng)求報(bào)文(從客戶向服務(wù)器發(fā)送的請(qǐng)求報(bào)文)組裝,HTTP 請(qǐng)求報(bào)文由請(qǐng)求行、請(qǐng)求頭部、空行和請(qǐng)求數(shù)據(jù)4 個(gè)部分組成。

        (2)組裝好請(qǐng)求報(bào)文后,客戶端向服務(wù)的發(fā)送報(bào)文請(qǐng)求,其根本操作就是按照請(qǐng)求報(bào)文內(nèi)容的請(qǐng)求對(duì)應(yīng)的URL 地址發(fā)送去搬過去,URL 地址和報(bào)文頭的Host 屬性組成完整的請(qǐng)求URL。

        圖1 總體流程圖

        (3)服務(wù)器端的響應(yīng)報(bào)文,系統(tǒng)后臺(tái)服務(wù)按照客戶端請(qǐng)求返回響應(yīng)報(bào)文,HTTP 響應(yīng)由狀態(tài)行、消息報(bào)頭、響應(yīng)正文三個(gè)部分組成。

        (4)頁(yè)面表單數(shù)據(jù)解析操作就是針對(duì)響應(yīng)報(bào)文返回的響應(yīng)正文進(jìn)行數(shù)據(jù)解析,可直接用正則表達(dá)式對(duì)整個(gè)響應(yīng)報(bào)文進(jìn)行匹配提取出對(duì)應(yīng)信息。

        (5)數(shù)據(jù)解析完畢后,按照業(yè)務(wù)列表即表頭標(biāo)識(shí)把對(duì)應(yīng)列頁(yè)面數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)庫(kù)中,同時(shí)進(jìn)行相關(guān)日志記錄, 并把采集的URL 地址及參數(shù)信息同時(shí)記錄存儲(chǔ)至數(shù)據(jù)庫(kù)日志表中。

        (6)重復(fù)以上步驟(2)~(5),直至數(shù)據(jù)采集完畢。

        在數(shù)據(jù)采集過程中,由于目前很多業(yè)務(wù)系統(tǒng)為了數(shù)據(jù)響應(yīng)的及時(shí)性,會(huì)按照頁(yè)面列表顯示的條數(shù)進(jìn)行指定數(shù)據(jù)行數(shù)的返回,此時(shí)要特別注意進(jìn)行“下一頁(yè)”的URL 繼續(xù)采集,直至“最后一頁(yè)”采集完畢。

        2 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)

        2.1 數(shù)據(jù)抓取地址獲取

        要實(shí)現(xiàn)微信公眾號(hào)文章的抓取,首先要了解公眾號(hào)文章的規(guī)則。

        通過對(duì)微信客戶端可以取得公眾號(hào)歷史消息的地 址, 地 址 格 式 為“https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=xxxxx&scene=100#wec hat_redirect”, 但是這個(gè)地址需要在微信客戶端上打開,即使通過Fiddler 抓取到的真實(shí)請(qǐng)求地址,也因?yàn)樾枰?yàn)證且地址有效期是20 分鐘, 而無(wú)法取得文章的分類,所以該地址無(wú)法使用。

        通過對(duì)公眾號(hào)菜單的地址取得地址“http://mp.weixin.qq.com/mp/homepage?__biz=xxxxx&hid=y&sn=z&scene=100#wechat_redirect”,這個(gè)地址是永久性的,不需要驗(yàn)證并且可以獲取到該菜單下的分類及分類下的所有文章列表,所以可以通過該地址來(lái)抓取文章分類和文章列表。

        然后對(duì)公眾號(hào)文章 的地址“https://mp.weixin.qq.com/s/xxxxxx”進(jìn)行分析,這個(gè)地址同列表連接相同,可以用來(lái)抓取文章內(nèi)容。

        通過以上步驟即可獲得抓取文章列表和文章內(nèi)容的地址規(guī)則。

        2.2 抓取文章列表

        要實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)地址的抓取,就要使用Python 中的urllib3 和requests 庫(kù)。 requests 庫(kù)是Python 應(yīng)用最為廣泛的HTTP 工具庫(kù),而urllib3 則是requests 的基石。

        通過Python 的urllib3 和requests 庫(kù)請(qǐng)求獲取的文章分類的地址,獲取對(duì)應(yīng)的HTML 頁(yè)面源代碼。源代碼中的Javascript 代碼中以“var data=”開頭的數(shù)據(jù)包含分類名稱,如cname:建筑工程,其中的建筑工程即為分類名稱。 使用正則表達(dá)式“cname:[^,]*”,可以抓取到所有的分類名稱,抓取到的分類名稱存在重復(fù),且順序再后續(xù)抓取文章列表中要用到, 所以需要在排序后去重。 然后通過下拉滾動(dòng)訪問文章列表可以得到獲取文章列表的地址“http://mp.weixin.qq.com/mp/homepage?__biz=xxxxx&hid=y&sn=z&scene=100&cid=0&begin=1&count=5&action=appmsg_list&f=json&r=r&appmsg_token=”,字段解釋如表1 所示。 POST 請(qǐng)求該地址,可以獲取到數(shù)據(jù)如圖2 所示,數(shù)據(jù)字段解釋如表2 所示。 然后把抓取到的文章內(nèi)容存儲(chǔ)到數(shù)據(jù)庫(kù)中。

        2.3 抓取文章內(nèi)容

        對(duì)抓取到文章地址進(jìn)行文章內(nèi)容抓取得到圖3的內(nèi)容, 可以得出內(nèi)容主要包含在id=“js_content”的div 標(biāo)簽中,使用lxml 對(duì)該div 的內(nèi)容進(jìn)行提取,如果包含id=“js_share_source”的a 標(biāo)簽,則說(shuō)明該地址為分享地址,則需要對(duì)原地址的內(nèi)容進(jìn)行抓??;否則當(dāng)前頁(yè)面的內(nèi)容即為文章的內(nèi)容。抓取到的內(nèi)容直接保存到數(shù)據(jù)庫(kù)中。 抓取代碼如圖4 所示。

        2.4 數(shù)據(jù)存儲(chǔ)

        圖2 文章列表

        為實(shí)現(xiàn)數(shù)據(jù)的持久化存儲(chǔ),把數(shù)據(jù)存儲(chǔ)到關(guān)系型數(shù)據(jù)庫(kù)MySQL 中。MySQL 中要提前定義表結(jié)構(gòu),也就是說(shuō)表共有多少列(屬性)要提前定義好,并且同事需要定義好每個(gè)列所占用的存儲(chǔ)空間。數(shù)據(jù)以行為單位組織在一起,假如某一行的某一列沒有數(shù)據(jù),也需要占用存儲(chǔ)空間。通過對(duì)需求和抓取到的數(shù)據(jù)進(jìn)行分析后,設(shè)計(jì)相關(guān)數(shù)據(jù)表,數(shù)據(jù)表設(shè)計(jì)如表3 和表4 所示。

        表1 請(qǐng)求參數(shù)說(shuō)明

        表2 文章列表字段

        2.4.1 數(shù)據(jù)表設(shè)計(jì)

        圖3 網(wǎng)頁(yè)內(nèi)容

        圖4 部分抓取代碼

        表3 菜單表設(shè)計(jì)

        表4 文章表設(shè)計(jì)

        2.4.2 SQLAlchemy

        數(shù)據(jù)表設(shè)計(jì)好之后,需要使用Python 把抓取到的數(shù)據(jù)進(jìn)行處理后存儲(chǔ)到數(shù)據(jù)庫(kù)中。 SQLAlchemy 是為Python 變成語(yǔ)言提供的開源SQL 工具包及對(duì)象關(guān)系映射器(ORM)。 SQLAlchemy 提供為高效和高性能數(shù)據(jù)庫(kù)訪問而設(shè)計(jì)的,適配入簡(jiǎn)單和Python 式領(lǐng)域語(yǔ)言中的,全套的周知的企業(yè)級(jí)持久化模式。 SQLAlchemy的理念是:關(guān)系數(shù)據(jù)庫(kù)表現(xiàn)得不太像對(duì)象搜集,因?yàn)轶w量和性能開始成為關(guān)切; 而對(duì)象搜集表現(xiàn)得不太像表格和行, 因?yàn)楦嗟某橄蟊辉O(shè)計(jì)入其中。 因此,SQLAlchmey 采用了類似于Java 里Hibernate 的數(shù)據(jù)映射器模式,而不是其他ORM 框架采用的主動(dòng)記錄模式。 不過,通過可選插件可以讓用戶使用聲明式語(yǔ)法。

        2.5 定時(shí)服務(wù)

        每天發(fā)布的文章內(nèi)容有限而且內(nèi)容實(shí)時(shí)性要求不高, 不需要一直運(yùn)行, 所以使用Python 中的schedule 設(shè)置定時(shí)任務(wù),每天早上九點(diǎn)開始執(zhí)行任務(wù),為防止服務(wù)器重啟等異常原因?qū)е氯蝿?wù)重啟,故每次重啟時(shí)直接執(zhí)行采集任務(wù)。

        2.6 結(jié)果展示

        任務(wù)會(huì)在每天09:00 開始,自動(dòng)開始執(zhí)行采集任務(wù)。采集過程中會(huì)記錄相應(yīng)的日志,如有新增內(nèi)容,則采集后存儲(chǔ)到數(shù)據(jù)庫(kù)。 具體采集結(jié)果如圖5 所示

        圖5 采集日志

        3 結(jié)語(yǔ)

        在大數(shù)據(jù)時(shí)代, 數(shù)據(jù)共享和數(shù)據(jù)采集越發(fā)重要,Python 在數(shù)據(jù)采集方便發(fā)揮了重要作用。 由此可見,基于Python 編程語(yǔ)言的網(wǎng)絡(luò)爬蟲技術(shù),可以被用于多種網(wǎng)站、網(wǎng)頁(yè)數(shù)據(jù)的搜集中,通過分析爬蟲搜集、攔截的數(shù)據(jù)信息,可以有效避免外來(lái)不明主體對(duì)網(wǎng)站服務(wù)器的攻擊。

        猜你喜歡
        文章內(nèi)容列表報(bào)文
        巧用列表來(lái)推理
        基于J1939 協(xié)議多包報(bào)文的時(shí)序研究及應(yīng)用
        汽車電器(2022年9期)2022-11-07 02:16:24
        Harry Potter
        學(xué)習(xí)運(yùn)用列表法
        70 Days in a Lifeboat
        THE THREE MOST INTELLIGENT MACHINES FOR YOUR HOME
        CTCS-2級(jí)報(bào)文數(shù)據(jù)管理需求分析和實(shí)現(xiàn)
        擴(kuò)列吧
        淺析反駁類報(bào)文要點(diǎn)
        ATS與列車通信報(bào)文分析
        午夜色大片在线观看| 亚洲一区二区高清精品| 91精品国产色综合久久不| 蜜桃av一区二区三区| 久久精品亚洲国产av网站| av熟妇一区二区三区| 欧美又粗又长又爽做受| 亚洲日韩成人av无码网站| 欧美老妇与禽交| 亚洲丁香婷婷综合久久小说| 日韩精品久久久中文字幕人妻| 精品午夜一区二区三区| 中文少妇一区二区三区| 国产精品伦理久久一区| 国产成人91久久麻豆视频| 四川丰满妇女毛片四川话| 久久99精品免费国产| 黄色一区二区三区大全观看| 蜜桃视频一区二区在线观看| 国产莉萝无码av在线播放| 少妇人妻在线视频| 亚洲亚洲亚洲亚洲亚洲天堂| 在线观看亚洲视频一区二区| 虎白女粉嫩粉嫩的18在线观看 | 亚洲va欧美va| 久国产精品久久精品国产四虎| 成人影院免费观看在线播放视频| 国产精品伦理久久一区| 国产精品av在线| 妺妺窝人体色www在线图片| 99riav精品国产| 久久久精品久久久国产| 在线精品国产亚洲av蜜桃| 国产无吗一区二区三区在线欢| 97无码人妻福利免费公开在线视频| 久久99久久久无码国产精品色戒| 日本岛国一区二区三区| 西川结衣中文字幕在线| 毛片24种姿势无遮无拦| 久久精品一品道久久精品9| 亚洲精品熟女av影院|