Python-爬蟲

Python是一種跨平臺(tái)的計(jì)算機(jī)程序設(shè)計(jì)語言。是一個(gè)高層次的結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮?a target="_blank">腳本語言。最初被設(shè)計(jì)用于編寫自動(dòng)化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越多被用于獨(dú)立的、大型項(xiàng)目的開發(fā)

淺談我對(duì)于python的看法

???????? 在我眼中,python相較于其他語言,最明顯的就是方便,簡(jiǎn)單。沒有復(fù)雜的框架,沒有眼花繚亂的循環(huán),沒有艱深晦澀的報(bào)錯(cuò)。寫完幾百行的代碼,換人來僅僅幾分鐘就可看懂,用到之前自己寫的代碼也無需再次編寫,只要一句簡(jiǎn)單的import * 即可多次調(diào)用。唯一的美中不足就是相對(duì)于其他語言處理較慢。


第三方庫源

???????? Python用pip安裝第三方庫的時(shí)候經(jīng)常會(huì)出現(xiàn)下載中斷,是因?yàn)閲庀螺d通道不穩(wěn)定,一但波動(dòng)就終止下載,這里我推薦將pip源地址更換為國內(nèi)地址

阿里云http://mirrors.aliyun.com/pypi/simple/

豆瓣http://pypi.douban.com/simple/

清華大學(xué)https://pypi.tuna.tsinghua.edu.cn/simple/

中國科技大學(xué)https://pypi.mirrors.ustc.edu.cn/simple/

詳細(xì)方法訪問:http://www.itdecent.cn/p/2d74cfa6a754


Python是一種解釋型腳本語言,可以應(yīng)用于以下領(lǐng)域:

Web 和 Internet開發(fā)???????????????????????????????

(1)數(shù)據(jù)分析

(2)人工智能

(3)桌面界面開發(fā)

(4)軟件開發(fā)

(5)后端開發(fā)

(6)網(wǎng)絡(luò)爬蟲


我用的最多的是網(wǎng)絡(luò)爬蟲,本次來討論一下爬蟲


網(wǎng)絡(luò)爬蟲

網(wǎng)絡(luò)爬蟲(又被稱為網(wǎng)頁蜘蛛,網(wǎng)絡(luò)機(jī)器人,在FOAF社區(qū)中,更經(jīng)常的稱為網(wǎng)頁追逐者),是按照一定的規(guī)則,自動(dòng)地抓取萬維網(wǎng)信息的程序或者腳本,它們被廣泛用于互聯(lián)網(wǎng)搜索引擎或其他類似網(wǎng)站,可以自動(dòng)采集所有其能夠訪問到的頁面內(nèi)容,以獲取或更新這些網(wǎng)站的內(nèi)容和檢索方式。從功能上來講,爬蟲一般分為數(shù)據(jù)采集,處理,儲(chǔ)存三個(gè)部分。

Web網(wǎng)絡(luò)爬蟲系統(tǒng)的功能是下載網(wǎng)頁數(shù)據(jù),為搜索引擎系統(tǒng)提供數(shù)據(jù)來源,很多大型的網(wǎng)絡(luò)搜索引擎系統(tǒng)都是基于Web數(shù)據(jù)采集的搜索引擎系統(tǒng),由此可見Web網(wǎng)絡(luò)爬蟲在搜索引擎中的重要性。在網(wǎng)絡(luò)爬蟲的系統(tǒng)框架中,主過程由控制器、解析器、資源庫三部分組成??刂破鞯闹饕ぷ髫?fù)責(zé)給多線程中各個(gè)爬蟲線程分配工作任務(wù);解析器的主要工作是下載網(wǎng)頁,進(jìn)行網(wǎng)頁的處理,處理的內(nèi)容包括JS腳本標(biāo)簽、CSS代碼內(nèi)容、空格字符、HTML標(biāo)簽等內(nèi)容。資源庫是用來存放下載到的網(wǎng)頁資源,-般會(huì)采用大型的數(shù)據(jù)庫存儲(chǔ),并對(duì)其建立索引。

???????? 爬蟲和數(shù)據(jù)分析一樣,也可以用第三方庫來輕松劃學(xué)習(xí),常用的庫為selenium。Lxml.html,requests,bs4,xpath。在平時(shí)上網(wǎng)的時(shí)候,每天會(huì)經(jīng)常去光顧一個(gè)頁面,像我之前就每天起床去看一下全球的疫情數(shù)據(jù),但是全世界國家這么多,城市更是數(shù)不勝數(shù),一個(gè)個(gè)頁面看過去顯然有些耗時(shí)間,于是我自己寫了一個(gè)自動(dòng)化爬蟲,加起來僅兩三百行的代碼,一鍵運(yùn)行即可獲取每日疫情數(shù)據(jù)并且合成表格,打開表格時(shí),我想要的數(shù)據(jù)引入眼簾一目了然。

爬蟲的分類

1.通用爬蟲:通用爬蟲是搜索引擎(Baidu、Google、Yahoo等)“抓取系統(tǒng)”的重要組成部分。主要目的是將互聯(lián)網(wǎng)上的網(wǎng)頁下載到本地,形成一個(gè)互聯(lián)網(wǎng)內(nèi)容的鏡像備份。簡(jiǎn)單來講就是盡可能的;把互聯(lián)網(wǎng)上的所有的網(wǎng)頁下載下來,放到本地服務(wù)器里形成備分,在對(duì)這些網(wǎng)頁做相關(guān)處理(提取關(guān)鍵字、去掉廣告),最后提供一個(gè)用戶檢索接口。

.

搜索引擎如何抓取互聯(lián)網(wǎng)上的網(wǎng)站數(shù)據(jù)?

1.

門戶網(wǎng)站主動(dòng)向搜索引擎公司提供其網(wǎng)站的url

2.

搜索引擎公司與DNS服務(wù)商合作,獲取網(wǎng)站的url

3.

門戶網(wǎng)站主動(dòng)掛靠在一些知名網(wǎng)站的友情鏈接中

2.聚焦爬蟲:聚焦爬蟲是根據(jù)指定的需求抓取網(wǎng)絡(luò)上指定的數(shù)據(jù)。例如:獲取豆瓣上電影的名稱和影評(píng),而不是獲取整張頁面中所有的數(shù)據(jù)值。

爬蟲的工作原理

???????? 先選擇初始的url,并經(jīng)過dns服務(wù)器轉(zhuǎn)換獲得ip地址。訪問到該頁面之后,會(huì)根據(jù)設(shè)定好的自動(dòng)化程序過濾掉和主題不相關(guān)的鏈接,爬取需要的頁面或者信息。保存到本地之后,解析內(nèi)容再進(jìn)行數(shù)據(jù)清洗最終得到我們想要的效果。



自動(dòng)化代碼的編寫

[if !supportLists](1)??????[endif]第三方庫的導(dǎo)入

我常用python的requests,selenium,lxml.html,xpath,bs4來進(jìn)行爬取

[if !supportLists](2)??????[endif]訪問url并獲取主網(wǎng)頁信息

通常我使用get的方式訪問網(wǎng)頁,訪問到網(wǎng)頁后根據(jù)動(dòng)靜態(tài)網(wǎng)頁來選擇解析方式,以較難的動(dòng)態(tài)網(wǎng)頁來就來,driver.get(url)獲取到網(wǎng)頁源碼之后,用這兩行代碼將字符串形式轉(zhuǎn)換成xpath能解析的html格式

html_source=driver.page_source和

html=lxml.html.fromstring(html_source)

[if !supportLists](3)??????[endif]數(shù)據(jù)爬取

獲取到html格式的網(wǎng)頁源碼,根據(jù)信息的xpath位置使用html.xpath獲取到本地,視情況添加循環(huán)語句,進(jìn)行多次爬取

[if !supportLists](4)??????[endif]數(shù)據(jù)清洗

獲取到的數(shù)據(jù)必然會(huì)存在很多的缺失值,多余的括號(hào),引號(hào)。此時(shí)就要用jieba和flatten庫進(jìn)行數(shù)據(jù)清洗

[if !supportLists](5)??????[endif]數(shù)據(jù)儲(chǔ)存

獲取完所有的信息的最后一步,將信息統(tǒng)計(jì)成一個(gè)表格,輸出到本地文件夾方便打開觀看,通常使用的都是pandas庫的DataFrame函數(shù):

pd.DataFrame.from_dict(z, orient='index')

再用to_xlsx輸出成xlsx表格

df.to_xlsx('1.xlsx',encoding='utf-8-sig')



網(wǎng)絡(luò)爬蟲技術(shù)的最新發(fā)展

傳統(tǒng)的網(wǎng)絡(luò)爬蟲技術(shù)主要應(yīng)刷于抓取靜態(tài)Web網(wǎng)頁,隨著AJAX/Web2.0的流行,如何抓取AJAX等動(dòng)態(tài)頁面成了搜索引擎急需解決的問題,因?yàn)锳JAX顛覆了傳統(tǒng)的純HTTP請(qǐng)求/響應(yīng)協(xié)議機(jī)制,如果搜索引擎依舊采用“爬”的機(jī)制,是無法抓取到AJAX頁面的有效數(shù)據(jù)的AJAX采用了JavaScript 驅(qū)動(dòng)的異步請(qǐng)求/響應(yīng)機(jī)制.以往的爬蟲們?nèi)狈vaScript語義上的理解.基本上無法模擬觸發(fā)JavaScript的異步調(diào)用并解析返回的異步回淵邏輯和內(nèi)容另外.在AJAX的應(yīng)用中,JavaScript 會(huì)對(duì)DOM結(jié)構(gòu)進(jìn)行大量變動(dòng),甚至頁面所有內(nèi)容都通過JavaScript直接從服務(wù)器端讀取并動(dòng)態(tài)繪制出來。這對(duì)習(xí)慣了DOM結(jié)構(gòu)相對(duì)不變的靜態(tài)頁面簡(jiǎn)直是無法理解的由此可以看出.以往的爬蟲是基于協(xié)議驅(qū)動(dòng)的,而對(duì)于AJAX這樣的技術(shù),所需要的爬蟲引擎必須是基于事件驅(qū)動(dòng)的。要實(shí)現(xiàn)事件驅(qū)動(dòng),首先需要解決JavaScript的交互分析和解釋的問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容