狠狠操夜夜甜|人妻在线中文字幕亚洲无码不卡av|一区二区欧美亚洲|日躁夜躁狠狠躁2001|亚洲,超碰,欧美|18AV成人电影|午夜成人免费在线|婷婷激情网深爱五月|色欲综合成人在线|在线美女搞黄大片

中企動力 > 頭條 > python獲取參數(shù)

網(wǎng)站性能檢測評分

注:本網(wǎng)站頁面html檢測工具掃描網(wǎng)站中存在的基本問題,僅供參考。

python獲取參數(shù)

Python爬蟲入門并不難,甚至進階也很簡單 企業(yè)視頻課程

img

仇雨文

關注

互聯(lián)網(wǎng)的數(shù)據(jù)爆炸式的增長,而利用 Python 爬蟲我們可以獲取大量有價值的數(shù)據(jù):

1.爬取數(shù)據(jù),進行市場調(diào)研和商業(yè)分析

爬取知乎優(yōu)質(zhì)答案,篩選各話題下最優(yōu)質(zhì)的內(nèi)容; 抓取房產(chǎn)網(wǎng)站買賣信息,分析房價變化趨勢、做不同區(qū)域的房價分析;爬取招聘網(wǎng)站職位信息,分析各行業(yè)人才需求情況及薪資水平。

2.作為機器學習、數(shù)據(jù)挖掘的原始數(shù)據(jù)

比如你要做一個推薦系統(tǒng),那么你可以去爬取更多維度的數(shù)據(jù),做出更好的模型。

3.爬取優(yōu)質(zhì)的資源:圖片、文本、視頻

爬取商品(店鋪)評論以及各種圖片網(wǎng)站,獲得圖片資源以及評論文本數(shù)據(jù)。

掌握正確的方法,在短時間內(nèi)做到能夠爬取主流網(wǎng)站的數(shù)據(jù),其實非常容易實現(xiàn)。

但建議你從一開始就要有一個具體的目標,在目標的驅(qū)動下,你的學習才會更加精準和高效。這里給你一條平滑的、零基礎快速入門的學習路徑:

1.了解爬蟲的基本原理及過程

2.Requests+Xpath 實現(xiàn)通用爬蟲套路

3.了解非結構化數(shù)據(jù)的存儲

4.應對特殊網(wǎng)站的反爬蟲措施

5.Scrapy 與 MongoDB,進階分布式

01

了解爬蟲的基本原理及過程

大部分爬蟲都是按“發(fā)送請求——獲得頁面——解析頁面——抽取并儲存內(nèi)容”這樣的流程來進行,這其實也是模擬了我們使用瀏覽器獲取網(wǎng)頁信息的過程。

簡單來說,我們向服務器發(fā)送請求后,會得到返回的頁面,通過解析頁面之后,我們可以抽取我們想要的那部分信息,并存儲在指定的文檔或數(shù)據(jù)庫中。

在這部分你可以簡單了解 HTTP 協(xié)議及網(wǎng)頁基礎知識,比如 POST\GET、HTML、CSS、JS,簡單了解即可,不需要系統(tǒng)學習。

02

學習 Python 包并實現(xiàn)基本的爬蟲過程

Python中爬蟲相關的包很多:urllib、requests、bs4、scrapy、pyspider 等,建議你從requests+Xpath 開始,requests 負責連接網(wǎng)站,返回網(wǎng)頁,Xpath 用于解析網(wǎng)頁,便于抽取數(shù)據(jù)。

如果你用過 BeautifulSoup,會發(fā)現(xiàn) Xpath 要省事不少,一層一層檢查元素代碼的工作,全都省略了。掌握之后,你會發(fā)現(xiàn)爬蟲的基本套路都差不多,一般的靜態(tài)網(wǎng)站根本不在話下,小豬、豆瓣、糗事百科、騰訊新聞等基本上都可以上手了。

來看一個爬取豆瓣短評的例子:

選中第一條短評,右鍵-“檢查”,即可查看源代碼

把短評信息的XPath信息復制下來

我們通過定位,得到了第一條短評的 XPath 信息:

如果我們想爬取很多條短評,那么自然應該去獲?。◤椭疲└噙@樣的 XPath:

觀察第1、2、3條短評的 XPath,你會發(fā)現(xiàn)規(guī)律,只有

  • 后面的序號不一樣,恰好與短評的序號相對應。那如果我們想爬取這個頁面所有的短評信息,那么不要這個序號就好了呀。

    通過XPath信息,我們就可以用簡單的代碼將其爬取下來了:

    爬取的該頁面所有的短評信息

    當然如果你需要爬取異步加載的網(wǎng)站,可以學習瀏覽器抓包分析真實請求或者學習Selenium來實現(xiàn)自動化爬取,這樣,知乎、時光網(wǎng)、貓途鷹這些動態(tài)的網(wǎng)站也基本沒問題了。

    你還需要了解 Python 的基礎知識,比如:

    文件讀寫操作:用來讀取參數(shù)、保存爬取內(nèi)容

    list(列表)、dict(字典):用來序列化爬取的數(shù)據(jù)

    條件判斷(if/else):解決爬蟲中的判斷是否執(zhí)行

    循環(huán)和迭代(for ……while):用來循環(huán)爬蟲步驟

    03

    非結構化數(shù)據(jù)的存儲

    爬回來的數(shù)據(jù)可以直接用文檔形式存在本地,也可以存入數(shù)據(jù)庫中。

    開始數(shù)據(jù)量不大的時候,你可以直接通過 Python 的語法或 pandas 的方法將數(shù)據(jù)存為text、csv這樣的文件。還是延續(xù)上面的例子:

    用Python的基礎語言實現(xiàn)存儲:

    用pandas的語言來存儲:

    這兩段代碼都可將爬下來的短評信息存儲起來,把代碼貼在爬取代碼后面即可。

    存儲的該頁的短評數(shù)據(jù)

    當然你可能發(fā)現(xiàn)爬回來的數(shù)據(jù)并不是干凈的,可能會有缺失、錯誤等等,你還需要對數(shù)據(jù)進行清洗,可以學習 pandas 包,掌握以下知識點就好:

    缺失值處理:對缺失數(shù)據(jù)行進行刪除或填充

    重復值處理:重復值的判斷與刪除

    空格和異常值處理:清楚不必要的空格和極端、異常數(shù)據(jù)

    數(shù)據(jù)分組:數(shù)據(jù)劃分、分別執(zhí)行函數(shù)、數(shù)據(jù)重組

    04

    掌握各種技巧,應對特殊網(wǎng)站的反爬措施

    爬取一個頁面的的數(shù)據(jù)是沒問題了,但是我們通常是要爬取多個頁面。

    這個時候就要看看在翻頁的時候url是如何變化了,還是以短評的頁面為例,我們來看多個頁面的url有什么不同:

    通過前四個頁面,我們就能夠發(fā)現(xiàn)規(guī)律了,不同的頁面,只是在最后標記了頁面的序號。我們以爬取5個頁面為例,寫一個循環(huán)更新頁面地址就好了。

    當然,爬蟲過程中也會經(jīng)歷一些絕望啊,比如被網(wǎng)站封IP、比如各種奇怪的驗證碼、userAgent訪問限制、各種動態(tài)加載等等。

    遇到這些反爬蟲的手段,當然還需要一些高級的技巧來應對,常規(guī)的比如訪問頻率控制、使用代理IP池、抓包、驗證碼的OCR處理等等。

    比如我們經(jīng)常發(fā)現(xiàn)有的網(wǎng)站翻頁后url并不變化,這通常就是異步加載。我們用開發(fā)者工具取分析網(wǎng)頁加載信息,通常能夠得到意外的收獲。

    通過開發(fā)者工具分析加載的信息

    比如很多時候如果我們發(fā)現(xiàn)網(wǎng)頁不能通過代碼訪問,可以嘗試加入userAgent 信息,甚至是瀏覽器的 cookie 信息。

    瀏覽器中的userAgent信息

    在代碼中加入userAgent信息

    往往網(wǎng)站在高效開發(fā)和反爬蟲之間會偏向前者,這也為爬蟲提供了空間,掌握這些應對反爬蟲的技巧,絕大部分的網(wǎng)站已經(jīng)難不到你了。

    05

    Scrapy 與 MongoDB,進階分布式

    掌握前面的技術,一般量級的數(shù)據(jù)和代碼基本沒有問題了,但是在遇到非常復雜的情況,可能仍然會力不從心,這個時候,強大的 scrapy 框架就非常有用了。

    scrapy 是一個功能非常強大的爬蟲框架,它不僅能便捷地構建request,還有強大的 selector 能夠方便地解析 response,然而它最讓人驚喜的還是它超高的性能,讓你可以將爬蟲工程化、模塊化。

    分布式爬取租房信息

    爬取的數(shù)據(jù)量大了,自然會需要數(shù)據(jù)庫,MongoDB 可以方便你去存儲大規(guī)模的數(shù)據(jù)。因為這里要用到的數(shù)據(jù)庫知識其實非常簡單,主要是數(shù)據(jù)如何入庫、如何進行提取,在需要的時候再學習就行。

    MongoDB 存儲職位信息

    分布式這個東西,聽起來非常嚇人,但其實就是利用多線程的原理讓多個爬蟲同時工作,需要你掌握 Scrapy + MongoDB + Redis 這三種工具。

    Scrapy 用于做基本的頁面爬取,MongoDB 用于存儲爬取的數(shù)據(jù),Redis 則用來存儲要爬取的網(wǎng)頁隊列,也就是任務隊列。

    這個時候,你已經(jīng)可以去寫分布式爬蟲了。

    你看,這一條學習路徑下來,你已然可以成為老司機了,非常的順暢。所以在一開始的時候,盡量不要系統(tǒng)地去啃一些東西,找一個實際的項目(開始可以從豆瓣、小豬這種簡單的入手),直接開始就好。

    因為爬蟲這種技術,既不需要你系統(tǒng)地精通一門語言,也不需要多么高深的數(shù)據(jù)庫技術,高效的姿勢就是從實際的項目中去學習這些零散的知識點,你能保證每次學到的都是最需要的那部分。

    當然唯一麻煩的是,在具體的問題中,如何找到具體需要的那部分學習資源、如何篩選和甄別,是很多初學者面臨的一個大問題。

    不過不用擔心,我們卓越準備了一門非常系統(tǒng)的Python課程,除了為你提供一條清晰的學習路徑,我們甄選了最實用的學習資源以及龐大的主流Python案例庫。短時間的學習,你就能夠很好地掌握Python這門編程語言。

    推薦:

    《python視頻教程0基礎從入門到精通》 https://shimo.im/docs/Kr1P9b8k6X00ytct

  • Python編程入門之函數(shù)可變參數(shù) 行業(yè)視頻課程

    img

    無施

    關注

    Finally, the least frequently used option is to specify that a function can be called with an arbitrary number of arguments. These arguments will be wrapped up in a tuple (see Tuples and Sequences). Before the variable number of arguments, zero or more normal arguments may occur.最后,最不常用的選項是指定函數(shù)可以用任意數(shù)量的參數(shù)來調(diào)用。這些參數(shù)將被封裝在一個元組中(參見Tuples和序列)。在變量數(shù)目可變之前,可能出現(xiàn)零個或多個正常參數(shù)。

    defwrite_multiple_items(file,separator,*args):file.write(separator.join(args))

    Normally, these variadic arguments will be last in the list of formal parameters, because they scoop up all remaining input arguments that are passed to the function. Any formal parameters which occur after the *args parameter are ‘keyword-only’ arguments, meaning that they can only be used as keywords rather than positional arguments.通常,這些變量參數(shù)將在正式參數(shù)列表中最后一個,因為它們獲取傳遞給函數(shù)的所有剩余輸入?yún)?shù)。在*args參數(shù)之后出現(xiàn)的任何正式參數(shù)都是“僅關鍵字”參數(shù),這意味著它們只能用作關鍵字而不是位置參數(shù)。

    >>> defconcat(*args,sep="/"):... returnsep.join(args)...>>> concat("earth","mars","venus")'earth/mars/venus'>>>concat("earth","mars","venus",sep=".")'earth.mars.venus'

    python之函數(shù)默認參數(shù)及注意點 流量視頻課程

    img

    半死魚

    關注

    前言

    在python中,函數(shù)的參數(shù)有多種類型,有默認參數(shù)、可變參數(shù)、關鍵字參數(shù)、命名關鍵字參數(shù)等,本文主要深入講解默認參數(shù)。對于默認參數(shù),其實在功能上就是為了簡化函數(shù)調(diào)用。

    默認參數(shù)

    1、格式

    2、說明及注意點

    a. 在使用缺省參數(shù)后,對于函數(shù)的必填參數(shù)必須在前,默認參數(shù)在后。

    b. 默認參數(shù)在一個函數(shù)中可以有多個。

    c. 當一個函數(shù)中的某個參數(shù)的改動不大,就可以考慮將這個參數(shù)設置為默認參數(shù),比如說一個人的民族,這種參數(shù)就可以設置為缺省參數(shù)。

    案例a

    小總結:從上圖可以看出,對于num2這個參數(shù)如果你要傳入的參數(shù)是100,則可傳可不傳,都是可以的。這個也是默認參數(shù)給我們帶來的方便之處。

    python中print語句

    結論:其實在python中的print語句就是采用了缺省參數(shù)。

    使用可變類型作為缺省參數(shù)

    1、代碼舉例

    結論:上圖中的程序運行結果是[10],[20], 但是實際上結果是[10],[10,20]。問題的原因主要在于scores的類型是一個列表,本身是一個可變類型,那么對于列表的append方法添加元素的時候并不會對socres進行重新創(chuàng)建一個新的列表,那么也就是說,你兩次append元素,其實都是對同一個列表進行操作。

    總結

    對于默認參數(shù),如果是不可變類型,那么多次對函數(shù)的調(diào)用是沒有問題的。

    對于默認參數(shù),如果是可變參數(shù),那么對于參數(shù)的傳遞,就要特別考慮結果是正確性,所以對于這種情況,就必須在調(diào)用函數(shù)的時候就要重新初始化一次列表。

    Python函數(shù)學習之參數(shù)列表解包 公司視頻課程

    img

    嵇太君

    關注

    The reverse situation occurs when the arguments are already in a list or tuple but need to be unpacked for a function call requiring separate positional arguments. For instance, the built-in range() function expects separate start and stop arguments. If they are not available separately, write the function call with the *-operator to unpack the arguments out of a list or tuple:當參數(shù)已經(jīng)在列表或元組中時,相反的情況發(fā)生,但需要為需要單獨位置參數(shù)的函數(shù)調(diào)用解包。例如,內(nèi)置的Range()函數(shù)需要單獨的開始和停止參數(shù)。如果它們單獨不可用,則用*-運算符編寫函數(shù)調(diào)用,以從列表或元組中解開參數(shù):

    >>> list(range(3, 6)) # normal call with separate arguments

    [3, 4, 5]

    >>> args = [3, 6]

    >>> list(range(*args)) # call with arguments unpacked from a list

    [3, 4, 5]

    In the same fashion, dictionaries can deliver keyword arguments with the **-operator:以同樣的方式,字典可以用**運算符傳遞關鍵字參數(shù) 即**-操作符來解包參數(shù):

    >>> def parrot(voltage, state='a stiff', action='voom'):

    ... print("-- This parrot wouldn't", action, end=' ')

    ... print("if you put", voltage, "volts through it.", end=' ')

    ... print("E's", state, "!")

    ...

    >>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}

    >>>parrot(**d)

    -- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !

    Python 環(huán)境下的自動化機器學習超參數(shù)調(diào)優(yōu) 企業(yè)視頻課程

    img

    劉念柏

    關注

    選自Medium,作者:William Koehrsen,機器之心編譯。

    機器學習算法的性能高度依賴于超參數(shù)的選擇,對機器學習超參數(shù)進行調(diào)優(yōu)是一項繁瑣但卻至關重要的任務。本文介紹了一個使用「Hyperopt」庫對梯度提升機(GBM)進行貝葉斯超參數(shù)調(diào)優(yōu)的完整示例,并著重介紹了其實現(xiàn)過程。

    由于機器學習算法的性能高度依賴于超參數(shù)的選擇,對機器學習超參數(shù)進行調(diào)優(yōu)是一項繁瑣但至關重要的任務。手動調(diào)優(yōu)占用了機器學習算法流程中一些關鍵步驟(如特征工程和結果解釋)的時間。網(wǎng)格搜索和隨機搜索則不會干涉這些步驟,但是需要大量的運行時間,因為它們浪費了時間去評估搜索空間中并不太可能找到最優(yōu)點的區(qū)域。如今越來越多的超參數(shù)調(diào)優(yōu)過程都是通過自動化的方法完成的,它們旨在使用帶有策略的啟發(fā)式搜索(informed search)在更短的時間內(nèi)找到最優(yōu)超參數(shù),除了初始設置之外,并不需要額外的手動操作。

    貝葉斯優(yōu)化是一種基于模型的用于尋找函數(shù)最小值的方法。近段時間以來,貝葉斯優(yōu)化開始被用于機器學習超參數(shù)調(diào)優(yōu),結果表明,該方法在測試集上的表現(xiàn)更加優(yōu)異,但需要的迭代次數(shù)小于隨機搜索。此外,現(xiàn)在一些 Python 庫的出現(xiàn)使得對任意的機器學習模型實現(xiàn)貝葉斯超參數(shù)調(diào)優(yōu)變得更加簡單。

    本文將介紹一個使用「Hyperopt」庫對梯度提升機(GBM)進行貝葉斯超參數(shù)調(diào)優(yōu)的完整示例。在本文作者早先的一篇文章中,他已經(jīng)對這個方法背后的概念進行了概述,所以本文將著重介紹實現(xiàn)過程。和大多數(shù)機器學習的主題類似,讀者并不需要理解所有的細節(jié),但是了解基本的原理可以幫助讀者更有效地使用這項技術!

    本文所有的代碼都可以以 Jupyter Notebook 的形式在 GitHub 上獲取(https://github/WillKoehrsen/hyperparameter-optimization)。

    本文目錄:

    貝葉斯優(yōu)化方法優(yōu)化問題的四個組成部分目標函數(shù)域空間優(yōu)化算法結果的歷史數(shù)據(jù)優(yōu)化搜索結果搜索結果的可視化搜索的演化過程繼續(xù)搜索結語

    貝葉斯優(yōu)化方法

    簡單地說,貝葉斯優(yōu)化通過基于過去對目標的評估結果建立一個代理函數(shù)(概率模型)找到使得目標函數(shù)最小的值。代理函數(shù)比目標函數(shù)更易于優(yōu)化,因此下一個待評估的輸入值是通過對代理函數(shù)應用某種標準(通常為預期提升)來選擇的。貝葉斯方法不同于隨機搜索或網(wǎng)格搜索,后兩者都使用了過去的評估結果來選擇接下來待評估的值。它們的思想是:通過根據(jù)過去表現(xiàn)良好的值選擇下一個輸入值來限制評價目標函數(shù)的高昂開銷。

    對于超參數(shù)優(yōu)化來說,其目標函數(shù)為使用一組超參數(shù)的機器學習模型的驗證誤差。它的目標是找出在驗證集上產(chǎn)生最小誤差的超參數(shù),并希望將這些結果泛化到測試集上去。對目標函數(shù)評估的開銷是巨大的,因為它需要訓練帶有一組特定超參數(shù)的機器學習模型。理想情況下,我們希望找到這樣一方法,它既能探索搜索空間,又能限制耗時的超參數(shù)評估。貝葉斯超參數(shù)調(diào)優(yōu)使用一個不斷更新的概率模型,通過從過去的結果中進行推理,使搜索過程「專注」于有可能達到最優(yōu)的超參數(shù)。

    Python 環(huán)境下有一些貝葉斯優(yōu)化程序庫,它們目標函數(shù)的代理算法有所區(qū)別。在本文中,我們將使用「Hyperopt」庫,它使用樹形 Parzen 評估器(TPE,https://papers.nips.cc/paper/4443-algorithms-for-hyper-parameter-optimization.pdf)作為搜索算法,其他的 Python 庫還包含「Spearmint」(高斯過程代理)和「SMAC」(隨即森林回歸)。目前在這個領域有大量有趣的研究,所以如果你對某一個庫不是很滿意,你可以試試其他的選項!針對某個問題的通用結構(本文將使用的結構)可以在各個庫間進行轉換,其句法差異非常小。

    優(yōu)化問題的四個組成部分

    貝葉斯優(yōu)化問題有四個組成部分:

    1. 目標函數(shù):我們想要最小化的對象,這里指帶超參數(shù)的機器學習模型的驗證誤差

    2. 域空間:待搜索的超參數(shù)值

    3. 優(yōu)化算法:構造代理模型和選擇接下來要評估的超參數(shù)值的方法

    4. 結果的歷史數(shù)據(jù):存儲下來的目標函數(shù)評估結果,包含超參數(shù)和驗證損失

    通過以上四個步驟,我們可以對任意實值函數(shù)進行優(yōu)化(找到最小值)。這是一個強大的抽象過程,除了機器學習超參數(shù)的調(diào)優(yōu),它還能幫我們解決其他許多問題。

    數(shù)據(jù)集

    在本文的示例中,我們將使用 Caravan Insurance 數(shù)據(jù)集(https://kaggle/uciml/caravan-insurance-challenge),它的目標是預測客戶是否會購買一份保險產(chǎn)品。這是一個監(jiān)督分類問題,帶有 5800 個用于訓練的觀測值和 4000 個測試點。由于這是一個不平衡的分類問題,本文使用的評價性能的指標是受試者工作特征曲線下的面積(ROC AUC),ROC AUC 的值越高越好,其值為 1 代表模型是完美的。數(shù)據(jù)集如下所示:

    數(shù)據(jù)集(CARAVAN)是帶標簽的

    由于 Hyperopt 要做的是取最小值,我們將從目標函數(shù)中返回「1-ROC AUC」,從而提高 ROC AUC。

    梯度提升模型

    在本文中,我們對梯度提升機(GBM)的細節(jié)知識不做過多探討,下面是我們需要理解的基本知識:GBM 是一種基于使用依次訓練的弱學習器(多為決策樹)構建強學習器的集成增強方法。GBM 中有許多超參數(shù),它們控制著整個集成結構和單棵決策樹。我們在這里使用的一種最有效的選擇決策樹數(shù)量的方法(稱為評估器)是早停止(early stopping)。LightGBM 提供了一種 Python 環(huán)境下的快速簡單的 GBM 實現(xiàn)。

    想了解更多 GBM 的細節(jié),這里有一篇高屋建瓴的文章:https://medium/mlreview/gradient-boosting-from-scratch-1e317ae4587d一篇技術論文:https://brage.bibsys.no/xmlui/bitstream/handle/11250/2433761/16128_FULLTEXT.pdf

    拋開必要的背景知識不談,讓我們將用于超參數(shù)調(diào)優(yōu)的貝葉斯優(yōu)化問題的四個組成部分一一列舉出來。

    具體實現(xiàn)請參見機器之心(wxID:almosthuman2014):https://mp.weixin.qq/s/hDTmSpht1M3Xc26bavPcK

    Python下單元測試框架與unittest單元測試框架實現(xiàn)參數(shù)化(附源碼) 互聯(lián)網(wǎng)視頻課程

    img

    斷緣

    關注

     GitHub地址:https://github/wolever/nose-parameterized

    當我們在使用TestNG時,發(fā)現(xiàn)它有一個非常好用的參數(shù)化功能。當你的測試用例有固定的參數(shù)和斷言結果時,它可以相似用例的節(jié)省用例的個數(shù)。

      例子如下:

    import static org.testng.Assert.assertEquals;

    import org.testng.annotations.DataProvider;

    import org.testng.annotations.Test;

    /**

    * Created by fnngj on 2017/3/19.

    */

    public class Demo {

    // 定義測試數(shù)據(jù)

    @DataProvider(name = "data")

    public Object[][] Users() {

    return new Object[][] {

    { 1, 1, 2},

    { 2, 2, 5},

    { 3, 3, 6},

    };

    }

    @Test(dataProvider="data")

    public void testAdd(int a,int b,int c) {

    assertEquals(a + b, c);

    }

    }

    相對而言,Python下面單元測試框架要弱上少,尤其是Python自帶的unittest測試框架,不支持參數(shù)化,不支持多線程執(zhí)行用例,不支持HTML測試報告的生成...。好再,部分不足我們可以通過unittest擴展來滿足需求。比如現(xiàn)在要介紹一個參數(shù)化的擴展。

      在沒有參數(shù)化功能的情況下,我們的用例需要這樣編寫。

    import unittest

    class TestAdd(unittest.TestCase):

    def test_add_01(self):

    self.assertEqual(1 + 2, 3)

    def test_add_02(self):

    self.assertEqual(2 + 2, 5)

    def test_add_03(self):

    self.assertEqual(3 + 3, 6)

    if __name__ == '__main__':

    unittest.main()

    nose-parameterized是一個針對Python單元測試框架實現(xiàn)參數(shù)化的擴展。同時支持不同的單元測試框架。

    GitHub地址:https://github/wolever/nose-parameterized

      然后,unittest就可以像TestNG一樣寫用例了。

    import unittest

    from nose_parameterized import parameterized

    class TestAdd(unittest.TestCase):

    @parameterized.expand([

    ("01",1, 1, 2),

    ("02",2, 2, 5),

    ("03",3, 3, 6),

    ])

    def test_add(self, name, a, b, c):

    self.assertEqual(a + b, c)

    if __name__ == '__main__':

    unittest.main(verbosity=2)

    執(zhí)行結果:

    test_add_0_01 (__main__.TestAdd) ... ok

    test_add_1_02 (__main__.TestAdd) ... FAIL

    test_add_2_03 (__main__.TestAdd) ... ok

    當相同入?yún)⒑蛿嘌越Y果的用例越多,這種寫法用起來越爽!

    以上是全部內(nèi)容,只是善于分享,不足之處請包涵!爬蟲基本的原理就是,獲取源碼,進而獲取網(wǎng)頁內(nèi)容。一般來說,只要你給一個入口,通過分析,可以找到無限個其他相關的你需要的資源,進而進行爬取。

    我也寫了很多其他的非常簡單的入門級的爬蟲詳細教程,

    關注后,點擊我的頭像,就可以查看到。

    歡迎大家一起留言討論和交流,謝謝!

    img

    在線咨詢

    建站在線咨詢

    img

    微信咨詢

    掃一掃添加
    動力姐姐微信

    img
    img

    TOP