Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 不卡一区二区在线观看,精品一区二区三区免费观看,亚洲国产精品成人综合久久久

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          「Python數(shù)據(jù)分析系列」9.獲取數(shù)據(jù)

          數(shù)據(jù)與智能 本公眾號(hào)關(guān)注大數(shù)據(jù)與人工智能技術(shù)。由一批具備多年實(shí)戰(zhàn)經(jīng)驗(yàn)的技術(shù)極客參與運(yùn)營(yíng)管理,持續(xù)輸出大數(shù)據(jù)、數(shù)據(jù)分析、推薦系統(tǒng)、機(jī)器學(xué)習(xí)、人工智能等方向的原創(chuàng)文章,每周至少輸出7篇精品原創(chuàng)。同時(shí),我們會(huì)關(guān)注和分享大數(shù)據(jù)與人工智能行業(yè)動(dòng)態(tài)。歡迎關(guān)注。

          來(lái)源 | Data Science from Scratch, Second Edition

          作者 | Joel Grus

          譯者 | cloverErna

          校對(duì) | gongyouliu

          編輯 | auroral-L


          全文共6018字,預(yù)計(jì)閱讀時(shí)間40分鐘。


          第九章 獲取數(shù)據(jù)

          9.1 stdin 和 stdout

          9.2 讀取文件

          9.2.1 文本文件基礎(chǔ)

          9.2.2 分割的(delimited)文件

          9.3 網(wǎng)絡(luò)抓取

          9.3.1 HTML和解析方法

          9.3.2 例:密切關(guān)注國(guó)會(huì)

          9.4 使用API

          9.4.1 JSON(和XML)

          9.4.2 使用無(wú)驗(yàn)證的API

          9.4.3 尋找API

          9.5 案例:使用 Twitter API

          9.6 延伸學(xué)習(xí)



          寫作本書我用了三個(gè)月的時(shí)間;構(gòu)思只用了三分鐘;而收集書中的數(shù)據(jù),則用了我的一生。

          ——F. 斯科特 · 菲茲杰拉德



          為了成為一名數(shù)據(jù)科學(xué)家,你需要數(shù)據(jù)。事實(shí)上,作為數(shù)據(jù)科學(xué)家,你會(huì)花很大一部分時(shí)間來(lái)獲取、清理和轉(zhuǎn)換數(shù)據(jù)。必要時(shí),你總可以自己輸入數(shù)據(jù)(或者可以讓你的助手來(lái)做),但通常這樣做比較浪費(fèi)時(shí)間。本章我們來(lái)看看利用 Python 獲取數(shù)據(jù)并得到正確格式的不同方法。



          9.1 stdin和stdout


          如果在命令行運(yùn)行 Python 腳本,你可以用 sys.stdin 和 sys.stdout 以管道(pipe)方式傳遞數(shù)據(jù)。例如,以下腳本按行讀入文本,然后輸出與一個(gè)正則表達(dá)式匹配的行:




          然后對(duì)收到的行計(jì)數(shù)并輸出計(jì)數(shù)結(jié)果:



          你可以用這種方法來(lái)計(jì)數(shù)文件中有多少行包含數(shù)字。在 Windows 中,你可以用:



          而在 Unix 系統(tǒng)中,你可以用:


          “|”運(yùn)算符是個(gè)管道字符,它的意思是“使用左邊命令的輸出作為右邊命令的輸入”。可以使用這種方法精心設(shè)計(jì)數(shù)據(jù)處理的管道。



          注意

          如果你使用的是 Windows,你可以在這行命令中去掉所包含的 python 部分:

          如果你在Unix系統(tǒng)上,那么這樣做需要更多的步驟。首先添加一個(gè)“Shebang”作為腳本#!/usr/bin/env python的第一行。然后,在命令行中,使用chmod x egrep.py使文件可執(zhí)行。



          類似地,下面的這個(gè)腳本計(jì)算了單詞的數(shù)量并給出了最常用的單詞:



          之后你可以做這樣的事情:



          (如果你正在使用Windows,那么使用type而不是cat。)



          注意

          如果你是個(gè) Unix 編程老手,你可能會(huì)很熟悉系統(tǒng)里許多內(nèi)置的命令行工具 (比如 egrep),但你自己從零開(kāi)始創(chuàng)建這些工具或許更好一些。畢竟,用到的時(shí)候剛好知道,總是好的。



          9.2 讀取文件


          可以顯式地用代碼來(lái)讀寫文件。用 Python 處理文件非常簡(jiǎn)便。


          9.2.1 文本文件基礎(chǔ)


          處理文本文件的第一步是通過(guò) open 命令來(lái)獲取一個(gè)文件對(duì)象:




          因?yàn)榉浅H菀淄涥P(guān)閉文件,所以你應(yīng)該在 with 程序塊里操作文件,這樣在結(jié)尾處文件會(huì)被自動(dòng)關(guān)閉:



          如果需要讀取一個(gè)完整的文本文件,可以使用 for 語(yǔ)句對(duì)文件的行進(jìn)行迭代:



          按這種方法得到的每一行會(huì)用換行符來(lái)結(jié)尾,所以在對(duì)讀入的行操作之前會(huì)經(jīng)常需要用strip() 來(lái)進(jìn)行處理。


          例如,假設(shè)你有一個(gè)寫滿電子郵件地址的文件,每個(gè)地址一行,你想利用這個(gè)文件生成域名的直方圖。正確地提取域名的規(guī)則有些微妙--如公共后綴列表,但一個(gè)好的近似方案是只取出電子郵件地址中 @ 后面的部分。(對(duì)于像 joel@mail.

          datasciencester.com 這樣的郵件地址,會(huì)給出錯(cuò)誤的答案,但為了本例,我們?cè)敢饨邮埽?/span>



          9.2.2 分割的(delimited)文件


          我們剛剛處理的假想電子郵件地址文件每行只有一個(gè)地址。更常見(jiàn)的情況是你會(huì)處理每一行包含許多數(shù)據(jù)的文件。這種文件通常是用逗號(hào)分割或tab分割的:每一行有許多字段,用逗號(hào)或tab來(lái)表示一個(gè)字段的結(jié)束和另一個(gè)字段的開(kāi)始。


          這開(kāi)始變得復(fù)雜了,各字段中帶有逗號(hào)、tab 和換行符(這是你不可避免地要處理的)。因?yàn)檫@個(gè)原因,幾乎總是會(huì)犯的一個(gè)錯(cuò)誤是你自己嘗試去解析它們。相反,你應(yīng)該使用Python的csv模塊(或者pandas庫(kù),或其他一些設(shè)計(jì)用來(lái)讀取逗號(hào)分隔或制表符分隔的文件的庫(kù))。



          警告

          不要自己解析逗號(hào)分隔的文件。 你會(huì)把一些特殊情況搞砸的!



          如果文件沒(méi)有頭部(意味著你可能想把每一行作為一個(gè)列表,這帶來(lái)的麻煩是你需要知道每一列是什么),你可以使用 csv.reader 對(duì)行進(jìn)行迭代,每一行都會(huì)被處理成恰當(dāng)劃分的列表。


          例如,如果有這樣一個(gè)用 tab 劃分的股票價(jià)格文件:




          我們可以用下面的程序塊來(lái)處理:



          如果文件存在頭部:



          你既可以利用對(duì) read.next() 的初始調(diào)用跳過(guò)頭部的行,也可以利用 csv.DictReader 把每一行讀成字典(把頭部作為關(guān)鍵字):




          即使你的文件缺少頭部,你仍可以通過(guò)把關(guān)鍵字作為文件名參數(shù)傳輸來(lái)使用 DictReader。


          同樣,你可以用 csv.writer 來(lái)寫限制的文件:



          如果行中的各字段本身包含逗號(hào),csv.writer 可以正確處理。但你自己手動(dòng)寫成的則很可能不會(huì)正確處理。比如,如果你嘗試這樣做:



          你最終會(huì)得到像下面這樣一個(gè)csv文件,它看起來(lái)像這樣:



          沒(méi)人能看懂它的意思。



          9.3 網(wǎng)絡(luò)抓取


          另一種獲取數(shù)據(jù)的方法是從網(wǎng)頁(yè)抓取數(shù)據(jù)。事實(shí)證明,獲取網(wǎng)頁(yè)很容易;但從網(wǎng)頁(yè)上抓取有意義的結(jié)構(gòu)化信息就不那么容易了。


          9.3.1 HTML和解析方法


          網(wǎng)絡(luò)上的頁(yè)面是由 HTML 寫成的,其中文本被(理想化地)標(biāo)記為元素和它們的屬性:



          在理想的情況下,所有的網(wǎng)頁(yè)按語(yǔ)義標(biāo)記,這對(duì)我們很方便,我們可以使用類似這樣的規(guī)則來(lái)提取數(shù)據(jù):找到 id 是 subject 的 <p> 元素并返回它所包含的文本。但在真實(shí)的世界中,HTML 并不總是具有很好的格式的,更不用說(shuō)注解了。這意味著如果我們想搞清其含義,需要一些幫助。


          為 了 從 HTML 里 得 到 數(shù) 據(jù), 我 們 需 要 使 用 BeatifulSoup 庫(kù),它對(duì)來(lái)自網(wǎng)頁(yè)的多種元素建立了樹(shù)結(jié)構(gòu),并提供了簡(jiǎn)單的接口來(lái)獲取它們。本書寫作時(shí),最新的版本是 Beatiful Soup 4.6.0,我們即將用到的就是這個(gè)版本。我們也會(huì)用到 requests 庫(kù),它與內(nèi)置在 Python 中的其他方法相比,是一種發(fā)起HTTP 請(qǐng)求的更好的方式。


          Python 內(nèi)置的 HTML 解析器是有點(diǎn)嚴(yán)格的,這意味著它并不總是能處理那些沒(méi)有很好地格式化的 HTML。因此,我們需要使用另外一種解析器,它需要先安裝:


          確保你處于正確的虛擬環(huán)境中,安裝庫(kù):


          為了使用 Beatiful Soup,我們要把一些 HTML 傳遞給 BeautifulSoup() 函數(shù)。在我們的例子中,這些 HTML 是對(duì) requests.get 進(jìn)行調(diào)用的結(jié)果:




          完成這個(gè)步驟之后,我們可以用一些簡(jiǎn)單的方法得到完美的解析。


          通常我們會(huì)處理一些 Tag 對(duì)象,它們對(duì)應(yīng)于 HTML 頁(yè)面結(jié)構(gòu)的標(biāo)簽表示。



          比如,找到你能用的第一個(gè) <p> 標(biāo)簽(及其內(nèi)容):



          可以對(duì) Tag 使用它的 text 屬性來(lái)得到文本內(nèi)容:


          另外可以把標(biāo)簽當(dāng)作字典來(lái)提取其屬性:


          可以一次得到多個(gè)標(biāo)簽:


          通常你會(huì)想通過(guò)一個(gè)類(class)來(lái)找到標(biāo)簽:




          此外,可以把這些方法組合起來(lái)運(yùn)用更復(fù)雜的邏輯。比如,如果想找出包含在一個(gè) <div>元素中的每一個(gè) <span> 元素,可以這么做:



          僅僅上述幾個(gè)特性就可以幫助我們做很多事。如果你需要做更復(fù)雜的事情(或僅僅是出于好奇),那就去查看文檔吧。


          當(dāng)然,無(wú)論多重要的數(shù)據(jù),通常也不會(huì)標(biāo)記成。你需要仔細(xì)檢查源HTML,通過(guò)你選擇的邏輯進(jìn)行推理,并多考慮邊界情況來(lái)確保數(shù)據(jù)的正確性。接下來(lái)我們看一個(gè)例子。


          9.3.2 例:密切關(guān)注國(guó)會(huì)


          數(shù)據(jù)科學(xué)公司的政策副總裁擔(dān)心對(duì)數(shù)據(jù)科學(xué)行業(yè)的潛在監(jiān)管,并要求你量化國(guó)會(huì)對(duì)這個(gè)話題的看法。他特別希望你能找到所有有發(fā)布“數(shù)據(jù)”新聞稿的代表。


          在發(fā)布時(shí),有一個(gè)頁(yè)面有所有代表網(wǎng)站的鏈接



          如果你“查看來(lái)源”,所有網(wǎng)站的鏈接看起來(lái)都像:



          讓我們從收集從該頁(yè)面鏈接到的所有URL開(kāi)始:



          這將返回太多的URL。如果你看它們,我們從http://或者h(yuǎn)ttps://開(kāi)始,中間是某種名字,并以 .house.gov 或者 .house.gov/. 結(jié)束。


          這是一個(gè)使用正則表達(dá)式的好地方:




          這仍然太多,因?yàn)橹挥?35名代表。如果你看一下清單,有很多重復(fù)。我們可以用set來(lái)克服這些問(wèn)題:


          總是有幾個(gè)眾議院的座位空著,或者可能有一些沒(méi)有網(wǎng)站的代表。無(wú)論如何,這已經(jīng)足夠好了。當(dāng)我們查看這些網(wǎng)站時(shí),大多數(shù)網(wǎng)站都有新聞稿的鏈接。例如:



          請(qǐng)注意,這是一個(gè)相對(duì)鏈接,這意味著我們需要記住原始站點(diǎn)。讓我們來(lái)抓取一下:




          注意

          通常情況下,像這樣隨意地爬一個(gè)網(wǎng)站是不禮貌的。 大多數(shù)網(wǎng)站都會(huì)有一個(gè)robots.txt文件,該文件表明你可以頻繁地抓取站點(diǎn)(以及你不應(yīng)該抓取哪些路徑),但由于這是國(guó)會(huì),我們不需要特別禮貌。



          如果你通過(guò)滾動(dòng)來(lái)查看它們,你將會(huì)看到大量/媒體/新聞稿和媒體中心/新聞稿,以及各種其他地址。其中一個(gè)URL是https://jayapal.house.gov/media/press-releases.


          記住,我們的目標(biāo)是找出哪些國(guó)會(huì)議員提到“數(shù)據(jù)”。“我們會(huì)寫一個(gè)稍微更通用的功能,檢查一頁(yè)新聞稿中是否提到任何給定的術(shù)語(yǔ)。


          如果你訪問(wèn)該網(wǎng)站并查看源代碼,似乎在<p>標(biāo)簽中有來(lái)自每個(gè)新聞稿的片段,因此我們將使用它作為我們的第一次嘗試:




          讓我們?yōu)樗鼘懸粋€(gè)快速測(cè)試:



          最后我們準(zhǔn)備找到相關(guān)國(guó)會(huì)議員,并告知他們的姓名給政策副總裁:



          當(dāng)我運(yùn)行這個(gè)時(shí),我得到了大約20名代表的名單。你的結(jié)果可能會(huì)不同。



          注意

          如果你查看不同的“新聞稿”頁(yè)面,它們中的大多數(shù)都是分頁(yè)的,每頁(yè)只有5或10個(gè)新聞稿。 這意味著我們只檢索了每位國(guó)會(huì)議員最近的幾份新聞稿。 一個(gè)更徹底的解決方案將在頁(yè)面上迭代并檢索每個(gè)新聞稿的全文。




          9.4 使用API


          許多網(wǎng)站和網(wǎng)絡(luò)服務(wù)提供相應(yīng)的應(yīng)用程序接口(Application Programming Interface,APIS),允許你明確地請(qǐng)求結(jié)構(gòu)化格式的數(shù)據(jù)。這省去了你不得不抓取數(shù)據(jù)的麻煩!


          9.4.1 JSON(和XML)


          因?yàn)?HTTP 是一種轉(zhuǎn)換文本的協(xié)議,你通過(guò)網(wǎng)絡(luò) API 請(qǐng)求的數(shù)據(jù)需要序列化(serialized)地 轉(zhuǎn) 換 為 字 符 串 格 式。通 常 這 種 串 行 化 使 用JavaScript 對(duì) 象 符 號(hào)(JavaScript Object Notation,JSON)。JavaScript 對(duì)象看起來(lái)和 Python 的字典很像,使得字符串表達(dá)非常容易解釋:



          我們可以使用 Python 的 json 模塊來(lái)解析 JSON。尤其是,我們會(huì)用到它的 loads 函數(shù),這個(gè)函數(shù)可以把一個(gè)代表JSON對(duì)象的字符串反序列化(deserialize)為 Python 對(duì)象:



          有時(shí)候 API 的提供者可能會(huì)不那么友好,只給你提供 XML 格式的響應(yīng):



          我們也可以仿照從 HTML 獲取數(shù)據(jù)的方式,用 BeautifulSoup 從 XML 中獲取數(shù)據(jù);更多細(xì)節(jié)可查閱文檔。


          9.4.2 使用無(wú)驗(yàn)證的API


          現(xiàn)在大多數(shù)的 API 要求你在使用之前先驗(yàn)證身份。而若我們不愿勉強(qiáng)自己屈就這種政策,API 會(huì)給出許多其他的陳詞濫調(diào)來(lái)阻止我們的瀏覽。因此,先來(lái)看一下 GitHub 的API,利用它我們可以做一些簡(jiǎn)單的無(wú)需驗(yàn)證的事情:



          此處 repos 是一個(gè) Python 字典的列表,其中每一個(gè)字典表示我的 GitHub 賬戶的一個(gè)代碼倉(cāng)庫(kù)。(可以隨意替換成你的用戶名,以獲取你的代碼倉(cāng)庫(kù)的數(shù)據(jù)。你有 GitHub 賬號(hào),對(duì)吧?)


          我們可以使用它來(lái)找出一周中最有可能創(chuàng)建哪些月份和天數(shù)的存儲(chǔ)庫(kù)。唯一的問(wèn)題是,響應(yīng)中的日期是字符串:



          Python 本身沒(méi)有很強(qiáng)大的日期解析器,所以我們需要安裝一個(gè):



          其中你需要的可能只是 dateutil.parser.parse 函數(shù):




          類似地,你可以獲取我最后五個(gè)代碼倉(cāng)庫(kù)所用的語(yǔ)言:



          通常我們無(wú)需在“做出請(qǐng)求而且自己解析響應(yīng)”這種低層次上使用 API。使用 Python 的好處之一是已經(jīng)有人建好了庫(kù),方便你訪問(wèn)你感興趣的幾乎所有 API。這些庫(kù)可以把事情做好,為你省下查找 API 訪問(wèn)的諸多冗長(zhǎng)細(xì)節(jié)的麻煩。(如果這些庫(kù)不能很好地完成任務(wù),或者它們依賴的是對(duì)應(yīng)的 API 已失效的版本,那就會(huì)給你帶來(lái)巨大的麻煩。)


          盡管如此,偶爾你還是需要操作你自己的 API 訪問(wèn)庫(kù)(或者,更常見(jiàn)的,去調(diào)試別人不能順利操作的庫(kù)),所以了解一些細(xì)節(jié)是很有好處的。


          9.4.3 尋找API


          如果你需要一個(gè)特定網(wǎng)站的數(shù)據(jù),可以查看它的開(kāi)發(fā)者部分或 API 部分的細(xì)節(jié),然后以關(guān)鍵詞“python <站點(diǎn)名> api”在網(wǎng)絡(luò)上搜索相應(yīng)的庫(kù)。


          有Yelp API、Instagram API、Spotify API等庫(kù)。


          如果你想查看有 Python 封裝的 API 列表,那么在GitHub上有一個(gè)來(lái)自Real Python的不錯(cuò)的API列表(https://github.com/realpython/list-of-python-api-wrappers)。


          如果最終還是找不到你需要的 API,還是可以通過(guò)抓取獲得的。這是數(shù)據(jù)科學(xué)家最后的絕招。



          9.5 案例:使用Twitter API


          Twitter 是一個(gè)非常好的數(shù)據(jù)源。你可以從它得到實(shí)時(shí)的新聞,可以用它來(lái)判斷對(duì)當(dāng)前事件的反應(yīng),可以利用它找到與特定主題有關(guān)的鏈接。使用 Twitter 可以做幾乎任何你能想到的事,只要你能獲得它的數(shù)據(jù)。可以通過(guò)它的 API 來(lái)獲得數(shù)據(jù)。


          為了和 Twitter API 互動(dòng),我們需要使用 Twython 庫(kù)(python -m pip install twython)。實(shí)際上有很多 Python Twitter 的庫(kù),但這一個(gè)是我用過(guò)的庫(kù)中最好用的一個(gè)。你也可以嘗試一下其他的庫(kù)。



          獲取憑據(jù)


          為了使用 Twitter 的 API,需要先獲取一些證明文件(為此你無(wú)論如何都要有一個(gè) Twitter的賬戶,這樣你就能成為一個(gè)活躍友好的 Twitter #datascience 社區(qū)的一部分)。



          注意

          就像那些所有我不能控制的網(wǎng)站的指令一樣,它們會(huì)在某個(gè)時(shí)刻過(guò)時(shí),但是現(xiàn)在還是能發(fā)揮一段時(shí)間的作用的。(盡管在我寫作本書的這段時(shí)間里,它們至少已經(jīng)變更過(guò)一次了,所以祝你好運(yùn)!)



          以下是步驟:


          1. 找到鏈接 https://apps.twitter.com/。

          2. 如果你還沒(méi)有注冊(cè),點(diǎn)擊“注冊(cè)”,并輸入你的 Twitter 用戶名和密碼。

          3.單擊Apply申請(qǐng)開(kāi)發(fā)人員帳戶。

          4.請(qǐng)求訪問(wèn)以供你自己使用。

          5.填寫申請(qǐng)書。它需要填寫300字(真的)說(shuō)明清楚你為什么需要訪問(wèn)數(shù)據(jù),所以為了通過(guò)審核,你可以告訴他們這本書以及你有多喜歡它。

          6.等一段不確定的時(shí)間。

          7.如果你認(rèn)識(shí)在Twitter上工作的人,給他們發(fā)郵件,問(wèn)他們是否可以加快你的申請(qǐng)。否則,請(qǐng)繼續(xù)等待。

          8.獲得批準(zhǔn)后,請(qǐng)返回到developer.twitter.com,找到“應(yīng)用程序”部分,然后單擊“創(chuàng)建應(yīng)用程序。”

          9.填寫所有必需的字段(同樣,如果描述需要額外的字符,你可以討論這本書以及如何找到它)。

          10.單擊“創(chuàng)建”。


          現(xiàn)在你的應(yīng)用程序應(yīng)該有一個(gè)“鍵和令牌”選項(xiàng)卡,其中包含“消費(fèi)者API公鑰”部分,其中列出了“API公鑰”和“API密鑰”。“注意這些鍵;你需要它們。(而且,對(duì)他們保密!它們就像是密碼一樣。)



          小心

          不要分享它們,不要把它們印在書里,也不要把它們記錄在 GitHub 公共代碼庫(kù)里。一種簡(jiǎn)單的方法是把它們存儲(chǔ)在不會(huì)被簽入(checked in)的 credentials.json文件里,而且可以使用 json.loads 取回它們。另一個(gè)解決方案是將它們存儲(chǔ)在環(huán)境變量中,并使用os.environ檢索它們。



          使用Twython


          使用Twitter API最棘手的部分是認(rèn)證。(事實(shí)上,這是使用大量API最棘手的部分。) API提供者希望確保你被授權(quán)訪問(wèn)他們的數(shù)據(jù),并且你不會(huì)超過(guò)他們的使用限制。他們還想知道誰(shuí)在訪問(wèn)他們的數(shù)據(jù)。


          身份驗(yàn)證有點(diǎn)令人痛苦。有一個(gè)簡(jiǎn)單的方法,OAuth 2,當(dāng)你只想做簡(jiǎn)單的搜索時(shí)就足夠了。還有一種復(fù)雜的方式,OAuth 1,當(dāng)你想要執(zhí)行操作(例如推特)或(特別是對(duì)我們)連接到推特流時(shí),這是必需的。


          所以我們堅(jiān)持了更復(fù)雜的方式,我們將盡可能多地實(shí)現(xiàn)自動(dòng)化。


          首先,你需要API公鑰和API密鑰(有時(shí)分別稱為消費(fèi)公鑰和消費(fèi)密鑰)。我可以從環(huán)境變量中獲得,如果你愿意的話,你可以隨時(shí)替換它們:



          現(xiàn)在我們可以實(shí)例化客戶端:




          提示

          在這一點(diǎn)上,你可能想考慮把ACCESS_TOKEN和ACCESS_TOKEN_SECRET保存在安全的地方,這樣下一次你就不用經(jīng)歷這嚴(yán)格的過(guò)程了。



          一旦我們有了一個(gè)經(jīng)過(guò)驗(yàn)證的Twython實(shí)例,我們就可以開(kāi)始執(zhí)行搜索:



          如果你運(yùn)行上面這個(gè),你應(yīng)該得到一些推文,比如:




          這并不那么有趣,主要是因?yàn)門witter搜索API只是向你顯示了一些最近的結(jié)果。當(dāng)你在做數(shù)據(jù)科學(xué)時(shí),你經(jīng)常想要很多推文。這就是流媒體API有用的地方。它允許你連接到一個(gè)偉大的Twitter“消防水管”。若要使用它,你需要使用訪問(wèn)令牌進(jìn)行身份驗(yàn)證。


          為了使用Twython訪問(wèn)流API,我們需要定義一個(gè)從TwythonStreamer繼承并覆蓋它的on_success方法,也可能是它的on_error方法:





          MyStreamer 會(huì)連接到 Twitter 流并等待 Twitter 給它發(fā)送數(shù)據(jù)。它每收到一些數(shù)據(jù)(在這里,一條推文表示為一個(gè) Python 對(duì)象)就傳遞給 on_success 方法,如果推文是英文的,這個(gè)方法會(huì)把推文附加到 tweets 列表中,在收集到 1000 條推文后會(huì)斷開(kāi)和流的連接。


          剩下的工作就是初始化和啟動(dòng)運(yùn)行了:




          它會(huì)一直運(yùn)行下去直到收集 1000條推文為止(或直到遇到一個(gè)錯(cuò)誤為止),此時(shí)就可以著手分析這些推文了。比如,你可以用下面的方法尋找最常見(jiàn)的標(biāo)簽:




          每條推文都包含許多數(shù)據(jù)。你可以自己嘗試一下各種方法,或仔細(xì)查閱 Twitter API 的文檔。



          注意

          在一個(gè)正式的項(xiàng)目中,你可能并不想依賴內(nèi)存中的列表來(lái)存儲(chǔ)推文。相反,你可能想把推文保存在文件或者數(shù)據(jù)庫(kù)中,這樣就可以永久地?fù)碛兴鼈儭?/span>



          9.6 延伸學(xué)習(xí)


          ? pandas是數(shù)據(jù)科學(xué)用來(lái)處理(特別是導(dǎo)入)數(shù)據(jù)的一個(gè)主要的庫(kù)。

          ? Scrapy是一個(gè)功能很健全的庫(kù),可用來(lái)構(gòu)建更復(fù)雜的網(wǎng)絡(luò)抓取器,來(lái)執(zhí)行類似跟蹤未知鏈接等任務(wù)。

          ? Kaggle擁有大量數(shù)據(jù)集。

          用BeautifulSoup庫(kù)解析 HTML 或 XML 數(shù)據(jù)可以按照以下步驟進(jìn)行:

          首先,確保你已經(jīng)安裝了BeautifulSoup庫(kù)。可以使用pip命令進(jìn)行安裝:pip install beautifulsoup4。

          導(dǎo)入BeautifulSoup庫(kù)和相關(guān)的解析庫(kù),通常是html.parser或其他適合的解析器。

          使用BeautifulSoup的parse方法將 HTML 或 XML 數(shù)據(jù)解析為一個(gè)BeautifulSoup對(duì)象。

          通過(guò)find或find_all等方法在BeautifulSoup對(duì)象中查找特定的標(biāo)簽或?qū)傩浴?/p>

          對(duì)找到的元素進(jìn)行進(jìn)一步的操作,例如提取文本、獲取屬性值等。

          下面是一個(gè)簡(jiǎn)單的示例,演示如何使用BeautifulSoup解析 HTML 數(shù)據(jù):

          收起

          python

          from bs4 import BeautifulSoup

          html_data = '''

          The Dormouse's story

          Once upon a time there were three little sisters; and their names were

          Elsie,

          Lacie and

          Tillie;

          and they lived at the bottom of a well.

          '''

          # 解析 HTML 數(shù)據(jù)

          soup = BeautifulSoup(html_data, 'html.parser')

          # 查找所有包含"sister"類的鏈接

          sister_links = soup.find_all('a', class_='sister')

          # 打印鏈接的文本和鏈接地址

          for link in sister_links:

          print(link.text, link.get('href'))

          在上述示例中,首先定義了一段 HTML 數(shù)據(jù)。然后,使用BeautifulSoup的parse方法將 HTML 數(shù)據(jù)解析為一個(gè)soup對(duì)象。接下來(lái),使用find_all方法查找所有具有sister類的鏈接,并將它們存儲(chǔ)在sister_links列表中。最后,通過(guò)遍歷sister_links列表,打印每個(gè)鏈接的文本和鏈接地址。

          TML:完成頁(yè)面的內(nèi)容展示

          CSS:完成頁(yè)面樣式的控制,美化頁(yè)面,完成頁(yè)面的布局。

          表單:用于采集用戶輸入的數(shù)據(jù)。用于和服務(wù)器進(jìn)行交互。

          form:用于定義表單的。可以定義一個(gè)范圍(代表用戶采集數(shù)據(jù)的范圍)

          屬性:action:指定提交數(shù)據(jù)的url(指的就是把數(shù)據(jù)提交到哪里)

          method:指定提交方式

          分類:一共有7種,2種比較常用。

          get:1.請(qǐng)求參數(shù)會(huì)在地址欄顯示

          2.請(qǐng)求參數(shù)的長(zhǎng)度是有限制的。

          3.請(qǐng)求不安全

          post:1.請(qǐng)求參數(shù)不會(huì)在地址欄顯示,會(huì)封裝在請(qǐng)求體中。

          2.請(qǐng)求參數(shù)的長(zhǎng)度沒(méi)有限制

          3.較為安全

          表單里面的數(shù)據(jù)要想被提交,必須指定它的name屬性



          主站蜘蛛池模板: 亚洲一区无码精品色| 国产一区二区在线视频| 精品无码国产一区二区三区AV| 自慰无码一区二区三区| 99国产精品欧美一区二区三区| 中文人妻av高清一区二区| 国产亚洲福利精品一区二区| 精品欧洲av无码一区二区 | 波多野结衣一区二区免费视频 | 亚洲一本一道一区二区三区| 亚洲人成人一区二区三区| 538国产精品一区二区在线| 波多野结衣一区二区免费视频| 一区二区免费视频| 久久国产精品视频一区| 国模无码人体一区二区| 精品免费久久久久国产一区| 一区二区免费电影| 国产主播一区二区三区| 丰满爆乳无码一区二区三区| 亚洲一区二区三区成人网站| 国产亚洲无线码一区二区| 精品一区二区三区四区在线| 人妻无码一区二区视频| 视频在线一区二区三区| 中文字幕无码免费久久9一区9| 久久久久人妻精品一区三寸蜜桃 | 亚洲国产成人精品久久久国产成人一区二区三区综 | 91久久精品无码一区二区毛片| 日本一区二区不卡在线| 人妻久久久一区二区三区| 性色AV一区二区三区| 久久人做人爽一区二区三区| 伊人久久精品一区二区三区| 无码国产精品一区二区高潮| 无码精品人妻一区| 久久99热狠狠色精品一区| 麻豆一区二区三区精品视频| 成人精品一区二区三区校园激情 | 人妻体内射精一区二区三区| 在线精品国产一区二区|