項(xiàng)目七 爬取網(wǎng)頁(yè)數(shù)據(jù)_第1頁(yè)
項(xiàng)目七 爬取網(wǎng)頁(yè)數(shù)據(jù)_第2頁(yè)
項(xiàng)目七 爬取網(wǎng)頁(yè)數(shù)據(jù)_第3頁(yè)
項(xiàng)目七 爬取網(wǎng)頁(yè)數(shù)據(jù)_第4頁(yè)
項(xiàng)目七 爬取網(wǎng)頁(yè)數(shù)據(jù)_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

項(xiàng)目七爬取網(wǎng)絡(luò)數(shù)據(jù)目錄7.2【任務(wù)2】寫入讀取數(shù)據(jù)7.1【任務(wù)1】使用Requests庫(kù)爬取小說網(wǎng)站案例分析3本任務(wù)是使用Requests爬取黨校同學(xué)的網(wǎng)址,之后再將小說中每章節(jié)的內(nèi)容爬取下來,保存在本地。需求描述案例分析4使用requests獲取網(wǎng)頁(yè)源代碼。使用正則表達(dá)式獲取內(nèi)容。使用文件進(jìn)行操作。設(shè)計(jì)思路任務(wù)一使用Requests庫(kù)爬取小說網(wǎng)站5案例展示知識(shí)點(diǎn)講解6010203網(wǎng)絡(luò)爬蟲的類型網(wǎng)絡(luò)爬蟲的概念爬蟲實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲的概念網(wǎng)絡(luò)爬蟲的概念網(wǎng)絡(luò)爬蟲(webcrawler)又稱為網(wǎng)絡(luò)蜘蛛(webspider)或網(wǎng)絡(luò)機(jī)器人(webrobot),是模擬客戶端(瀏覽器)發(fā)送網(wǎng)絡(luò)請(qǐng)求,獲取響應(yīng),并按照自定義的規(guī)則提取數(shù)據(jù)的程序,簡(jiǎn)單來說,就是發(fā)送與瀏覽器一樣的請(qǐng)求,獲取與瀏覽器所獲取的一樣的數(shù)據(jù)。網(wǎng)絡(luò)爬蟲本質(zhì)上是一段計(jì)算機(jī)程序或腳本,其按照一定的邏輯和算法規(guī)則自動(dòng)地抓取和下載萬維網(wǎng)的網(wǎng)頁(yè),是搜索引擎的一個(gè)重要組成部分。7網(wǎng)絡(luò)爬蟲的類型通用網(wǎng)絡(luò)爬蟲通用網(wǎng)絡(luò)爬蟲又稱全網(wǎng)爬蟲,爬行對(duì)象由一批種子URL擴(kuò)充至整個(gè)Web,主要為門戶站點(diǎn)、搜索引擎和大型Web服務(wù)提供商采集數(shù)據(jù)。通過網(wǎng)絡(luò)爬取目標(biāo)資源在全互聯(lián)網(wǎng)中,爬取數(shù)據(jù)巨大。通用網(wǎng)絡(luò)爬蟲的基本構(gòu)成:初始URL集合,URL隊(duì)列,頁(yè)面爬行模塊,頁(yè)面分析模塊,頁(yè)面數(shù)據(jù)庫(kù),鏈接過濾模塊等構(gòu)成。其爬行策略主要有深度優(yōu)先爬行策略和廣度優(yōu)先爬行策略。8網(wǎng)絡(luò)爬蟲的類型聚焦網(wǎng)絡(luò)爬蟲聚焦網(wǎng)絡(luò)爬蟲又稱為主題網(wǎng)絡(luò)爬蟲,是指選擇性的爬取那些與預(yù)先定義好的主題相關(guān)頁(yè)面的網(wǎng)絡(luò)爬蟲。主要應(yīng)用在對(duì)特定信息的爬取,為某一類特定的人群提供服務(wù)。聚焦網(wǎng)絡(luò)爬蟲的基本構(gòu)成:初始URL,URL隊(duì)列,頁(yè)面爬行模塊,頁(yè)面分析模塊,頁(yè)面數(shù)據(jù)庫(kù),連接過濾模塊,內(nèi)容評(píng)價(jià)模塊,鏈接評(píng)價(jià)模塊等構(gòu)成。9網(wǎng)絡(luò)爬蟲的類型增量式網(wǎng)絡(luò)爬蟲増量式網(wǎng)絡(luò)爬蟲支隊(duì)已下載網(wǎng)頁(yè)采集增量式更新或只爬取新產(chǎn)生的及意見發(fā)生變化的網(wǎng)頁(yè),對(duì)于未發(fā)生內(nèi)容變化的網(wǎng)頁(yè),則不會(huì)爬取。增量式網(wǎng)絡(luò)爬蟲在一定程度上能夠保證所爬取的頁(yè)面盡可能是新頁(yè)面。10網(wǎng)絡(luò)爬蟲的類型深層頁(yè)面爬蟲Web頁(yè)面按存在方式分為表層網(wǎng)頁(yè)和深層網(wǎng)頁(yè)。表層網(wǎng)頁(yè)是傳統(tǒng)搜索引擎可以索引的頁(yè)面,是以超鏈接可以達(dá)到的、靜態(tài)網(wǎng)頁(yè)為主的Web頁(yè)面。深層網(wǎng)頁(yè)是大部分內(nèi)容不能通過靜態(tài)鏈獲取的,隱藏在搜索表單后,只有用戶提交一些關(guān)鍵詞才能獲得的Web頁(yè)面。例如,那些用戶注冊(cè)后內(nèi)容才可見的網(wǎng)頁(yè)就屬于深層頁(yè)面。11爬蟲實(shí)現(xiàn)爬蟲的基本流程用戶獲取網(wǎng)絡(luò)數(shù)據(jù)有兩種方式,一種是瀏覽器提交請(qǐng)求→下載網(wǎng)頁(yè)代碼→解析成頁(yè)面;另一種是模擬瀏覽器發(fā)送請(qǐng)求(獲取網(wǎng)頁(yè)代碼)→提取有用的數(shù)據(jù)→存放于數(shù)據(jù)庫(kù)或文件中。爬蟲一般是使用第二種方式。爬取流程如圖所示。12爬蟲實(shí)現(xiàn)發(fā)起請(qǐng)求在爬蟲過程中一般使用http庫(kù)向目標(biāo)站點(diǎn)發(fā)送請(qǐng)求,即發(fā)送一個(gè)Request,該請(qǐng)求中包含請(qǐng)求頭和請(qǐng)求體。請(qǐng)求頭為User-agent:請(qǐng)求頭中如果沒有user-agent客戶端配置,服務(wù)端可能當(dāng)做一個(gè)非法用戶host;請(qǐng)求體:如果是get方式,請(qǐng)求體沒有內(nèi)容(get請(qǐng)求的請(qǐng)求體放在url后面參數(shù)中,直接能看到);如果是post方式,請(qǐng)求體是formatdata。13爬蟲實(shí)現(xiàn)獲取響應(yīng)內(nèi)容如果發(fā)送請(qǐng)求成功,服務(wù)器能夠正常響應(yīng),則會(huì)得到一個(gè)Response,Response包含:html,json,圖片,視頻等。14解析內(nèi)容響應(yīng)的內(nèi)容如果是HTML數(shù)據(jù),則需要正則表達(dá)式(RE模塊)、第三方解析庫(kù)如Beautifulsoup,pyquery等解析。如果是json數(shù)據(jù),需要使用JSON模塊接續(xù),如果是二進(jìn)制文件,則需要以wb的方式寫入文件。爬蟲實(shí)現(xiàn)保存數(shù)據(jù)解析完的數(shù)據(jù)可以保存在數(shù)據(jù)庫(kù)中,常用的數(shù)據(jù)庫(kù)有MySQL,Mongdb、Redis等,或者可以保存問JSON、excel、txt文件。15爬蟲的主要框架在Python中,爬蟲框架很多,常見的爬蟲框架主要有Scrapy框架、Pyspider框架和CoB框架。Scrapy框架是Python中最著名、最受歡迎的爬蟲框架。它是一個(gè)相對(duì)成熟的框架,有著豐富的文檔和開放的社區(qū)交流空間。Scrapy框架是為了爬取網(wǎng)站數(shù)據(jù)、提取結(jié)構(gòu)性數(shù)據(jù)面編寫的,可以應(yīng)用在包括數(shù)據(jù)挖掘、信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。爬蟲實(shí)現(xiàn)16爬蟲的主要框架Pyspider框架是國(guó)人架寫的、用Python實(shí)現(xiàn)的、功能強(qiáng)大的網(wǎng)絡(luò)爬蟲系統(tǒng),能在瀏覽器界面上進(jìn)行腳本的編寫、功能的調(diào)度和爬取結(jié)果的實(shí)時(shí)查詢,后端使用常用的數(shù)據(jù)庫(kù)進(jìn)行爬取結(jié)果的存儲(chǔ),還能定時(shí)設(shè)置任務(wù)與任務(wù)優(yōu)先級(jí)等。CoB框架是一個(gè)分布式的爬蟲框架,用戶只需編寫幾個(gè)特定的函數(shù),而無需關(guān)注分布式運(yùn)行的細(xì)節(jié),任務(wù)會(huì)被自動(dòng)分配到多臺(tái)機(jī)器上,整個(gè)過穩(wěn)對(duì)用戶是通明的。目錄7.2【任務(wù)2】寫入讀取數(shù)據(jù)7.1【任務(wù)1】使用Requests庫(kù)爬取小說網(wǎng)站案例分析18本任務(wù)是爬取html-color-codes網(wǎng)站的tr標(biāo)簽里面的style和tr下幾個(gè)并列的td標(biāo)簽數(shù)據(jù)并保存到數(shù)據(jù)庫(kù)中,通過數(shù)據(jù)庫(kù)命令查看表中的內(nèi)容。需求描述案例分析19分析網(wǎng)站。爬取網(wǎng)站。將爬取的數(shù)據(jù)保存在數(shù)據(jù)庫(kù)中。使用SQL命令查看數(shù)據(jù)庫(kù)中的數(shù)據(jù)。設(shè)計(jì)思路任務(wù)二使用正則表達(dá)式提取網(wǎng)頁(yè)內(nèi)容20案例展示知識(shí)點(diǎn)講解21010203CSV數(shù)據(jù)寫入和讀取BeautifulSoupMySQL數(shù)據(jù)寫入和讀取BeautifulSoupBeautifulSoupBeautifulSoup是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫(kù)。它能夠通過你喜歡的轉(zhuǎn)換器實(shí)現(xiàn)慣用的文檔導(dǎo)航、查找、修改文檔的方式。BeautifulSoup安裝命令如下:>pipinstallbeautifulsoup422CSV數(shù)據(jù)寫入和讀取CSV概述23CSV(Commae-SeparetedValues,逗號(hào)分隔值)是國(guó)際上通用的一二維數(shù)據(jù)存儲(chǔ)格式,其文件以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本),文件的每一行都是一個(gè)數(shù)據(jù)記錄。每個(gè)記錄由一個(gè)或多個(gè)字段組成,用逗號(hào)分隔。使用逗號(hào)作為字段分隔符是此文件格式的名稱的來源,因?yàn)榉指糇址部梢圆皇嵌禾?hào),有時(shí)也稱為字符分隔值。二維數(shù)據(jù)可視為多條一維數(shù)據(jù)的集合,當(dāng)二維數(shù)據(jù)只有一個(gè)元素時(shí),這個(gè)二維數(shù)據(jù)就是一維數(shù)據(jù)。CSV數(shù)據(jù)寫入和讀取CSV概述24CSV在使用過程中需要注意以下格式規(guī)范:以純文本形式存儲(chǔ)表格數(shù)據(jù)文件的每一行對(duì)應(yīng)表格中的一條數(shù)據(jù)記錄每條記錄由一個(gè)或多個(gè)字段組成字段之間使用逗號(hào)(英文、半角)分隔CSV也稱字符分隔值CSV數(shù)據(jù)寫入和讀取CSV讀取25對(duì)CSV文件的讀取有兩種方式,一種是通過列表下標(biāo)讀取,另一種通過key獲取。通過列表下標(biāo)讀取文件時(shí),直接使用open()函數(shù)打開csv文件。使用csv.reader()方法,其中參數(shù)為指針。因?yàn)樵揷sv文件有表頭,使用可以使用next()函數(shù)直接跳過第一組數(shù)據(jù),即表頭數(shù)據(jù)。然后直接通過列表下標(biāo)獲取想要的數(shù)據(jù)。CSV數(shù)據(jù)寫入和讀取CSV讀取26示例代碼如下。import

csvwith

open('stock.csv','r')asfp:

#reader是個(gè)迭代器

reader

=

csv.reader(fp)

next(reader)

for

i

in

reader:

#print(i)

name

=

i[3]

volumn

=

i[-1]

print({'name':name,'volumn':volumn})CSV數(shù)據(jù)寫入和讀取CSV文件的寫入27使用writer創(chuàng)建對(duì)象,writerow(s)寫入:寫入數(shù)據(jù)到csv文件,需要?jiǎng)?chuàng)建一個(gè)writer對(duì)象,才可以使用writerow寫入一行,而writerows是全部寫入。其中默認(rèn)下newline=‘\n’即寫入一行就會(huì)換行,所以需要改成空,數(shù)據(jù)都是存放在列表中。示例代碼如下。with

open("classroom.csv",'w',encoding='utf-8',newline='')asfp:

writer

=

csv.writer(fp)

writer.writerow(headers)

writer.writerows(value)CSV數(shù)據(jù)寫入和讀取CSV文件的寫入28使用DictWriter創(chuàng)建對(duì)象,writerow(s)寫入:當(dāng)數(shù)據(jù)是存放在字典中可以使用DictWriter創(chuàng)建writer對(duì)象,其中,需要傳兩個(gè)參數(shù),第一個(gè)是指針,第二個(gè)是表頭信息。當(dāng)使用DictWriter創(chuàng)建對(duì)象時(shí),寫入表頭還需要執(zhí)行writeheader()操作。示例代碼如下。import

csvwith

open("classroom1.csv",'w',encoding='utf-8',newline='')asfp:#默認(rèn)newline='\n'

writer

=

csv.DictWriter(fp,headers)

writer.writeheader()

writer.writerows(value)MySQL數(shù)據(jù)寫入和讀取MySQL數(shù)據(jù)寫入和讀取29PyMySQL是在Python3.x版本中用于連接MySQL服務(wù)器的一個(gè)庫(kù)。安裝PyMySQL的命令如下:pipinstallpymysqlPython與MySQL數(shù)據(jù)庫(kù)連接的過程如下:①導(dǎo)入連接MySQL需要的包pymysql:importpymysql;②創(chuàng)建連接:con=pymysql.connect("主機(jī)名","用戶名","密碼","所要連接

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論