999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Python的網絡爬蟲技術的關鍵性問題探索

2018-04-15 16:14:25大連理工大學城市學院董依萌何天宇
電子世界 2018年14期
關鍵詞:進程頁面內容

大連理工大學城市學院 唐 琳 董依萌 何天宇

0 引言

隨著網絡的不斷發展,大量數據以文本形式、圖片甚至視頻的形式存儲,通過網絡爬蟲(Crawler)獲取網絡數據是一種非常流行的方法。本文將基于Python的網絡爬蟲技術的關鍵性問題以及一些相應的解決方法進行討論。

1 相關性問題介紹

數據爬取任務通常是基于Robots協議進行,再分析網站DOM樹爬取所需要的數據。在解析過程中主要使用正則表達式進行篩選和匹配,針對網站的反爬取機制采取一些措施和手段。下面分別針對這些具體知識點和解決方案進行介紹:

1.1 Robots協議

Robots協議的全稱是網絡爬蟲排除標準(即Robots Exclusion Protocol),網站通過Robots協議告訴搜索引擎哪些頁面可以抓取,哪些頁面不能抓取。它是Web站點和搜索引擎爬蟲交互的一種方式,并不是一個規范,所以并不能保證網站隱私。在互聯網世界中,每天都有不計其數的爬蟲在日夜不息地爬取數據,其中惡意爬蟲的數量甚至高于非惡意爬蟲。遵守Robots協議的爬蟲才是好爬蟲,但是并不是每個爬蟲都會主動遵守Robots協議。

1.2 分析網站DOM樹爬取數據

網站結構分析是進行數據采集的必備技能,在編寫爬蟲之前我們需要知道數據所在的位置,之后才能通過遍歷節點樹或查找子節點找到目標數據。Google瀏覽器的開發者模式就是分析網站結構的強力工具,利用好這個工具就可以輕松分析出目標數據的位置,還能獲取渲染內容、cookies等信息。

1.3 正則表達式

正則表達式是一種基于規則進行字符串匹配的工具,不同編程語言都有正則表達式使用的場景。通常我們利用正則表達式從復雜的內容種,提取出我們想要的部分內容。

1.4 模擬瀏覽器

動態的網站由于不能直接獲得想要數據,需要得到渲染之后的網頁等內容加載完成之后在進行下載。其中,模擬翻頁可以使用Selenium與PhantomJS模擬瀏覽器方法實現,具體實現就是通過模擬鼠標點擊頁碼請求后臺,獲取到新數據后重新渲染html的表格部分。

1.5 偽裝爬蟲頭部

某些網頁具有反爬取機制,為了不讓爬蟲爬取數據,有些時候會檢查瀏覽器頭Request Header,然后直接斷網從而拒絕爬取。一個很好的方法就是在Google瀏覽器開發者模式中Network查看生成的請求html文件獲取Request Headers,再通過Google工具Postman轉換為Python代碼。

1.6 偽裝IP

在爬取網站信息的過程中,網站可能會限制每個IP的訪問速度或訪問次數。對于限制訪問速度的情況,通過time.sleep使程序進行短暫休眠后再發出請求進行爬取。對于限制IP訪問次數的時候我們需要通過多個代理IP構建代理IP池輪換訪問。

1.7 多線程與多進程

多線程與多進程都能成倍的提高爬蟲的速度,進程的問題是不同進程之間的內存空間不共享,進程之間的通信有操作系統傳遞,導致通訊效率低,切換開銷大。而所有線程在同一個進程下,共享內存空間,通訊效率高,切換開銷小。線程為了保護內存空間的數據安全,引入了”互斥鎖”。線程的問題是在Python里由于GIL全局解釋器鎖的存在,一個線程需要執行任務必須獲取GIL,在Python的進程里只有一個GIL,但是,在I/O阻塞的時候,解釋器會釋放GIL。所以密集CPU任務,需要充分使用多核CPU資源(服務器,大量的并行計算)的時候,用多進程。密集I/O任務(網絡I/O,磁盤I/O,數據庫I/O)使用多線程合適。根據爬蟲自身檢索頁面(I/O)的行為比較多,還是分析頁面(CPU)的行為更復雜來選擇使用多線程與多進程就好了。

2 解決方案介紹

2.1 分析網站DOM樹爬取數據

在爬蟲開始之前,首先需要我們掌握一些HTML5的基本知識。可以通過在網上或者查閱一些書籍來學習它。可以看懂頁面的源代碼,掌握頁面源代碼的基本結構和可以找到想要元素所在的標簽位置。然后在python 2.x中可以通過pip install beautifulsoup4來安裝beautifulsoup4庫和pip install requests來安裝requests庫。python 3.x可以通過pip3 install beautifulsoup4來安裝beautifulsoup4庫和pip3 install requests來安裝requests庫。然后學習requests庫和BeautifulSoup4庫的使用。

2.2 正則表達式

Python中正則表達式需通過import re來導入re庫來使用。程序種最為常用的功能函數。搜索字符串,以列表類型返回全部能匹配的子串的findall();在一個字符串中替換所有匹配正則表達式的子串,返回替換之后的字符串sub();將一個字符串按照正則表達式匹配結果進行分割,返回列表類型split()等。

2.3 模擬瀏覽器

爬取動態網站數據還需要使用模擬瀏覽器。一般客戶端常見的瀏覽器需要渲染出圖形,因此執行效率較慢。如chrome、firefox。另一種瀏覽器沒有GUI界面,被稱為無頭瀏覽器,這類瀏覽器占用的空間少,執行效率高。如PhantomJS。適合linux這種純CLI界面服務器來執行,所以在爬蟲程序中,如果是需要使用模擬瀏覽器則需要使用無GUI的瀏覽器。

網絡中數據較多時通常分頁存儲,因此,爬蟲代碼中敬仰需要實現翻頁功能。常見翻頁的實現主要有兩種方法。第一種方法是在每次點擊下一頁按鈕的時候,可以看到對應頁面的url是在不停變化的,也就是靜態的生成了一個新的頁面,并且可以看到每次生成的新的頁面的url是有規律可循的。那么我們就可以根據這一情況,在編寫代碼的循環里面實現對url的不停更新,也就實現了翻頁的功能。第二種方法就是,每次在點擊下一頁的時候,當前頁面的url并沒有變化,變化的是這個頁面的內容。也就是在點擊下一頁的時候這個網頁動態的加載了新的內容。這就意味在每次翻頁的時候都需要人為的去點擊下一頁按鈕。為了解決這一問題就有了模擬瀏覽器,讓這個模擬瀏覽器去模擬人為點擊下一頁按鈕的動作,實現翻頁的功能,然后就可以繼續去分析獲取頁面的內容,并得到需要的內容。

還有有一些網頁是隱含分頁形式顯示的,即在顯示的時候只顯示一部分,只有在鼠標向下滾動的時候才會繼續顯示,這樣的話就存在爬蟲爬取下來一個不完整的內容,那么我們就可以讓這個模擬瀏覽器來模擬這個動作,從而可以獲得完整的頁面內容。

2.4 偽裝爬蟲頭部

對于一些網站,如果不是從瀏覽器發出的請求,則得不到響應。所以,我們需要將爬蟲程序發出的請求偽裝成瀏覽器發出的正常請求。具體實現:自定義網頁請求報頭打開工具Fiddler,然后再瀏覽器訪問一個url,在Fiddler左側訪問記錄中,找到“200 HTTPS url”這一條,點擊查看其對應的請求和響應報頭具體內容。然后在自己的爬蟲代碼中加入這些內容。

2.5 多線程與多進程

(1)多線程適合IO密集型程序

IO密集型代碼(文件處理、網絡爬蟲等),多線程能夠有效提升效率(單線程下有IO操作會進行IO等待,造成不必要的時間浪費,而開啟多線程能在線程A等待時,自動切換到線程B,可以不浪費CPU的資源,從而能提升程序執行效率)。所以python的多線程對IO密集型代碼比較友好。當我們使用多線程爬取時,會出現爬蟲每次都會把url列表里url在沒有爬取內容的時候就已經生成了一個線程,就會出現如果斷網的話,就會有很多的url其實還沒有被爬取,對存儲文件的處理就變得很麻煩。對于任務數量不斷增加的程序來說,每有一個任務就要為這些新的鏈接生成新的線程,線程數量暴漲,最終線程數量就會失控。在之后的運行中,線程數量還會不停的增加,完全無法控制。所以,對于任務數量不端增加的程序,固定線程數量的線程池是必要的。

(2)多進程適合CPU密集運算型程序

因為每個進程都有單獨的GIL,互不干擾,這樣就可以實現真正意義上的并行執行,所以在python中,多進程的執行效率優于多線程(僅僅針對多核CPU而言)。在多核下,如果想做并行執行提升程序效率,比較常用有效的方法是使用多進程。

創建一個進程池,進程個數為cpu內核數。電腦的cpu有多少內核便可以同時執行多少個進程,當然也可以填的很多,但是作用不大,并不是進程數越多程序執行就會越快。

3 總結

通過以上對基于python的網絡爬蟲的關鍵性問題的結束和解決,可以看到在網絡飛速發展,信息傳播快速的現在,可以知道網絡爬蟲是我們大量獲取網絡數據的主要手段。為了學好這一技術,首先我們要學會HTML5,通過一些書籍和反反復復查看一個網頁的源代碼結合來學習這門語言,掌握它的基本語法和結構。學會使用F12:快捷鍵,(更多工具——開發者工具)。接下來就要學會bs4和re結合使用,bs4可以找到需要的標簽,re可以從這個標簽中獲得需要的內容,從而可以在頁面中解析和獲得我們想要的內容。在學習一個模擬瀏覽器,實現翻頁和加載完畢頁面內容,這樣一個簡單的爬蟲就實現了。可以繼續改進代碼結合數據庫來實現一個簡單的網頁去重,偽裝一下爬蟲的首部,以及通過多線程或者多進程來提高爬蟲的效率。最后要注意爬蟲的時效性,作為一個網絡爬蟲開發者,我們應該隨時關注我們正在爬取的網站的網頁的結構,一旦發生了變化,我們就要及時更新爬蟲的解析規則,以確保爬蟲的正常運行。

猜你喜歡
進程頁面內容
大狗熊在睡覺
刷新生活的頁面
保健醫苑(2022年1期)2022-08-30 08:39:14
內容回顧溫故知新
科學大眾(2022年11期)2022-06-21 09:20:52
債券市場對外開放的進程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
主要內容
臺聲(2016年2期)2016-09-16 01:06:53
社會進程中的新聞學探尋
民主與科學(2014年3期)2014-02-28 11:23:03
我國高等教育改革進程與反思
教育與職業(2014年7期)2014-01-21 02:35:04
Linux僵死進程的產生與避免
同一Word文檔 縱橫頁面并存
淺析ASP.NET頁面導航技術
主站蜘蛛池模板: 欧美激情成人网| 1级黄色毛片| 欧美成一级| 欧美综合激情| 国产精品美女网站| 午夜啪啪福利| 九九热在线视频| 色综合久久88| 丁香综合在线| 在线视频97| 日本国产精品一区久久久| 亚洲综合天堂网| 播五月综合| 欧美全免费aaaaaa特黄在线| 三级欧美在线| 日韩大乳视频中文字幕| 一本大道香蕉高清久久| 99久久精彩视频| 久爱午夜精品免费视频| 青青青国产免费线在| 国产成人精品一区二区| 国产真实乱了在线播放| 日韩精品免费一线在线观看| 欧美精品v欧洲精品| 亚欧成人无码AV在线播放| 露脸真实国语乱在线观看| 国产成人一区二区| 无码免费的亚洲视频| 久久精品嫩草研究院| 久久国产高潮流白浆免费观看| 亚洲91在线精品| 人妻一区二区三区无码精品一区| 999精品视频在线| AV无码无在线观看免费| 国产亚洲高清在线精品99| 在线免费观看a视频| 色婷婷久久| 亚洲丝袜第一页| 免费看久久精品99| 免费国产高清精品一区在线| 青青操视频免费观看| 亚洲中文字幕在线一区播放| 91黄视频在线观看| 国产成人高清在线精品| aa级毛片毛片免费观看久| 青青操国产视频| 亚洲AⅤ无码国产精品| 亚洲精品第1页| 一级片一区| 色播五月婷婷| 小13箩利洗澡无码视频免费网站| 日韩天堂视频| 国产夜色视频| 久久香蕉国产线| 午夜电影在线观看国产1区| 久草视频精品| 在线免费亚洲无码视频| 亚洲天堂视频网站| 欧美成人精品在线| 91免费在线看| 国产精品手机视频一区二区| …亚洲 欧洲 另类 春色| 亚洲一区无码在线| 欧美亚洲日韩不卡在线在线观看| 在线色国产| 日韩福利在线视频| 免费在线国产一区二区三区精品| 欧美三级不卡在线观看视频| 黄网站欧美内射| 国产精品流白浆在线观看| 亚洲乱码视频| av在线手机播放| 欧美日韩另类国产| 99ri精品视频在线观看播放| 999精品在线视频| 国产午夜在线观看视频| 亚洲丝袜第一页| 风韵丰满熟妇啪啪区老熟熟女| 午夜福利亚洲精品| 亚洲人成日本在线观看| 四虎永久在线视频| 国产精品va免费视频|