版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
能力要求能通過(guò)學(xué)習(xí)本章知識(shí),了解存儲(chǔ)網(wǎng)絡(luò)采集得到數(shù)據(jù)的方法。掌握HTML數(shù)據(jù)抽取的相關(guān)數(shù)據(jù)。熟悉數(shù)據(jù)存儲(chǔ)到MySQL數(shù)據(jù)庫(kù)的方法。找尋更適合采集數(shù)據(jù)得存儲(chǔ)方法。1HTML正文抽取2MySQL數(shù)據(jù)庫(kù)3更適合網(wǎng)絡(luò)數(shù)據(jù)采集的MongoDB目錄4.1HTML正文抽取4.1HTML正文抽取對(duì)HTML正文的抽取存儲(chǔ),主要是指將HTML文檔的主要組成元素抽取出來(lái)。HTML正文存儲(chǔ)為兩種格式:JSON和CSV(Comma-SeparatedValues,逗號(hào)分隔符)。以一個(gè)小說(shuō)閱讀網(wǎng)為例,HTML正文抽取就是抽取出標(biāo)題、章節(jié)、章節(jié)名稱和鏈接。首先需要說(shuō)明的是,這是一個(gè)靜態(tài)網(wǎng)站,標(biāo)題、章節(jié)、章節(jié)名稱都不是由JavaScript動(dòng)態(tài)加載的,這是下面所進(jìn)行工作的前提。這個(gè)例子使用前面所介紹的BeautifulSoup和lxml兩種方式進(jìn)行解析抽取,力求將之前的知識(shí)進(jìn)行靈活運(yùn)用。1存儲(chǔ)為JSON格式首先使用Requests訪問(wèn)小說(shuō)閱讀網(wǎng),獲取HTML文檔內(nèi)容,并且打印文檔內(nèi)容,相關(guān)代碼如下。importrequestsUser_agent='Mozila/4.0(compatible;WindowsNT)Headers=('User-Agent';user_agent)r=requests.get('/',headers=headers)Printr.txt運(yùn)行上述代碼,得到的運(yùn)行結(jié)果接著分析網(wǎng)站首頁(yè)的HTML結(jié)構(gòu),確定要抽取標(biāo)記的位置,分析如下:標(biāo)題和章節(jié)都被包含在<divclass=mulu>標(biāo)記下,標(biāo)題位于<divclass=mulu-title>的<h2>中,章節(jié)位于<divclass=box>下的<a>中。經(jīng)過(guò)上述的分析接下來(lái)就可以進(jìn)行編碼了,代碼示例如下。Soup=BeautifulSoup(r.rtxt,'html,parser',from_encoding='utf-8')#html.parserFormuluinsoup.find_all(class_=mulu);h2=mulu.find('h2)Ifh2!=None;H2_title=h2.string#獲取標(biāo)題Forainmulu.find(class_='box').find_all('a');#獲取a標(biāo)記中URL和章節(jié)內(nèi)容Href=a.get('href)Box_tirle=a.get('title)Printhref,box_title1存儲(chǔ)為JSON格式存儲(chǔ)為CSV格式CSV(Comma-SeparatedValues,逗號(hào)分隔值)是存儲(chǔ)表格數(shù)據(jù)的常用文件格式。MicrosoftExcel和很多應(yīng)用都支持CSV格式,因?yàn)樗芎?jiǎn)潔。和Python一樣,CSV中的留白(whitespace)也是很重要的:每一行都用一個(gè)換行符分隔,列與列之間用逗號(hào)分隔(因此也叫“逗號(hào)分隔值”)。CSV文件還可以用Tab字符或其他字符分隔行,但是不太常見(jiàn),用得不多。如果只想從網(wǎng)頁(yè)上把CSV文件下載到計(jì)算機(jī)里,不打算做任何解析和修改,那么這節(jié)后面的內(nèi)容就沒(méi)必要再看了。只要用上一節(jié)里介紹的文件下載方法下載并保存為CSV格式就行了。Python的csv庫(kù)可以非常簡(jiǎn)單地修改CSV文件,甚至從零開(kāi)始創(chuàng)建一個(gè)CSV文件。網(wǎng)絡(luò)數(shù)據(jù)采集的一個(gè)常用功能就是獲取HTML表格并寫(xiě)入CSV文件。維基百科的文本編輯器對(duì)比詞條中用了許多復(fù)雜的HTML表格,用到了顏色、鏈接、排序,以及其他在寫(xiě)入CSV文件之前需要忽略的HTML元素。用BeautifulSoup和get_text()函數(shù),可以用十幾行代碼完成這件事。importcsvfromurllib.requestimporturlopenfrombs4importBeautifulSouphtml=urlopen(/wiki/Comparison_of_text_editors)bsObj=BeautifulSoup(html)#主對(duì)比表格是當(dāng)前頁(yè)面上的第一個(gè)表格table=bsObj.findAll(table,{class:wikitable})[0]rows=table.findAll(tr)csvFile=open(../files/editors.csv,'wt',newline=,encoding='utf-8')writer=csv.writer(csvFile)try:forrowinrows:csvRow=[]forcellinrow.findAll(['td','th']):csvRow.append(cell.get_text())writer.writerow(csvRow)finally:csvFile.close()1HTML正文抽取2MySQL數(shù)據(jù)庫(kù)3更適合網(wǎng)絡(luò)數(shù)據(jù)采集的MongoDB目錄4.2MySQL數(shù)據(jù)庫(kù)由于MySQL的安裝文件比較大且配置稍顯煩瑣,本書(shū)推薦在普通環(huán)境下使用集成包,比如USBWebserver。Python沒(méi)有內(nèi)置的MySQL支持工具。不過(guò),有很多開(kāi)源的庫(kù)可以用來(lái)與MySQL交互,比如Python2.x和Python3.x版本都支持,其中最有名的一個(gè)庫(kù)就是PyMySQL(/PyMySQL/PyMySQL)。目前,PyMySQL的版本是0.6.2,可以用下面的命令下載并安裝。#curl-L/PyMySQL/PyMySQL/tarball/pyMySQL-0.6.2|tarxz#cdPyMySQL-PyMySQL-f953785/#pythonsetup.pyinstall在數(shù)據(jù)采集中使用MySQL在Python中使用MySQL有兩種方式,分別為ORM(對(duì)象關(guān)系映射)框架和數(shù)據(jù)庫(kù)模塊,在此使用數(shù)據(jù)庫(kù)模塊pyMySQL(Python3)。安裝pyMySQL的代碼如下。pipinstallpyMySQL直接使用print將數(shù)據(jù)打印了出來(lái)。現(xiàn)在使用pyMySQL將數(shù)據(jù)存儲(chǔ)到MySQL中。此時(shí)需創(chuàng)建數(shù)據(jù)庫(kù)toutiao和數(shù)據(jù)表data。修改的代碼如下。修改的代碼importrequestsimportjsonimportpyMySQLconn=pyMySQL.connect(host='localhost',port=3307,user='root',password='usbw',db='toutiao',charset='utf8')cursor=conn.cursor()url='/api/pc/focus/'wbdata=requests.get(url).textdata=json.loads(wbdata)news=data['data']['pc_feed_focus']forninnews:title=n['title']img_url=n['image_url']url=n['media_url']print(url,title,img_url)cursor.execute(INSERTINTOdata(title,img_url,url)VALUES('{0}','{1}','{2}');.format(title,img_url,url))mit()cursor.close()conn.close()1HTML正文抽取2MySQL數(shù)據(jù)庫(kù)3更適合網(wǎng)絡(luò)數(shù)據(jù)采集的MongoDB目錄4.3更適合網(wǎng)絡(luò)數(shù)據(jù)采集的MongoDBMongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù),由C++語(yǔ)言編寫(xiě),旨在為Web應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。MongoDB是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是目前非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富、最像關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)。3.運(yùn)行pymongo命令該命令的使用格式如下。pipinstallpymongo要想檢測(cè)安裝是否成功,可以使用如下命令在本地啟動(dòng)MongoDB。#mongd-dbpathl然后,在Python中,使用MongoDB的默認(rèn)端口嘗試連接MongoDB,示例如下。>frompymongoimportMongoClient>client=MongoClient('localhost',27017)Python操作MongoDB依然是擴(kuò)展采集今日頭條的例子,Python操作MongoDB的代碼示例如下importrequestsimportjsonimportpymongoconn=pymongo.MongoClient(host='localhost',port=27017)toutiao=conn['toutiao']newsdata=toutiao['news']url='/api/pc/focus/'wbdata=requests.get(url).textdata=json.loads(wbdata)news=data['data']['pc_feed_focus']forninnews:title=n['title']img_url=n['image_url']url=n['media_url']data={'title':title,'img_url':img_url,'-id':url}newsdata.insert_one(data)foriinnewsdata.find():print(i)本章小結(jié)本章介紹3種通過(guò)網(wǎng)絡(luò)數(shù)據(jù)采集所得到數(shù)據(jù)進(jìn)行存儲(chǔ)的方式,在不同的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年榆林市第五幼兒園招聘考試備考試題及答案解析
- 建筑安全培訓(xùn)課件案例
- 2026年1月宜賓三江匯智人力資源服務(wù)有限公司招聘外派項(xiàng)目制工作人員1人考試備考試題及答案解析
- 2026年濟(jì)寧魚(yú)臺(tái)縣事業(yè)單位公開(kāi)招聘初級(jí)綜合類崗位人員考試參考題庫(kù)及答案解析
- 2026年湖南湘潭市公安局招聘30名留置看護(hù)巡邏警務(wù)輔助人員筆試備考題庫(kù)及答案解析
- 2026年普洱市孟連縣人民檢察院書(shū)記員招聘(1人)考試備考試題及答案解析
- 2026年蕪湖市勞動(dòng)保障人力資源有限公司人才儲(chǔ)備考試備考題庫(kù)及答案解析
- 2026年臨沂羅莊區(qū)部分事業(yè)單位公開(kāi)招聘綜合類崗位工作人員17人筆試參考題庫(kù)及答案解析
- 2026河南商丘新城建設(shè)投資集團(tuán)有限公司悅榕酒店公司招聘總經(jīng)理1人考試備考試題及答案解析
- 護(hù)理職業(yè)道德教育
- 實(shí)驗(yàn)室質(zhì)量控制操作規(guī)程計(jì)劃
- 骨科手術(shù)術(shù)前宣教
- 電梯安全培訓(xùn)課件下載
- 事業(yè)單位職工勞動(dòng)合同管理規(guī)范
- 老年人靜脈輸液技巧
- 呼吸內(nèi)科一科一品護(hù)理匯報(bào)
- 2025年公安機(jī)關(guān)人民警察基本級(jí)執(zhí)法資格考試試卷及答案
- 網(wǎng)戀詐騙課件
- 2025版壓力性損傷預(yù)防和治療的新指南解讀
- 2025年新疆第師圖木舒克市公安局招聘警務(wù)輔助人員公共基礎(chǔ)知識(shí)+寫(xiě)作綜合練習(xí)題及答案
- 醫(yī)院患者護(hù)理隱患預(yù)警及上報(bào)制度
評(píng)論
0/150
提交評(píng)論