精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

python爬蟲入門基本知識

開發(fā) 后端
我們?yōu)g覽網(wǎng)頁的瀏覽器和手機應用客戶端與服務器通信幾乎都是基于HTTP協(xié)議,而爬蟲可以看作是一個另類的客戶端,它把自己偽裝成瀏覽器或者手機應用客戶端,按照自己的邏輯貪婪的向服務器索取數(shù)據(jù),如何向服務器索取數(shù)據(jù),所以了解HTTP協(xié)議就顯得很有必要了。

基礎知識

HTTP協(xié)議

我們?yōu)g覽網(wǎng)頁的瀏覽器和手機應用客戶端與服務器通信幾乎都是基于HTTP協(xié)議,而爬蟲可以看作是一個另類的客戶端,它把自己偽裝成瀏覽器或者手機應用客戶端,按照自己的邏輯貪婪的向服務器索取數(shù)據(jù),如何向服務器索取數(shù)據(jù),所以了解HTTP協(xié)議就顯得很有必要了。

HTTP協(xié)議中文名稱是超文本傳輸協(xié)議,是一個基于請求與響應模式的、無狀態(tài)的、應用層的協(xié)議,?;赥CP的連接方式。請求和響應模式很好理解,客戶端發(fā)送請求,服務器響應客戶端的請求,就像學校食堂打菜一樣,你和打菜阿姨說要哪份菜,她才會給你盛哪份菜。

python爬蟲入門基本知識

無狀態(tài)是指協(xié)議對于事務處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務器不需要先前信息時它的應答就較快。形象點說,可以把服務器看成是沒有記憶的大學食堂打飯打菜,在每次請求中,阿姨并不知道你之前有沒有打過菜,也不知道你是不是合法的學生,所以你只能一邊舉著學生證一邊和阿姨說我要這個菜,阿姨看到你的學生證后才會給你打菜,而這個學生證就是你每次需要重傳的數(shù)據(jù)信息。

當我們在瀏覽器地址欄中輸入http://www.bilibili.com 并敲入回車后,瀏覽器會構(gòu)造HTTP請求發(fā)送到服務器,在收到服務器的HTTP響應后,瀏覽器會解析頁面,繼續(xù)向服務器請求圖片、視頻、js腳本等數(shù)據(jù),直到頁面加載完成,最終展示給我們的就是B站主頁了。這是我用Fiddler抓的包,展示的是HTTP最原生的面貌,接下來我就根據(jù)這張圖具體的講解HTTP協(xié)議,以及寫爬蟲需要關注的一些點。

python爬蟲入門基本知識

HTTP請求由三部分組成,分別是: 請求行、消息報頭、請求正文。 在接收和解釋請求消息后,服務器返回一個HTTP響應消息,HTTP響應也是由三個部分組成,分別是:狀態(tài)行、消息報頭、響應正文。

HTTP方法

HTTP請求的請求行以一個方法符號開頭,以空格分開,后面跟著請求的URI和協(xié)議的版本。請求方法都是大寫,有很多種,常見的有GET POST DELETE PUT,各種方法之間的區(qū)別不大。

python爬蟲入門基本知識

這里羅列了一些常用的方法,一般來講,GET表示向服務器請求URI對應的資源,POST表示向服務器提交數(shù)據(jù),DELETE表示刪除數(shù)據(jù),PUT表示修改數(shù)據(jù)。但這都是一種約定,沒有強制的要求,如果你碰見用DELETE方法提交數(shù)據(jù)也沒必要大驚小怪。在實際寫爬蟲的過程中,我們只需要按照抓包請求構(gòu)造數(shù)據(jù)即可,沒有必要在意用了什么方法。

報頭字段

重點講解幾個寫爬蟲需要關注的字段

  • User-Agent 出現(xiàn)在請求報頭中,表示客戶端的操作系統(tǒng)、瀏覽器型號版本等信息。服務器可以根據(jù)此報頭向客戶端返回不同的頁面以適應客戶端。有些網(wǎng)站(知乎)會校驗此報頭,不填寫或者不主流的報頭都不能拿到正常的頁面。因此自己在寫爬蟲的時候最好將從瀏覽器中拷貝到代碼中。
  • Cookie 出現(xiàn)在請求抱頭中,前面我們說過HTTP是基于請求與響應模式并且無狀態(tài)的協(xié)議,之前舉了打菜阿姨的例子,Cookie就相當于每次請求中的學生證,它可以記錄用戶的身份信息。當我們自己寫爬蟲的時候,如果需要登陸,并且登陸又有驗證碼或者短信驗證時,最簡單的方法就是從瀏覽器中把cookie拷貝到爬蟲中,就可以騙過服務器了。
  • Set-Cookie 出現(xiàn)在響應抱頭中,讓客戶端更新頁面關聯(lián)的Cookie,還是拿食堂阿姨的例子,如果你的響應報頭有這個字段,意思就是阿姨重新給你了一個學生證,下次打飯你得用最新的學生證,原來的學生證不好使。如果你在模擬瀏覽器或者客戶端登陸,需要將此報頭更新已有的Cookie,不過Scrapy和requests都可以自動更新,因此不需要你再手動設置。
  • Content-Type 標明請求正文或者響應正文的格式,客戶端或者服務器會根據(jù)此字段選擇合適的方式解析正文內(nèi)容,以下是一些常見的值

python爬蟲入門基本知識

  • Content-Length 標明請求正文或者響應正文的長度,在使用requests構(gòu)造請求的時候,我們不需要顯式的加上此字段,requests會根據(jù)請求正文自動計算添加。
  • Content-Encoding 在某些情況下,正文會講過壓縮后傳輸,此字段會指明壓縮的類型(gzip和壓縮參數(shù))
  • Transfer-Encoding 如果正文內(nèi)容過長,HTTP協(xié)議允許將此字段設置為chunked,然后分塊傳輸響應正文
  • Connection 在HTTP1.1之前的版本,不支持持久連接,所謂的持久鏈接意思就是:HTTP協(xié)議一般通過TCP協(xié)議實現(xiàn),客戶端和服務器經(jīng)過TCP三次握手建立連接,在請求和響應結(jié)束之后,此連接繼續(xù)保持,當之后還有請求的時候,就不需要重新通過三次握手再建立連接,這樣可以極大的降低客戶端和服務器的IO負載。

在自己寫爬蟲的時候,我們可以根據(jù)瀏覽器的抓包數(shù)據(jù)有選擇的添加一些請求報頭,其實大部分情況下都可以直接使用瀏覽器中的請求頭,為了避免不必要的麻煩,盡可能像的模仿瀏覽器總是沒有錯的。

響應碼

響應消息的第一行的狀態(tài)行包括HTTP的協(xié)議版本、狀態(tài)碼、狀態(tài)碼含義。按照約定

  • 2xx表示請求成功
  • 3xx表示重定向
  • 4xx表示客戶端錯誤(403 Forbiden 404 Not Found)
  • 5xx表示服務器錯誤(502 網(wǎng)關錯誤)

爬蟲開發(fā)

一般來說開發(fā)爬蟲的過程是這樣的

  1. 抓包分析獲取數(shù)據(jù)的URL
  2. 通過python從上一步的URL獲取數(shù)據(jù)
  3. 從上一步獲取的HTML頁面或者JSON數(shù)據(jù)中解析出感興趣的數(shù)據(jù)
  4. 存儲數(shù)據(jù)

下面就講解這四個關鍵點

抓包發(fā)包工具

寫爬蟲的第一步就是分析想要的數(shù)據(jù)瀏覽器是通過什么URL拿到的,抓包也就在所難免。最好用的抓包工具當然是谷歌瀏覽器了,右鍵檢查,選中網(wǎng)絡,重新刷新頁面就可以看到加載此網(wǎng)頁所有的HTTP請求了,如果此鏈接有跳轉(zhuǎn)地址,跳轉(zhuǎn)之前的HTTP請求會被清掉,所以記得選上preserve log,尤其是登陸的時候,一般都會有跳轉(zhuǎn)。

python爬蟲入門基本知識

再介紹另外兩個HTTP抓包工具——Fiddler和Charles,分別在windows和macos使用。它們可以為我們展示更多HTTP的細節(jié),將請求和響應都調(diào)至Raw模式下,我們就可以一睹HTTP請求和響應的真實面貌。

通過抓包分析出具體的URL后,想進一步確認自己構(gòu)造的參數(shù)和報頭能否正確獲取到數(shù)據(jù),應該怎么做呢?不怕,postman可以幫你,你可以很輕松的選擇方法,定義header,添加各種類型的body。

python爬蟲入門基本知識

python請求數(shù)據(jù)

講完了基本的HTTP協(xié)議知識后,大家可能會疑問那我該如何模仿瀏覽器或者手機客戶端去向服務器發(fā)送HTTP請求呢?python的原生庫urllib、第三方庫requests、pycurl等都支持HTTP協(xié)議,既然有這么多工具可以用,大家可能就又有疑問該選擇哪個工具了。在此我特地安利大家用一下requests,它讓爬蟲變得如此簡單,讓你再也不用為字符編碼、重定向、cookie、響應解壓縮煩惱了。如果你堅持用原生的庫,那么有以下問題需要你一一解決,這些都是當年自己趟過的坑,絕非危言聳聽。

  1. 需要自己判斷服務器返回數(shù)據(jù)的編碼格式,如果這個地方你不能正確判斷,那恭喜你之后的每一步,你都必須面對亂碼的問題
  2. 重定向,urllib不能自動判斷重定向,需要自己解析重定向的鏈接并重新請求
  3. 如果模擬登陸,你必須要手動保證Cookie正確更新和發(fā)送
  4. 很多情況下響應正文是壓縮過的,需要做解壓處理
  5. 對于比較長的響應正文,服務器會將正文分段傳輸,所以還需要你做拼接操作
  6. 原生的urllib對HTTPS和持久連接都支持不好

當你花了一整天,寫了好幾百行的代碼終于解決上面的問題后,而你旁邊的同事可能早已經(jīng)把數(shù)據(jù)下載完并愉快的約妹子去了。所以用requests吧,兄弟們用了都說好。下面我用兩個例子講解一下如何用requests獲取想要的數(shù)據(jù),并教你如何解決這些問題:

  • 如何發(fā)送不同方法的請求
  • 如何保存cookie
  • 如何添加代理
  • 如何處理編碼問題

B站

假如我想下載B站里面某位小姐姐所有上傳的視頻,應該怎么辦呢?首先你需要找到這位小姐姐的視頻主頁

python爬蟲入門基本知識

但是通過谷歌瀏覽器右鍵查看頁面源碼,沒有從html中找到這些視頻的播放信息,唯一的可能就是視頻數(shù)據(jù)是通過js腳本調(diào)用服務器獲取,然后生成的這張頁面。爬蟲小白可能會疑問,難道我需要像瀏覽器一樣分析js腳本,然后模擬js執(zhí)行嗎?其實不用這么復雜,只需要簡單的分析抓包結(jié)構(gòu),就可以找到請求URL了。

python爬蟲入門基本知識

獲取視頻的URL: http://space.bilibili.com/ajax/member/getSubmitVideos?mid=79415852&pagesize=30&tid=0&page=1&keyword=&order=senddate

那么問題又來了,這個URL的其他參數(shù)是干啥的呢?憑經(jīng)驗,mid肯定是這位小姐姐的用戶id,page和pagesize是負責分頁用的,keyword和是用來搜索的關鍵字,order是排序選項,剩下的tid是干啥的呢?其實寫爬蟲很多時候都會遇到這種問題,不知道某個參數(shù)的含義,也不確定正確的取值范圍,需要一些嘗試和運氣,這里我們不管它就好。而返回的字段中有一個aid,那肯定是視頻的id,有這個就可以自己拼接出播放鏈接了。

python爬蟲入門基本知識

是不是很簡單,通過response.ok查看請求是否正確返回,因為此接口的數(shù)據(jù)為json格式,直接通過response.json()就可以直接拿到格式化的數(shù)據(jù)。

知乎

雖然現(xiàn)在知乎對未登錄用戶展示的內(nèi)容越來越多,但是仍會有一些限制,用爬蟲模擬登陸可以之后再去爬取數(shù)據(jù),可以避免很多不必要的麻煩,現(xiàn)在就講一講如何用requests模擬用戶登陸。

還是和之前一樣,在登陸頁面打開谷歌瀏覽器的抓包窗口,輸入用戶名和密碼點擊確定,然后在茫茫請求中找到發(fā)送登陸信息的那個HTTP請求即可,功夫不負有心人,我們終于找到了登陸的請求。

python爬蟲入門基本知識

等等,請求里面還有一個_xsrf,這是一個什么鬼參數(shù),其實呢這是一個防止跨站請求偽造而生成的一個隨機數(shù),可以通過解析https://www.zhihu.com/#signin 頁面獲取,這一部分我在下面會講解如何HTML獲取數(shù)據(jù),現(xiàn)在假設我們已經(jīng)拿到這個數(shù)據(jù)了,如何將用戶名和密碼登陸呢?

python爬蟲入門基本知識

如果我們想要自動保存Cookie信息,只需要生成一個Session對象,之后所有的請求通過此對象完成,requests會像瀏覽器一樣自動更新cookie信息,并在每次請求的時候加上cookie,因此在成功的發(fā)送post登陸請求之后,就可以用session在保持登陸狀態(tài)請求數(shù)據(jù)了。需要注意的是在請求的時候我特意去掉了Cookie和Content-Length報頭,因為requests會自動加上,所以不需要我們特意關注。

更多關于requests的使用可以查看官方文檔:

英文: http://docs.python-requests.org/en/master/

中文: http://cn.python-requests.org/zh_CN/latest/user/quickstart.html

python解析數(shù)據(jù)

因為個人在解析數(shù)據(jù)的時候遇到過很多編碼的坑,所以在繼續(xù)講解之前告訴大家一些如何避免編碼問題的方法。python2中有兩種字符串:unicode和str,它們分別對應python3中的str和bytes。如何定義這兩種類型的變量在下圖中給大家列出來了。

python爬蟲入門基本知識

以python3為例講解這兩種類型的區(qū)別。python3中的str每一個字符可以存儲一個英文字母、一個漢字甚至一個emoji表情,它可以通過特定的編碼方式,例如utf-8或者gbk生成bytes,在不同的編碼格式下,可能需要2-3個字符常能表示一個漢字。bytes可以指定解碼格式解碼生成str,如果指定的解碼格式不匹配,就會導致亂碼問題。為了避免亂碼問題,最好的方式就是使用str,等到需要寫入文件或者數(shù)據(jù)庫的時候,再指定寫入的編碼格式,用好這個準則,我們可以避免百分之九十的編碼問題。

HTTP響應的數(shù)據(jù)格式有很多,例如文本、json、html,對應的解析方式也很多。通用一點,用python內(nèi)置庫正則匹配找到想要的數(shù)據(jù),但是這種方法相對來說比較麻煩,而且不好維護,比較適合文本類型的數(shù)據(jù),但HTTP響應正文基本都是json和HTML,這種方式適用面比較窄。

當請求的數(shù)據(jù)是json格式時,我們可以很方便的用requests反序列化返回內(nèi)容,取出感興趣的數(shù)據(jù)。但是當HTTP返回的數(shù)據(jù)是html的時候,我們該如何操作,就像剛才知乎登陸的例子中,如何快速從html中解析想要的數(shù)據(jù)呢?

專門用來解析html的第三方庫有很多,例如beautifulsoup、pyquery。個人推薦使用pyquery,因為它可以使用jquery的方式選取元素,而且支持xpath,以后上手scrapy會很容易。繼續(xù)上面登陸知乎的例子,登陸時需要的_xsrf實際上在 https://www.zhihu.com/#signin 頁面里面,只要先請求到這個頁面,然后解析出_xsrf,配合之前的登陸請求,我們就可以完整的實現(xiàn)用python模擬瀏覽器登陸知乎了。

python爬蟲入門基本知識

python爬蟲入門基本知識

使用起來是不是相當?shù)暮唵?,我們只要通過谷歌瀏覽器找到對應DOM元素,根據(jù)屬性名就可以非常快速的找到想要的數(shù)據(jù)。需要注意的是response.content和response.text,這都是返回的body正文,但是前者是bytes,后者是str,requests已經(jīng)幫助我們把響應正文按照正確的編碼格式進行了解碼,根據(jù)我們之前的闡述的原則,盡量使用str,所以26這個地方我用的是response.text。

更多關于pyquery的使用可以參考官方文檔: https://pythonhosted.org/pyquery/

存儲數(shù)據(jù)

根據(jù)數(shù)據(jù)量的不同以及數(shù)據(jù)類型的不同,數(shù)據(jù)的存儲選擇也很多。如果爬取的是圖片、音頻、視頻等多媒體文件,直接按照文件形式存儲就好了。如果是一些文本,數(shù)字等數(shù)據(jù),一般有這么幾種選擇:

  • 輸出到屏幕
  • 寫入文件(txt csv)
  • 寫入數(shù)據(jù)庫 (mysql sqlite mongo)

如果數(shù)據(jù)量非常小,可以選擇直接輸出到屏幕(這種情況貌似也不需要爬蟲),因為終端存儲的數(shù)據(jù)量很少,而且因為沒有持久化,關閉窗口就意味著數(shù)據(jù)丟失,不建議使用。

在數(shù)據(jù)量小且不愿意折騰數(shù)據(jù)庫的情況下,可以把爬取的數(shù)據(jù)寫入文件,但是這種情況不能隨取隨用,也不方便做數(shù)據(jù)分析,需要手動處理。

當數(shù)據(jù)量較多,而且需要快捷的分析數(shù)據(jù),推薦使用數(shù)據(jù)庫存儲數(shù)據(jù),大型的數(shù)據(jù)庫mysql, mongo功能齊全,可以分方便的進行數(shù)據(jù)分析,而且也很容易實現(xiàn)分布式擴展,當你需要多進程甚至多機器運行爬蟲的時候,這些數(shù)據(jù)庫可能是最好的選擇。sqlite相對來說功能要少很多,python原生支持,依賴少,數(shù)據(jù)量不算太大的情況下可以考慮使用。

爬蟲示例

下面給出一個簡單的例子,為大家展示如何使用上述python庫實現(xiàn)一個完整的爬蟲。一些熱門的知乎話題最多有1000條精華回答,這個例子就是爬取這些精品答案。圖示頁面就是回答列表,每頁有二十個答案,最多有五十頁。但是此頁面沒有完整的回答信息,需要通過顯示全部對應的鏈接進入回答詳情頁才能獲取完整的答案,所以我們的爬蟲策略就是通過回答列表找到所有精華回答鏈接,再通過回答鏈接獲取內(nèi)容。而且這些頁面不需要登陸也能訪問,因此可以省去模擬登陸。

python爬蟲入門基本知識

開發(fā)環(huán)境

python是跨平臺語言,但不同平臺不同版本的python略微有一些差異,考慮到大家使用windows平臺的較多,我在windows和ubuntu的python3.5驗證過此代碼,其他平臺和其他python版本下可能需要做一些修改。集成開發(fā)環(huán)境推薦使用Pycharm,這是一個跨平臺良心IDE,各大操作系統(tǒng)下都有免費的社區(qū)版本可以下載。

運行代碼

代碼鏈接

https://github.com/LiuRoy/sakura/blob/master/spider/crawl.py

https://github.com/LiuRoy/sakura/blob/master/spider/tables.sql

安裝依賴庫:

  1. pip install requests pyquery SQLAlchemy 

運行代碼:

  1. python scrawl.py 

代碼解釋

通過谷歌瀏覽器抓包分析,可以通過 https://www.zhihu.com/topic/19553155/top-answers?page=2 頁面獲取每個話題不同分頁下的回答鏈接 https://www.zhihu.com/question/27189372/answer/38712987 ,在此頁面中就可以獲取問題、回答、點贊數(shù)、標簽等信息。

因為數(shù)據(jù)量不大,采用sqlite存儲,可以很方便的用命令行或者桌面客戶端查看數(shù)據(jù)。

python爬蟲入門基本知識

反爬蟲策略和應對方式

稍微大一些的網(wǎng)站都會有一些反爬蟲策略,簡單一點的根據(jù)User-Agent過濾,例如知乎,我們只需要設置為和瀏覽器相同即可。復雜一點的會限制非登陸用戶,也只需要按照之前例子中的方式登陸,或者干脆先用瀏覽器登陸好,然后在第一次訪問的時候帶上瀏覽器中的cookie就好,實現(xiàn)起來難度不大。但是有不少網(wǎng)站,例如豆瓣和github,在檢測到某一客戶端頻繁訪問后,會直接封鎖ip,這個問題解決起來就相當?shù)募趾偷疤哿恕?/p>

解決方法也挺簡單,我們只需要找到足夠多的代理ip就可以了,只要策略得當,短時間內(nèi)不要過度頻繁的使用同一ip代碼,或者當某一ip地址被封鎖后馬上切換到其他的ip代理,這樣就可以保證高效的爬取數(shù)據(jù)了。那如何找到代理ip并且如何使用了,其實免費的代理ip很多,我們用百度搜索代理ip就可以找到很多網(wǎng)站,例如:http://www.ip181.com/。

python爬蟲入門基本知識

python爬蟲入門基本知識

找到代理ip后,就可以用上面的方式很輕松的使用代理ip了,但是網(wǎng)上免費的代理ip質(zhì)量不好,很多不可用,而且速度慢、不穩(wěn)定,請求的時候最好設置一下超時時間。我之前在爬github的時候,會專門寫一個爬蟲從這些網(wǎng)站搜集代理ip地址,一旦檢測到被github封鎖,就隨機選取一個代理ip使用,如果發(fā)現(xiàn)代理ip不可用,不斷的更換知道可用的代理ip為止,每個代理ip使用的次數(shù)也會有一定的限制,保證爬蟲在整個執(zhí)行期間不會因為ip封鎖而不可用。

異常及性能

曾經(jīng)我遇到過這樣的狀態(tài),寫好并運行爬蟲一個小時之后,因為網(wǎng)絡抖動或者某一種特殊的頁面導致解析失敗,整個爬蟲運行終止,這就蛋疼了。如果日志打印不充分,我連運行失敗的原因都清楚,更別說修復問題,即使修復好重新運行,又要花一個小時才能到剛才的進度,費時費力。

爬蟲出現(xiàn)異常的情況實在是太多:網(wǎng)絡抖動、解析頁面失敗、反爬蟲被屏蔽、寫入數(shù)據(jù)異常、代碼邏輯錯誤等等都會導致進程終止,而一般爬蟲需要數(shù)小時甚至數(shù)天數(shù)周的運行,每一次的運行失敗都是時間巨大的浪費。因此一定需要在可能出現(xiàn)異常的地方接住異常,保證爬蟲不會終止,并記錄日志,這些錯誤日志不僅可以快速的幫助我們定位錯誤,在出錯不多的情況下,我們甚至不需要修改代碼重新運行,只需要人肉補全這些數(shù)據(jù)就好。

如果發(fā)現(xiàn)自己的爬蟲運行效率太低,爬取速度太慢,并發(fā)對于提升爬蟲速度是一個不錯解決方案,因為GIL的存在,多進程并發(fā)模式對于python提速更優(yōu),我們可以使用生產(chǎn)者消費者的模式將爬蟲任務進行拆分,從而實現(xiàn)多進程或者分布式。一般來說可以將HTTP請求的數(shù)據(jù)、解析數(shù)據(jù)、存儲數(shù)據(jù)分別用不同的進程實現(xiàn),這些進程之間通過消息隊列進行通信,保證每個進程無狀態(tài),就可以非常容易的實現(xiàn)多進程擴展。即使某一類進程出現(xiàn)異常,也不需要重新啟動所有的進程,只需要修復好代碼重新啟動,就可以實現(xiàn)斷點續(xù)爬了。

一些常用的分布式工具:redis、rabbitmq、scrapy、celery、you-get

責任編輯:未麗燕 來源: 36大數(shù)據(jù)
相關推薦

2011-11-23 10:35:53

2010-07-28 15:52:00

Flex

2017-10-20 22:40:54

電線電纜導體

2009-06-26 14:42:08

2009-06-11 14:40:32

Java list

2010-06-13 13:49:14

2012-06-05 00:41:07

JavaJava內(nèi)存

2010-05-06 17:41:19

Unix命令

2017-02-20 23:05:14

JavaScript

2010-01-28 11:18:14

Android界面布局

2009-12-22 14:43:38

Linux操作系統(tǒng)

2009-08-28 16:53:05

C# for語句

2010-06-17 13:22:40

UML用例建模

2012-05-08 09:10:56

WCF

2010-06-10 11:41:57

MPLS協(xié)議棧結(jié)構(gòu)

2010-04-21 18:38:36

Unix網(wǎng)絡

2020-07-20 07:10:44

數(shù)據(jù)中心IT技術

2011-04-29 13:50:32

激光打印機

2019-04-16 10:05:11

2012-03-19 09:24:25

JavaScript
點贊
收藏

51CTO技術棧公眾號

韩国欧美一区| 91豆花视频在线播放| 欧美专区在线播放| 亚洲国产欧美91| 老牛影视精品| 国产精品私人自拍| 91精品入口| 亚洲国产成人私人影院tom| 成人网在线免费看| 久久不卡免费视频| 中文字幕一二三四区| 黄色小网站在线观看| 成人免费视频播放| 国产精品美乳在线观看| 国产亚洲自拍av| 男人添女人下面免费视频| 日本一本草久在线中文| 免费美女久久99| 午夜精品一区二区三区在线播放 | 91国产视频在线观看| 2025韩国大尺度电影| 五月婷婷狠狠干| 国产美女在线精品| 在线观看麻豆| 99久精品国产| 999视频在线免费观看| 无码人妻aⅴ一区二区三区有奶水| 国产精品免费视频久久久| 中出视频在线观看| 日本一区二区三区视频在线看| 色综合天天综合色综合av| 噜噜噜在线观看播放视频| 日本三级在线视频| 久久综合九色综合欧美就去吻| 91青草视频久久| 日韩美女视频在线| 老司机午夜av| 蜜桃视频在线观看播放| 亚洲资源在线观看| 蜜乳av综合| 一本一道久久a久久精品综合蜜臀| 久久福利一区二区| 精品国产丝袜高跟鞋| 欧美激情一区二区三区在线| 欧美激情国产在线| 亚洲欧美日韩高清| 国产ts丝袜人妖系列视频| 国产精品xxx在线观看| 天堂8中文在线| 成人av电影在线网| 国产精品黄色影片导航在线观看| 麻豆91精品91久久久| 自拍偷拍欧美专区| 欧美黄色www| 国产精品theporn动漫| 日韩激情一区| 久久精品成人动漫| 全网免费在线播放视频入口| 福利电影一区| 在线免费精品视频| 2022亚洲天堂| 爱情岛亚洲播放路线| 一区二区三区在线视频观看58| 中文字幕の友人北条麻妃| 在线不卡日本v二区707| 国产精品超碰97尤物18| 99久热在线精品视频| 精精国产xxxx视频在线中文版| 性做久久久久久| aa在线免费观看| 日韩国产成人无码av毛片| 久草在现在线| 国产精品欧美综合在线| 中文字幕成人一区| 欧美aaa免费| 欧美日韩免费看| 超碰av在线免费观看| 韩国一区二区三区视频| 欧美精品一区二区三区高清aⅴ| 免费a在线观看播放| 国产精品探花在线观看| 久久精品国产2020观看福利| 国产无套内射又大又猛又粗又爽| 久久亚洲风情| 147欧美人体大胆444| 无码精品人妻一区二区三区影院| 欧美激情在线免费观看| 亚洲精品电影在线观看| 国产91视频一区| 色偷偷偷在线视频播放| 欧美日韩综合一区| 日韩女优在线视频| 精品久久久久中文字幕小说| 久久精品免费电影| 国产69精品久久久久久久久久| 日韩电影一区二区三区| 99影视tv| h视频在线观看免费| 亚洲午夜久久久久| 91制片厂毛片| 欧美电影完整版在线观看| 色妞一区二区三区| 国产又黄又猛又粗又爽| 国产乱子轮精品视频| 欧洲av一区| heyzo一区| 91精品国产综合久久福利| 丰满少妇一区二区三区| 欧美体内she精视频在线观看| 国产91网红主播在线观看| 亚洲免费不卡视频| 国产精品欧美精品| 欧美牲交a欧美牲交aⅴ免费下载| 亚洲一区二区三区在线免费| 最近的2019中文字幕免费一页| 日韩少妇裸体做爰视频| 国产在线精品一区在线观看麻豆| 欧美日本韩国国产| 国产乱码精品一区二三赶尸艳谈| 91精品国产综合久久精品app| 精品一区二区三区蜜桃在线| 一本色道久久综合亚洲精品高清| 91精品中国老女人| 亚洲成人三级| 欧美三级视频在线播放| 新91视频在线观看| 一本久道久久综合狠狠爱| 懂色av一区二区三区在线播放| 免费在线你懂的| 欧美网站大全在线观看| 一区二区精品免费| 欧美亚洲专区| 欧美日韩国产一二| 久草在线资源福利站| 精品对白一区国产伦| 欧美日韩成人免费观看| 国产麻豆成人精品| 法国空姐在线观看免费| 成年永久一区二区三区免费视频| 一区二区欧美激情| 最新黄色网址在线观看| 国产欧美日韩麻豆91| 欧美视频第三页| 亚洲成a人片77777在线播放 | 四虎永久免费在线观看| 亚洲每日更新| 久久久影院一区二区三区| 人在线成免费视频| 亚洲精品午夜精品| 国产一区二区视频免费| 中文字幕欧美国产| 久久久久久久久久一区二区| 久久久久久久久久久久久久久久久久 | 久久久久中文字幕亚洲精品| 久久伦理在线| 成人看片人aa| 99在线视频观看| 精品免费国产一区二区三区四区| 精品无码人妻一区二区三区| 国产精品自拍区| 中国av一区二区三区| 国产精品沙发午睡系列| 日韩中出av| 国产va免费精品高清在线| 国产综合在线观看| 8v天堂国产在线一区二区| 国产稀缺精品盗摄盗拍| 国产v日产∨综合v精品视频| 国产69精品久久久久999小说| 亚洲欧美tv| 国产精品入口日韩视频大尺度 | 在线视频国产日韩| 亚洲影院一区二区三区| 亚洲一区二区三区自拍| ass精品国模裸体欣赏pics| 另类小说欧美激情| 亚洲色欲久久久综合网东京热| 蜜桃一区二区| 亚洲va男人天堂| 偷拍自拍在线看| www.欧美精品| 天堂在线资源8| 欧美亚洲国产怡红院影院| 无码人妻精品一区二区三区夜夜嗨 | 国产精品久久久久av| 国产人成网在线播放va免费| 亚洲黄色www网站| 久久99精品视频一区97| 成人性生交视频免费观看| 欧美日韩精品| 久中文字幕一区| 亚洲国产天堂| 2019中文字幕在线| 日本网站在线免费观看视频| 你懂的一区二区三区| 日本aⅴ大伊香蕉精品视频| 婷婷在线视频观看| 日韩精品久久久久久福利| 136福利视频导航| 午夜精品久久久久久久久久| 国产成人免费观看网站| 成人av资源在线观看| 中文字幕成人在线视频| 亚洲在线免费| 可以免费看的黄色网址| 成人情趣视频| 国产一区免费在线| 日本成人精品| 国产精品日韩精品| 中文在线资源| 性欧美xxxx视频在线观看| 麻豆电影在线播放| 国产一区二区欧美日韩| 日韩一卡二卡在线| 日韩欧美中文字幕制服| 在线视频1卡二卡三卡| 色综合久久久久| 日韩成人在线免费视频| 一区二区高清视频在线观看| 美国一级片在线观看| 国产农村妇女精品| 黄色在线观看av| 99视频一区二区三区| 精品国产aⅴ一区二区三区东京热 久久久久99人妻一区二区三区 | 婷婷色中文字幕| 国产精品久久久久桃色tv| 美女脱光内衣内裤| 久久综合狠狠综合久久综合88| 国产精品日日摸夜夜爽| 国产高清在线精品| 国产精品探花在线播放| 久久草av在线| 中国黄色片一级| 黄色资源网久久资源365| 天天色综合社区| 日韩精品乱码av一区二区| 虎白女粉嫩尤物福利视频| 亚洲一区日本| 2022亚洲天堂| 日日摸夜夜添夜夜添亚洲女人| 日本三级免费网站| 国产免费久久久| 欧美电影一区二区| 97超碰中文字幕| 制服丝袜亚洲色图| 国产乱淫片视频| 91麻豆精品国产91久久久久久久久 | 一本久道中文字幕精品亚洲嫩| 亚洲精品午夜国产va久久成人| 懂色av中文一区二区三区天美| yjizz国产| 欧美色精品天天在线观看视频| 中文字幕一区二区三区四区免费看 | 欧美日韩免费在线| www成人在线| 欧美亚洲综合另类| 国产女人18毛片18精品| 日韩欧美国产精品| 欧美熟女一区二区| 亚洲欧美日韩国产中文专区| 99中文字幕一区| 久久久精品视频在线观看| 亚洲第一图区| 97婷婷大伊香蕉精品视频| 波多野结衣亚洲一二三| 国产精品精品视频一区二区三区| 欧美一级做一级爱a做片性| 91大片在线观看| 日本一区福利在线| 亚洲欧美日韩精品久久久| 亚洲乱码精品| 激情五月宗合网| 免费高清在线视频一区·| 91人妻一区二区三区| 99re这里只有精品6| www成人啪啪18软件| 亚洲一区二区三区影院| 东京热一区二区三区四区| 欧美久久久一区| 日批视频在线播放| 色七七影院综合| sm性调教片在线观看| 国产精品美乳在线观看| 91在线一区| 精品国产乱码久久久久久图片| 国产美女永久免费| 亚洲精品国产电影| 欧美成人hd| 91国语精品自产拍在线观看性色| 国产精品亚洲成在人线| 国产伦精品一区二区三区高清| 色777狠狠狠综合伊人| 霍思燕三级露全乳照| 蜜臀久久久99精品久久久久久| 极品白嫩的小少妇| 国产精品沙发午睡系列990531| 精品无码久久久久| 在线成人免费视频| 久蕉在线视频| 久久噜噜噜精品国产亚洲综合| 成人自拍视频网| 久久av一区二区三区漫画| 一区二区不卡| 亚洲国产高清av| 久久久精品人体av艺术| 国产精品白浆一区二小说| 91精品国产91久久久久久一区二区 | 亚洲午夜精品视频| 国产va在线视频| 18成人在线| 99久久激情| 男女爽爽爽视频| 久久久久久久久久美女| 日本三级网站在线观看| 日韩精品中文字幕在线一区| 免费观看久久久久| 国产精品亚洲аv天堂网| 久草成人在线| 男人天堂网视频| www.视频一区| 国产在线视频在线观看| 日韩视频免费直播| 成人黄色在线电影| 91久久久久久久久| 91免费精品| 日韩精品视频一二三| 中文字幕乱码一区二区免费| 国产成人a v| 亚洲色图国产精品| 美女日韩欧美| 青青草国产精品| 免费亚洲一区| 日韩精品无码一区二区三区久久久| 香蕉影视欧美成人| 亚州av在线播放| 91国语精品自产拍在线观看性色 | 免费看欧美黑人毛片| 国产真实乱对白精彩久久| а天堂中文在线资源| 欧美日本免费一区二区三区| sese一区| 91欧美激情另类亚洲| 欧美激情视频一区二区三区免费| 亚洲一区二区偷拍| 亚洲嫩草精品久久| 亚洲爱情岛论坛永久| 久久免费福利视频| 久久久精品国产**网站| 3d动漫一区二区三区| 久久免费美女视频| 无码人妻精品一区二区50| 中文日韩在线观看| 亚洲精品一区av| 水蜜桃在线免费观看| 成人禁用看黄a在线| 欧美一二三区视频| 亚洲网在线观看| 四虎永久精品在线| 大胆欧美熟妇xx| 91视频com| 亚洲最大成人av| 欧美第一黄色网| 欧美三级午夜理伦三级小说| 激情五月开心婷婷| 一区在线观看免费| 成人av免费播放| 国产91精品久久久| 成人免费av| 性高潮免费视频| 欧美亚洲综合久久| 性欧美1819sex性高清大胸| 国产免费一区| 免费在线观看视频一区| 欧美卡一卡二卡三| 亚洲男人天堂手机在线| 一区二区三区| 香港三级韩国三级日本三级| 欧美国产一区在线| 亚洲国产精品国自产拍久久| 欧美一区二区三区……| 偷拍欧美精品| 7788色淫网站小说| 欧美日韩五月天| 国产精品xx| www.黄色网址.com| 26uuu另类欧美亚洲曰本| 国产视频手机在线| 日韩av免费一区| 午夜国产精品视频| 在线观看国产精品一区| 精品国产制服丝袜高跟| 日本高清不卡一区二区三区视频 | 丝袜美腿亚洲综合| 丝袜美腿小色网| 永久免费毛片在线播放不卡| 成人av婷婷| 日韩免费精品视频| 香蕉综合视频| 波多野结衣一本| 亚洲成人av在线|