爬蟲:Ajax數據爬取

Amae 2022-01-08 06:39:07 阅读数:451

ajax

目錄

1、什麼是Ajax

1.1 實例的引入

1.2 基本原理

2、Ajax分析方法

1、查看請求

 2、過濾請求

3、Ajax結果提取

1、分析請求

2、分析響應

3、例子


我們在用 requests 抓取頁面的時候,得到的結果可能和在瀏覽器中看到的不一樣:在瀏覽器中可以看到正常顯示的頁面數據,但是使用 requests 得到的結果並沒有, 這是因為 requests 獲取的 都是原始的 HTML 文檔,而瀏覽器中的頁面則是經過 JavaScript 處理數據後生成的結果,這些數據的來源有多種,可能是通過Ajax 加載的, 可能是包含在HTML 文檔中的,也可能是經過 JavaScript 和特定算法計算後生成的。

對於第一種情况,數據加載是一個中异步加載方式,原始的頁面最初不會包含某些數據,原始頁面加載完後,會再向服務器請求某個接口獲取數據,然後數據才被處理從而呈現到網頁上,這其實就是發送了一個Ajax請求,這種形式的頁面原來越多,網頁的原始HTML文檔不會包含任何數據,數據都是通過Ajax統一加載後在呈現出來的,這樣在Web開發上可以做到前後端分離,而且降低服務器直接渲染頁面帶來的壓力

所以如果遇到這樣的頁面,直接 requests 等庫來抓取原始頁面,是無法獲取到有效數據的, 這時需要分析網頁後臺 接口發送的 jax 請求,如果可以用 requests 來模擬 Ajax 請求,那麼就可以 成功抓取了。

1、什麼是Ajax

Ajax ,全稱為 Asynchronous JavaScript and XML ,即异步的 JavaScript 和XML 它不是一門編程 語言,而是利用 JavaScript 在保證頁面不被刷新、頁面鏈接不改變的情况下與服務器交換數據並更新部分網頁的技術。

對於傳統的網頁,如果想更新其內容,那麼必須要刷新整個頁面,但有了 Ajax ,便可以在頁面不 被全部刷新的情况下更新其內容 在這個過程中,頁面實際上是在後臺與服務器進行了數據交互,獲取到數據之後,再利用 JavaScript 該變網頁,這樣網頁內容就會更新了

1.1 實例的引入

瀏覽網頁的時候,我們會發現很多網頁都有下滑查看更多的選項: 比如我個人CSDN的主頁, 再向下就沒有了,轉而會出現一個加載的動間,不一會兒下方就繼續出現了新的CSDN內容,這個過程 真實就是 Ajax 加載的過程

我們注意到頁面其實並沒有整個刷新,也就意味著頁面的鏈接沒有變化,但是網頁中卻多了新內 容,也就是後面刷出來的CSDN 這就是通過 Ajax 獲取新數據’並呈現的過程

1.2 基本原理

發送Ajax請求到網頁更新的這個過程可以簡單分為以下3步

  1. 發送請求
  2. 解析內容
  3. 渲染網頁

1、發送請求

JavaScript 可以實現頁面的各種交互功能, Ajax也不例外,它也是由 JavaScript 實現的, 實際上執行了如下代碼:

var xmlhttp;
if (window.XMLHttpRequest) {
// code for IE7+ , Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else {// code for IE6, IES
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.ready5tate==4 && xmlhttp.status==200) {
document.getElementById ("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","/ajax/", true);
xmlhttp.send();

這是 JavaScript 對Ajax 最底層的實現,實際上就是新建了 XMLHttpRequest 對象,然後調用 onreadystatechange 屬性設置了監昕,然後調用 open() 和 send() 方法向某個鏈接(也就是服務器送了請求。 前面用 Python 實現請求發送之後,可以得到響應結果,但這裏請求的發送變成 JavaScript 來完成, 由於設置了監聽,所以當服務器返回響應時, onreadystatechange 對應的方法便會被觸發, 然後在這個方法裏面解析響應內容即可

2、解析內容

得到響應之後,onreadystatechange 屬性對應的方法便會被觸發,此時利用 xmlhttp的response Text 屬性便可取到響應內容,這類似於 Python 中利用 requests向服務器發起請求,然後得到響應的過程,那麼返回內容可能是 HTML ,可能是 JSON ,接下來只需要在方法中用 JavaScript 處理即可比如,如果是 JSON 的話,可以進行解析和轉化

3、渲染網頁

JavaScript有改變網頁內容的能力,解析完響應內容之後,就可以調用 JavaScript來針對解析完的 內容對網頁進行下一步處理了, 比如,通過 document.getElementByid().innerHTML這樣的操作,便可以對某個元素內的源代碼進行更改,這樣網頁顯示的內容就改變了,這樣的操作也被稱作 DOM 操作, 即對 Document 網頁文檔進行操作,如更改、删除等;

上例中, document.getElementByid("myDiv ").innerHTML=xmlhttp.responseText便將ID為 myDiv 的節點內部的HTML代碼更改為服務器返回的內容,這樣myDiv元素內部便會呈現出服務器返回的 數據,網頁的部分內容看上去就更新了

這3個步驟其實都是由JavaScript完成的,它完成了整個請求,解析,和渲染的過程

真是的數據其實都是一次次的Ajax請求得到的,如果想要抓取這些數據,需要直到這些請求到底怎麼發送的,發往哪裏,發了哪些參數,如果我們直到了這些,就可以用Python模擬這個發送操作,獲取到其中的結果了?

2、Ajax分析方法

拖動刷新的內容由Ajax加載,而且頁面的URL沒有變化,那麼我們到哪裏去查看這些Ajax請求?

1、查看請求

這裏我們就需要Chrome瀏覽器開發者工具來,切換到Network選項卡,我們知道頁面加載過程中瀏覽器與服務器之間發送請求和接受響應的記錄

Ajax其實有其特殊的請求類型,叫做xhr,我們可以看到這個get-tab-total請求就是Ajax請求

 有的請求中,Request Headers、URL和Response Headers等信息,其中Request Headers中有一個信息為X-Requested-With:XMLHttpReqest,這就標記了此請求時Ajax請求,

點擊Preview,我們可以看到響應的響應的內容,它是JSON格式的,這裏chrome為我們做了自動解析,我們可以發現返回的時文章的信息,這也是用來渲染個人主頁所使用的數據,JavaScript接受到這些數據之後,再執行相應的渲染方法,整個頁面就渲染出來了
 

我們看下第一個請求,返回的其代碼不是很多,結構也簡單,只是執行了一些JavaScript,真是數據並不是最原始的頁面返回的,而是後來執行JavaScript後,再次向後臺發送了Ajax請求,瀏覽器拿到數據後進一步渲染出來的

 2、過濾請求

使用Chrome開發工具篩選共嗯那個選出所有的Ajax請求,在請求的商法選欄,直接點擊XHR,此時在下方顯示所有請求便是Ajax請求了

 我們點開一個請求就可以看到其:RequestURL,ReqestHeaders,ResponseHeader,Response Body等內容,此時我們模擬請求和提取就非常簡單了

3、Ajax結果提取

以自己的CSDN為例子

1、分析請求

打開Ajax的XHR過濾器,選中其中一個請求,查看它參數信息;這是一個get請求,請求參數5個

 通過發現,請求的參數中始終為這5個,只是該錶了page,這個參數只是用來控制分頁的

2、分析響應

查看返回的響應,這個內容時JSON格式的,瀏覽器開發這工具自動做了解析所以方便我們查看,

 這些我們請求一個接口,就可以得到20天數據,而且請求只需要該錶page參數既可

3、例子

獲取自己CSDN的Ajax數據

from urllib.parse import urlencode
import requests
from pyquery import PyQuery as pq
base_url = "https://blog.csdn.net/community/home-api/v1/get-business-list?"
headers = {
"cookie": "uuid_tt_dd=10_37481457760-1614696081762-771893; UN=Smart_look; Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac=6525*1*10_37481457760-1614696081762-771893!5744*1*Smart_look; Hm_lvt_e5ef47b9f471504959267fd614d579cd=1620037344; __gads=ID=b2b2ba9fbd5f97fa-228d5d7c93cb004f:T=1631355448:RT=1631355448:S=ALNI_MaN-YuGZ0ZKrwQlnce2q2uTVYcQrQ; ssxmod_itna=Yq0h0K4Axx7tGH3iQ0gxQqAITqyDUEhTq874Y5dD/I3xnqD=GFDK40oAOIKuIx==YD8aiQFnADcfhq81RgxWd5n7cjxqGCe0aDbqGk7nzx4GGUxBYDQxAYDGDDPDoxKD1D3qDkD7g1ZlndtDm4GWzqGfDDoDYS6nDitD4qDB+2dDKqGgzwrXGeNQ6qqKv7+yD0t=xBd=F6hyAmaHk0NKocWjDxDHf8yo8Ah1rg443CpnDB6mxBQZ0MN00CHgDCX4=rhaKixYSEG69z4rKDPqeb4T5hD=KBDi9S4W/DqudE+zR5DADU44QOD4D===; ssxmod_itna2=Yq0h0K4Axx7tGH3iQ0gxQqAITqyDUEhTq874Y5G9Wv7DBTkAx7p+x8=QnhyoS8GlrMviCP5KQo=wDO/4w=85G3piamrVr=3th8s9p7XsBA/TE4+NN/l5R9W2Ee=Mc4LNE2L8YLdjNkUS=+U3i=IGXcIB3D8EUTWl5WzEr4Ar=480rZRov3v7d8CePQv4n8+bA5TZoFEraWhcaiULRdZfbcifrcWfr0AfHvFaq+LCtHVqnwsnoQbjKvvA5vLOD=WDO88nQPx9aCSFOUucO0H=3nOzCDgIH2=Hl67yls8vgsvVoEdkX/2eKWncBDu/xx7m9Dvlm+00hZIaSQpM+a=tDVIBifPzQcOI+kle5wcNWwM3E+Ww5=IhSBitgc07P6PQ15b4W=62VIg8I2b0oKtG3D07UYb1bxh0K8AN30AmQE7M8qGQcGqcSqHbxsGQV0f08T97DWSA+PFT07Sok/GmpP8KkfqfK=Z+YZ+YG8LPTqGUNYjADDLxD2/yWMgPBq4l2xnFqAKzDhKBqYKmKAnI0TAS2Y0QzkDPFdnBuzgTIZ2DDWTZhKQexe7IPD==; UserName=Smart_look; UserInfo=d43e50a1aa0c4f2caa52662c49ea3f55; UserToken=d43e50a1aa0c4f2caa52662c49ea3f55; UserNick=Amae; AU=779; BT=1635603087677; p_uid=U010000; Hm_up_6bcd52f51e9b3dce32bec4a3997715ac=%7B%22islogin%22%3A%7B%22value%22%3A%221%22%2C%22scope%22%3A1%7D%2C%22isonline%22%3A%7B%22value%22%3A%221%22%2C%22scope%22%3A1%7D%2C%22isvip%22%3A%7B%22value%22%3A%220%22%2C%22scope%22%3A1%7D%2C%22uid_%22%3A%7B%22value%22%3A%22Smart_look%22%2C%22scope%22%3A1%7D%7D; c_segment=5; dc_sid=8af578122c748c6f8f79293ff5d9c725; c_first_ref=www.baidu.com; c_first_page=https%3A//blog.csdn.net/quanqxj/article/details/89226160; Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=1640932419,1640958689,1641047085,1641108277; c_pref=https%3A//www.baidu.com/link; c_ref=https%3A//blog.csdn.net/Smart_look%3Fspm%3D1000.2115.3001.5343; firstDie=1; log_Id_click=32; Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac=1641188306; log_Id_view=97; dc_session_id=10_1641198463093.943635; c_page_id=default; dc_tos=r54ku6; log_Id_pv=73",
"referer": "https://blog.csdn.net/Smart_look?spm=1000.2115.3001.5343",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
}
def get_page(page):
params = {
"page":page,
'size':20,
'businessType':'lately',
'noMore':'false',
'username':"Smart_look"
}
url = base_url + urlencode(params)
try:
respnose = requests.get(url,headers=headers)
if respnose.status_code==200:
return respnose.json()
except requests.ConnectionError as e:
print("Error",e.args)
if __name__ == '__main__':
for page in range(1,5):
json = get_page(page)
print(json)
結果
{'code': 200, 'message': 'success', 'data': {'list': [{'type': 'blog', 'formatTime': '21 小時前', 'title': '爬蟲:CSV文件存儲', 'description': 'CSV,全稱為 Comma-Separated Values ,中文可以叫作逗號分隔值或字符分隔值,其文件以純文 本形式存儲錶格數據。該文件是一個字符序列,可以由任意數目的記錄組成,記錄間以某種換行符分隔,每條記錄由字段組成,字段間的分隔符是其他字符或字符串,最常見的是逗號或制錶符, 不過所有記錄都有完全相同的字段序列 ,相當於一個結構化錶的純文本形式, 它比 Excel 文件更加簡介, XLS 文本是電子錶格,它包含了文本、數值、公式和格式等內容,而 CSV 中不包含這些 容,就是特定字符分割的純文本,結', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1641122118000, 'createTime': 1641119691000, 'url': 'https://blog.csdn.net/Smart_look/article/details/122279049', 'articleType': 1, 'viewCount': 47, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '昨天', 'title': '爬蟲:JSON文件存儲', 'description': 'JSON ,全稱為 JavaScript Object Notation 也就 JavaScript 對象標記,它通過對象和數組的組合 來錶示數據,構造簡潔但是結構化程度非常高,是一種輕量級的數據交換格式目錄對象和數組讀取Json輸出JSON對象和數組JavaScript 語言中,一切都是對象, 因此,任何支持的類型都可以通過 JSON 來錶示,例如字符串、數字、 對象 、數組等,但是對象和數組都是比較特殊且常用的兩種類型,下面簡要介紹一下 它們對象:他在JavaScript', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1641109809000, 'createTime': 1641106807000, 'url': 'https://blog.csdn.net/Smart_look/article/details/122276562', 'articleType': 1, 'viewCount': 84, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '昨天', 'title': '爬蟲:文件存儲:Text', 'description': '文件保存的形式是多種多樣的,最簡單的形式是直接保存文本文件,如:TEXT,JSON,CSV等,另外還可以保存到數據中,如關系型數據庫Mysql,非關系型數據庫等:MongoDB,Redis等TXT文本保存保存知乎上"發現"頁面的"熱門話題"部分,將其問題和答案統一保存成txt形式import requestsfrom pyquery import PyQuery as pqurl = "https://www.zhihu.com/explore"headers = {"user-ag', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1641106679000, 'createTime': 1641078780000, 'url': 'https://blog.csdn.net/Smart_look/article/details/122273368', 'articleType': 1, 'viewCount': 29, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '昨天', 'title': '爬蟲:pyquery 解析庫', 'description': '如果你比較喜歡CSS選擇器,對jQuery有所了解,那麼這個庫更加適合——pyquery初始化向Beautiful Soup一樣,初始化pyquery的時候,也需要傳入HTML文本來初始化一個PyQuery對象,它的初始化方式有很多種,比如直接傳入字符串,傳入URL,傳入文件名1、字符串初始化...', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1641048913000, 'createTime': 1640611500000, 'url': 'https://blog.csdn.net/Smart_look/article/details/122180996', 'articleType': 1, 'viewCount': 127, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '7 天前', 'title': '爬蟲:Beautiful Soup', 'description': '目錄Beautiful Soup 簡介解釋器基本用法節點選擇器選擇元素提起信息1、提取名稱2、獲取屬性3、獲取內容嵌套選擇關聯選擇1、子節點和子孫節點2、父節點和祖先節點3、兄弟節點4、提取信息方法選擇器1、find_all()2、find() :返回單個元素CSS選擇器1、嵌套選擇2、獲取屬性3、獲取文本對於一個網頁來說,都有一定的特殊結構和層級關系,而且很多節點都有 id,class 來作區分,所以借助它們.', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1640511634000, 'createTime': 1640413116000, 'url': 'https://blog.csdn.net/Smart_look/article/details/122143056', 'articleType': 1, 'viewCount': 348, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '9 天前', 'title': '爬蟲:Xpath定比特', 'description': '對於網頁的節點來說,定義id,class或其他屬性。而且節點之間還有層級關系,在網頁中通過XPath或CSS選擇器來定比特一個或多個節點,對於這種解析庫非常多,其中比較强大的庫有lmxl,Beautiful Soup、pyquery等,XPath概覽...', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1640412962000, 'createTime': 1638800022000, 'url': 'https://blog.csdn.net/Smart_look/article/details/121757654', 'articleType': 1, 'viewCount': 486, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '29 天前', 'title': '爬蟲:Requests高級用法', 'description': '了解了 requests 基本用法 ,如基本的 GET, POST 請求以及 Response 對象 本節巾,我們再來了解下 requests 些高級用法,如文件上傳、 Cookies 設置 代理設置等1、文件上傳requests 可以模擬提交一些數據, 假如有的網站需要上傳文件,我們也可以用它來實現, 這非常簡單import requestsfiles = { "files": open("favicon.ico","rb")}response = requests.pos', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1638665089000, 'createTime': 1638364518000, 'url': 'https://blog.csdn.net/Smart_look/article/details/121664994', 'articleType': 1, 'viewCount': 150, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '1 月前', 'title': '爬蟲:使用Requests模塊基本使用', 'description': '目錄安裝Requests示例引入GET請求抓取網頁抓取二進制數據POST請求常用的響應我們了解urllib的基本用法,但是其中確實有不方便的地方,比如處理網頁驗證和 ookies時,需要寫 Opener 和Handler來處理.。為了更加方便地實現這些操作,就有了更為强大的庫request ,有了它,Cookies 、登錄驗證、代理設置等操作都不是事兒。安裝Requestspin install requests示例引入import requ...', 'hasOriginal': True, 'diggCount': 1, 'commentCount': 0, 'postTime': 1638282866000, 'createTime': 1638278321000, 'url': 'https://blog.csdn.net/Smart_look/article/details/121643058', 'articleType': 1, 'viewCount': 793, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '1 月前', 'title': '爬蟲:Robots協議', 'description': 'Robots 協議也稱作爬蟲協議、機器人協議,它的全名叫作網絡爬蟲排除標准( Robots Exclusion Protocol ),用來告訴爬蟲和搜索引擎哪些頁面可以抓取,哪些不可以抓取 它通常是一個叫作 robots.txt的文本文件,一般放在網站的根目錄下當搜索爬蟲訪問一個站點時,它首先會檢查這個站點根目錄下是否存在 robots.txt 文件,如果存在, 搜索爬蟲會根據其中定義的爬取範圍來爬取, 如果沒有找到這個文件,搜索爬蟲便會訪問所有可直接訪問的頁面:看個robots.txt的樣例:.', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1638196841000, 'createTime': 1638108992000, 'url': 'https://blog.csdn.net/Smart_look/article/details/121599170', 'articleType': 1, 'viewCount': 511, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '1 月前', 'title': '爬蟲:URL解析鏈接', 'description': '目錄urlparse() :實現URL的識別和分段urlparse() 方法其他API用法urlunparse() :實現URL拼接urlsplit():解析URL把params和並到path中urlunsplit() :完成鏈接拼接urljoin():完成鏈接的合並urlencode() :序列化為GET請求參數parse_qs():反序列:字典parse_qsl() 反序列化:列錶quote() :將內容轉化為URL編碼的格式unquote():將UR...', 'hasOriginal': True, 'diggCount': 1, 'commentCount': 0, 'postTime': 1638108181000, 'createTime': 1638086249000, 'url': 'https://blog.csdn.net/Smart_look/article/details/121592819', 'articleType': 1, 'viewCount': 394, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '1 月前', 'title': 'Kubernets:安裝過程中問題解决', 'description': '1、Kuerenets:啟動失敗:[kubelet-check] It seems like the kubelet isn\'t running or healthy.[kubelet-check] The HTTP call equal to \'curl -sSL http://localhost:10248/healthz\' failed with error: Get "http://localhost:10248/healthz": dial tcp [::1]:10248: connect: c', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1638081418000, 'createTime': 1637415587000, 'url': 'https://blog.csdn.net/Smart_look/article/details/121446170', 'articleType': 1, 'viewCount': 186, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '1 月前', 'title': '爬蟲:基本解析庫的介紹urllib', 'description': 'Python2中,有urllib和urllib兩個庫來實現請求的發送,而在Python3中,已經不存在urllib2這個庫了,統一為urllib庫,他是Python內置的HTTP的請求庫主要有4個模塊Request:它是最基本的 HTTP 請求模塊,可以用來模擬發送請求 就像在瀏覽器裏輸入網撾 然後回車 樣,只需要給庫方法傳入 RL 及額外的 數,就可以模擬實現這個過程了Error:异常處理模塊,如果出現請求錯誤 可以捕獲這些异常,然後進行重試或 作以保證程序不會意外終止Parse:一個工具模', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1638081387000, 'createTime': 1615727138000, 'url': 'https://blog.csdn.net/Smart_look/article/details/114803721', 'articleType': 1, 'viewCount': 91, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '1 月前', 'title': 'Docker:kubernetes安裝部署之二', 'description': 'kubernetes集群在安裝的時候要求有三種網絡Pod(Pod網絡):每個Pod運行在同一個網段中,可以Ping通Service(集群網絡):和Pod不在同一個網段,Service地址是虛擬的假的,存在IP tables或IPVS中Node(節點網絡):節點的網段又是獨立的一個,Node節點的IP地址,即物理機(宿主機)的網卡地址這種網絡Kubernetes不提供,需要於第三方依賴插件來解决,都可以托管在Kubermetes上,單Pod,或者守護進程來啟動提供網絡服務: 提..', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1637461871000, 'createTime': 1636242205000, 'url': 'https://blog.csdn.net/Smart_look/article/details/121187590', 'articleType': 1, 'viewCount': 663, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '1 月前', 'title': 'Docker:kubernetes簡介之一', 'description': 'Kubernetes是什麼?Kubernetes(k8s)是自動化容器操作的開源平臺,這些操作包括部署,調度和節點集群間擴展。如果你曾經用過Docker容器技術部署容器,那麼可以將Docker看成Kubernetes內部使用的低級別組件。Kubernetes不僅僅支持Docker,還支持Rocket,這是另一種容器技術。主要特性:1、自動裝箱 【基於資源依賴,最大約束能够自動完成容器的部署,而且不影響其可用性】2、自我修複 【容器崩了,可以在短時間內啟動(容器kill掉,用重啟來代修複)】', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1636215123000, 'createTime': 1635931232000, 'url': 'https://blog.csdn.net/Smart_look/article/details/121126116', 'articleType': 1, 'viewCount': 25, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '2 月前', 'title': 'Devops:Gitlab安裝', 'description': '目錄GitLab 是什麼GitLab的優勢GitLab的構成和主要架構工作流程圖GitLab工作流GitLab和興概念:Merge Request 和ForkGitLab CI/Pipeline 流水線圖搭建GitLab配置GitLab 是什麼GitLab是一個開源分布式版本控制系統,利用Ruby on Rails一個開源的版本管理系統,實現一個自托管的Git項目倉庫,可通過Web界面進行訪問公開的或者私人項目GitLab的優勢開源免費,適合中小型..', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1635756283000, 'createTime': 1635729930000, 'url': 'https://blog.csdn.net/Smart_look/article/details/121074095', 'articleType': 1, 'viewCount': 58, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '2 月前', 'title': 'Devops:Jenkins 使用簡介,增加節點', 'description': '目錄Jenkins 系統架構圖Jenkins分布式建構圖Jenkins 核心概念常見的Job類型Freestyle project 項目構建一個項目Jenkins中增加節點Jenkins 系統架構圖Jenkins分布式建構圖Jenkins 核心概念概念\t\t\t含義\t\tCore [核心 ]\t\t\t主要的jenkins應用程序(jenkins.war),它提供了基本的web ui、配置和插件構建的基礎。\t\tPlugin [插件]\t\t\t\t\t\t與J', 'hasOriginal': True, 'diggCount': 1, 'commentCount': 0, 'postTime': 1635672759000, 'createTime': 1635651344000, 'url': 'https://blog.csdn.net/Smart_look/article/details/121061828', 'articleType': 1, 'viewCount': 355, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '2 月前', 'title': 'Devops:Jenkins安裝用Docker', 'description': 'Jnekins 下載簡介官方支持LTS(Long-term Support)和Weekly版本;LTS每12周發布一次支持多平臺下載:下載地址:https://www.jenkins.io/download/ ;這裏使用的Docker安裝方式LTS版本發布周期示意圖1、拉取docker新的鏡像[[email protected] jenkins]# docker pull jenkins/jenkins:latest[[email protected] jenkins]# mkdir -p.', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1635650282000, 'createTime': 1635635728000, 'url': 'https://blog.csdn.net/Smart_look/article/details/121059759', 'articleType': 1, 'viewCount': 67, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '2 月前', 'title': 'Docker:資源限制', 'description': '前面我們提到過,容器能够得以實現,主要依賴於內核的種的NameSpace,CCgroupsNameSpace(命名空間)CCgroups(控制組)控制NameSpace(命名空間)來進行資源的分配1、默認情况下一個Docker中的一個Container是沒有資源限制的,調度器能够Container調度多少資源,它都能 吃掉2、Docker provides 提供了控制Memory,CPU,block IO,從這三個維度來進行控制的,其實它正真能控制前兩個Memory,CPU,【我們知...', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1634990620000, 'createTime': 1634854884000, 'url': 'https://blog.csdn.net/Smart_look/article/details/120898339', 'articleType': 1, 'viewCount': 108, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '2 月前', 'title': 'Docker:Docker Registry 搭建私有倉庫,Harbor', 'description': 'Resistry 【退管鏡像】用於保存docker鏡像,包括鏡像的層次結構和元數據;用戶可自建Registry , 也可以使用官方的Docker HubSponsor Registry:第三方的registry,供客戶和Docker社區使用\tMirror Registry :第三方的registry,只讓客戶使用\tVendor Registry:由發布Docker鏡像的供應商提供的registry\tPrivate Registry:通過設有防火牆和額外的安全層的私有實體提供的registry安.', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1634743293000, 'createTime': 1634652032000, 'url': 'https://blog.csdn.net/Smart_look/article/details/120855897', 'articleType': 1, 'viewCount': 52, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '2 月前', 'title': 'Docker:Dockfile制作容器詳細介紹', 'description': '有些鏡像不能滿足我們的生產環境的需要就需要自己來制作鏡像;制作鏡像有兩種方式:1、基於鏡像【修改容器: 自定義容器】缺點所有的配置都是寫死的不能靈活配置【假設我們需要三個鏡像:測試,開發,線上配置都是不相同,實現起來配置是很麻煩的,都需要重新制作】;事實上docker在配置文件山解决方案是:nginx這個鏡像啟動為容器後只做一件事情,配置一個虛擬主機,提供一個虛擬Server,它所服務主機名、家目錄、監聽的端口,文檔根目錄,在什麼時候?由於配置的環境影響可能可不一樣,當時它的配置文件格式是.', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1634651844000, 'createTime': 1634447299000, 'url': 'https://blog.csdn.net/Smart_look/article/details/120809871', 'articleType': 1, 'viewCount': 265, 'rtype': 'article'}], 'total': None}}
{'code': 200, 'message': 'success', 'data': {'list': [{'type': 'blog', 'formatTime': '2 月前', 'title': 'Docker:邏輯卷詳細解釋', 'description': '目錄什麼是數據卷?擴展為什麼要使用邏輯卷?卷卷的種類創建邏輯卷Docker-managed volume創建Bind mount volume 創建使用go模板過濾insepct中的信息2個容器共享容器卷創建共享存儲卷並加入基礎鏡像的網絡Docke 作為容器運行底層引擎,在組織和運行時候每個程序只運行一個程序及子程序,對於啟動這個容器它底層可能不止一層的鏡像聯合掛載的啟動而成最上層時可寫層【讀寫層】,對於容器的所有的操作包括數據,對內容的修改...', 'hasOriginal': True, 'diggCount': 1, 'commentCount': 0, 'postTime': 1634441856000, 'createTime': 1634393508000, 'url': 'https://blog.csdn.net/Smart_look/article/details/120805021', 'articleType': 1, 'viewCount': 85, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '2 月前', 'title': 'Docker網絡模型:Nat,bridge,疊加網絡;Docker中的bridge,host,none網絡', 'description': '目錄Docker:網絡模型Network:隔離設備,網絡棧,端口等Bridge:橋網絡一、S1、S2交換機之間用軟件模擬虛擬網卡,進行通信二、S1、S2交換機通過路由轉發,實現不同的網段的通信Nat:網絡地址轉換協議Overlay Network:疊加網絡Docker 中網絡Docker 中 Bridge 網絡IPtables 規則Docker 中 host 網絡引入Container A要被外部主機B訪問,還有什麼方法(除了橋接)?...', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1634353787000, 'createTime': 1633837317000, 'url': 'https://blog.csdn.net/Smart_look/article/details/120684425', 'articleType': 1, 'viewCount': 103, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '3 月前', 'title': 'Linux:Tomcat 安裝配置詳解', 'description': '目錄一、Tomcat 簡介二、Tomcat核心組件三、Tomcat組件組成部分四、Tomcat的運行模式五、安裝Tomcat六、Java WebAPP組織架構七、部署(deployment)webapp相關的操作一、Tomcat 簡介Tomcat 服務器是一個開源的輕量級Web應用服務器,在中小型系統和並發量小的場合下被普遍使用,是開發和調試Servlet、JSP 程序的首選二、Tomcat核心組件catalina: servlet container:...', 'hasOriginal': True, 'diggCount': 2, 'commentCount': 0, 'postTime': 1632220759000, 'createTime': 1632124180000, 'url': 'https://blog.csdn.net/Smart_look/article/details/120392035', 'articleType': 1, 'viewCount': 350, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '3 月前', 'title': 'LInux:LInux找回密碼', 'description': '1、開機後按上下鍵,防止啟動成功,然後在按:e2、修改如下圖配置3、按Crtl + x進入救援模式4、輸入以下命令5、重新啟動,輸入新改的密碼,就可以登錄成功', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1630836619000, 'createTime': 1630835563000, 'url': 'https://blog.csdn.net/Smart_look/article/details/120118461', 'articleType': 1, 'viewCount': 7, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '4 月前', 'title': 'Linux:網絡配置、IP、route、lftp、配置文件', 'description': '網絡配置方式一般分為兩種靜態指定\tifcig系列:ifconfig,route\t\tip系列:object(link,addr,route),ss,tc\t\t配置文件 [system-config-network-tui](setup)\t\t使用圖形化界面:nmcli,nmtui\t\t動態分配\tDHCP :Dynamic Host Configguration Protocol\t命令形式配置網絡...', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1630202534000, 'createTime': 1627207933000, 'url': 'https://blog.csdn.net/Smart_look/article/details/119085414', 'articleType': 1, 'viewCount': 80, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '4 月前', 'title': 'Linux:Ansible Playbooks,yuam語法,roles模塊的詳細解釋', 'description': '對於Playbook來講是由:Inventory、Modules、Ad Hoc Commands、Playbooks【Tasks、Variables、Templates、Handlers、Roles】組成的,想要了解Playbooks,我們需要先了解下YAML語法一、YAML語法簡介YAML是一個可讀性高的用來錶達資料序列的格式。YAML參考了其他多種語言,包括:XML、C語言、Python、Perl以及電子郵件格式RFC2822等。Clark Evans在2001年在首次發錶了這種語言,另外Ing', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1629011869000, 'createTime': 1628725257000, 'url': 'https://blog.csdn.net/Smart_look/article/details/119630345', 'articleType': 1, 'viewCount': 110, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '4 月前', 'title': 'Linux:Ansible簡介、常見模塊:server、copy、shell……等17個常用模塊', 'description': '一、Ansible簡介ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基於模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架二、Ansible的架構Ansible core(核心程序):用來調度執行任務,所需要的模塊Host inventory.', 'hasOriginal': True, 'diggCount': 1, 'commentCount': 0, 'postTime': 1628724473000, 'createTime': 1628399496000, 'url': 'https://blog.csdn.net/Smart_look/article/details/119513535', 'articleType': 1, 'viewCount': 64, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '5 月前', 'title': 'Python:python中IO多路複用使用', 'description': 'IO多路複用大多數操作系統都是支持select和poll\tLinux2.5+ 支持epoll\tBSD、Mac支持kequeue\tWindows的IOCPPython的select庫實現了select、poll系統調用,這個基本上操作系統都是支持。部分實現了epoll。底層的IO多路複用模塊開發中的選擇1、完全跨平臺、使用select、poll。但是性能較差2、針對不同操作系統自行選擇支持的技術,這樣做會提高IO的處理能力 ...', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1627173385000, 'createTime': 1626570677000, 'url': 'https://blog.csdn.net/Smart_look/article/details/118873220', 'articleType': 1, 'viewCount': 38, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '5 月前', 'title': 'Python:异步編程,同步、异步、IO模型概念', 'description': '目錄异步編程同步、异步概念阻塞、非阻塞同步、异步、阻塞、非阻塞的區別與聯系同步IO、异步IO、IO多路複用IO兩個階段IO模型异步編程同步、异步概念同步是指:當程序1調用程序2時,程序1停下不動,直到程序2完成回到程序1來,程序1才繼續執行下去,异步是指:當程序1調用程序2時,程序1徑自繼續自己的下一個動作,不受程序2的的影響。但是程序1會一直盯著程序2,直到程序2響應了,程序1會直接調用程序2,异步不保證多長時間程序2最中響應同步調用是指:發送方發出數據後', 'hasOriginal': True, 'diggCount': 8, 'commentCount': 18, 'postTime': 1626536850000, 'createTime': 1626513367000, 'url': 'https://blog.csdn.net/Smart_look/article/details/118859666', 'articleType': 1, 'viewCount': 580, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '5 月前', 'title': 'Python:網絡編程:SocketServer', 'description': 'SocketServersocket編程過於底層,編程雖然有套路,但是想要寫出健壯的代碼還是比較困難的,所以很多語言都對socket底層 API進行了封裝,Python的封裝就是------socketserver模塊,它是網絡服務編程模塊,便於企業級快速開發類的繼承關系SocketServer簡化了網絡服務器的編寫它有4個同步類:TCPServer、UDPServer、UnixStramServer、UnixDatagramServer2個Mixin類:ForkingMixi', 'hasOriginal': False, 'diggCount': 0, 'commentCount': 0, 'postTime': 1626491398000, 'createTime': 1625917893000, 'url': 'https://blog.csdn.net/Smart_look/article/details/118639721', 'articleType': 4, 'viewCount': 35, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '5 月前', 'title': 'Python:UDP編程、心跳機制、UDP的應用場景', 'description': 'UDP服務端編程流程1、創建服務端流程創建socket的對象。socket.SOCK_DGRAM\t綁定IP和Port,bind方法\t傳輸數據\t接受數據,socket.recvform(bufsize,[,flags]),獲得一個二元組(string,address)\t\t發送數據,socket.sendto(string,address)發給某地址信息\t\t釋放資源import socketsercice_udp = socket.socket(type=socket.SOCK_', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 6, 'postTime': 1625917693000, 'createTime': 1625697157000, 'url': 'https://blog.csdn.net/Smart_look/article/details/118565150', 'articleType': 1, 'viewCount': 64, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '6 月前', 'title': 'Python:網絡編程、TCP客戶端編程', 'description': 'TCP客戶端編程步驟客戶端編程步驟創建Socket對象\t連接到遠端服務器的IP和Port,connect()方法\t傳輸數據\t使用send,recv發送、接受數據\t\t關閉連接、釋放資源簡單步驟', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 2, 'postTime': 1625374023000, 'createTime': 1625357013000, 'url': 'https://blog.csdn.net/Smart_look/article/details/118455665', 'articleType': 1, 'viewCount': 21, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '6 月前', 'title': 'Python:網絡編程TCP、MackfFile、聊天編寫', 'description': 'Socket介紹socket套接字:Python中提供socket.py標准庫,非常底層的接口庫Socket是一種通用的網絡編程接口,和網絡層次沒有一一對應的關系Socket文件本身就是傳輸用, 傳輸的話就要有一個東西來緩沖,說到地就是BUffer,BUffer其實就是個隊列協議族:AF錶示Address Family,用於socket() 第一個參數名稱\t\t\t含義\t\tAF_INET\t\t\tIPV4\t\tAF_INET6\t\t\tIPV6\t\tAF_UNIX\t\t\tUnix Domain', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 6, 'postTime': 1625356875000, 'createTime': 1624804533000, 'url': 'https://blog.csdn.net/Smart_look/article/details/118281433', 'articleType': 1, 'viewCount': 39, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '6 月前', 'title': 'Python:concurrent异步並行任務編程模塊、 線程池、進程池、上下文管理', 'description': '目錄concurrent包ThreadPoolExecutor對象ProcessPoolExecutor對象支持上線文管理總結concurrent包3.2版本引入的模塊。异步並行任務編程模塊,提供一個高級的异步可執行的便利接口。提供2個池執行器:ThreadPoolExcentor 异步調用線程池的ExecutorProcessPoolExecutor 异步調用的進程池的ExecutorThreadPoolExecutor對象首先需要定義一個池的執行器對..', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 2, 'postTime': 1624782779000, 'createTime': 1624759560000, 'url': 'https://blog.csdn.net/Smart_look/article/details/118267671', 'articleType': 1, 'viewCount': 24, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '6 月前', 'title': 'Python:多進程multiprocessing,多進程和多線程的應用', 'description': '多進程由於Python的GIL,多線程未必是CPU密集型程序的好的選擇多進程可以完全獨立的進程環境中運行程序,可以充分地利用多處理器但是進程本身的隔離代理的數據不共享也是一個問題,而且線程比進程輕量級multiprocessingProcess類Process類遵循了Thread類的API,减少了學習難度;先看一個例子,前面介紹的單線程、多線程比較的例子的多進程版本import multiprocessingimport datetimedef cacl(i): ', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 2, 'postTime': 1624759229000, 'createTime': 1624680997000, 'url': 'https://blog.csdn.net/Smart_look/article/details/118246260', 'articleType': 1, 'viewCount': 34, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '6 月前', 'title': 'Python:信號量semaphore', 'description': 'semaphone信號量和Lock很像,信號量對象內部維護一個倒數計數器,每一次acquire都會减1,當acquire方法發現計數為0就阻塞請求的線程,直到其他的線程對信號量release後,計數大於0,恢複阻塞的線程名稱\t\t\t含義\t\tSemaphore(value=1)\t\t\t構造方法。value小於0,拋ValueError异常\t\tacquire(blocking=True,timeout=None)\t\t\t獲取信號量,計數器减1,獲取成功返回True\t\treleas...', 'hasOriginal': True, 'diggCount': 1, 'commentCount': 0, 'postTime': 1624680652000, 'createTime': 1624463670000, 'url': 'https://blog.csdn.net/Smart_look/article/details/118165086', 'articleType': 1, 'viewCount': 46, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '6 月前', 'title': 'Python:線程同步,Barrier屏障', 'description': 'Barrier屏障有人翻譯成栅欄,建議還是使用屏障,可以想象成路障,道閘,Python3.2引入的新功能', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 2, 'postTime': 1624199893000, 'createTime': 1624178846000, 'url': 'https://blog.csdn.net/Smart_look/article/details/118071754', 'articleType': 1, 'viewCount': 58, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '6 月前', 'title': 'Git:Git分支概念、Pycharm中使用使用分支', 'description': '分支branch注:以下操作都在Pycharm中完成,其他IDE都可以實現類似的功能,Git命令較為麻煩', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1624164520000, 'createTime': 1624154026000, 'url': 'https://blog.csdn.net/Smart_look/article/details/118066515', 'articleType': 1, 'viewCount': 49, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '6 月前', 'title': 'gogs的坑:fatal: Could not read from remote repository.', 'description': '首頁\t博客\t專欄課程\t下載\t問答\t社區\t更多\t代碼直播代碼\t會員中心收藏動態消息創作中心gogs同一個坑進去兩次...weixin_342504342018-05-28 00:51:14948收藏文章標簽:git運維runtime版權工程師小C的小店更多我也想開通小店Python編程三劍客:Python編程從入門到實踐第2版+快速上手第2版+極客編程(套裝共3册)作者:[美] 埃裏克·馬瑟斯(Eric M...', 'hasOriginal': False, 'diggCount': 0, 'commentCount': 0, 'postTime': 1624118700000, 'createTime': 1624118532000, 'url': 'https://blog.csdn.net/Smart_look/article/details/118061090', 'articleType': 2, 'viewCount': 100, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '6 月前', 'title': 'Linux:Pycharm中使用Git', 'description': 'Git私服中創建項目版本庫', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1624153788000, 'createTime': 1624116725000, 'url': 'https://blog.csdn.net/Smart_look/article/details/118060834', 'articleType': 1, 'viewCount': 94, 'rtype': 'article'}], 'total': None}}
{'code': 200, 'message': 'success', 'data': {'list': [{'type': 'blog', 'formatTime': '6 月前', 'title': 'Linux:搭建GIT服務,Linux中使用git,git基礎命令,和原理', 'description': 'GIT由來:Linux內核代碼需要版本管理工具維護代碼,2002年開始,使用的是BitMover公司的BitKeeper這個商用軟件。但是Linux社區崇尚的是自由軟件相勃,2005年,Andrew Tridell對BitKeeper的協議進行逆向工程,BitKeeper作者决定收回無償使用授權。磋商無果,Linus又找不到合適的版本管理工具,决定自行開放分布式版本管理工具,一個月後,Linux內核代碼被GitHub上線。2008年,基於WEB使用Git進行版本控制的軟件托管服務的網站GitH', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1624102627000, 'createTime': 1623682066000, 'url': 'https://blog.csdn.net/Smart_look/article/details/117914172', 'articleType': 1, 'viewCount': 51, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '6 月前', 'title': 'Gogs:使用過程中遇到的坑', 'description': '1、訪問頁面報500;日志:[Macaron] PANIC: session(start): mkdir data: permission denied頁面:日志:原因:gogs想要創建 data目錄,它沒有權限導致的解c[[email protected] gogs]# mkidr data #創建data目錄\t[[email protected] gogs]# chow -R git:git /home/git/gogs/d...', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1623675091000, 'createTime': 1623674125000, 'url': 'https://blog.csdn.net/Smart_look/article/details/117912439', 'articleType': 1, 'viewCount': 175, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '6 月前', 'title': 'Python:線程同步,Event事件、Lock鎖,RLock鎖、Condition消費者模型', 'description': '線程同步概念:線程同步,線程間協同,通過某種技術,讓一個線程訪問某些數據時,其他線程不能訪問這些數據,直到該線程完成對數據的操作\t不同的操作系統實現的技術有所不同,有臨界區(Critical Section)、互斥量(Mutex)、信號量(Semaphore)、時間Even等EventEvent時間,是線程間通信機制中最簡單的實現,使用一個內部的標記Flag,通過Flag的True或False的變化來進行操作名稱\t\t\t含義\t\tset()\t\t\t標記設置為True\t\tcle.', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 2, 'postTime': 1623588843000, 'createTime': 1622896447000, 'url': 'https://blog.csdn.net/Smart_look/article/details/117605216', 'articleType': 1, 'viewCount': 137, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '6 月前', 'title': 'Linux:搭建Gogs服務,頁面報錯Failed to test ‘git‘ command: exec: “git“: executable file not found in $PATH', 'description': '1、安裝Mysql【這裏安裝的時Percona Mysql >5.7】官網下載安裝包:https://www.percona.com/downloads/Percona-Server-5.7/LATEST/2、上傳到LInux下解壓安裝[[email protected] percona_mysql]# tar -xvfPercona-Server-5.7.34-37-r7c516e9-el7-x86_64-bundle.tar3、安裝安裝包[[email protected] pe..', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 2, 'postTime': 1623665708000, 'createTime': 1622267938000, 'url': 'https://blog.csdn.net/Smart_look/article/details/117384687', 'articleType': 1, 'viewCount': 216, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '7 月前', 'title': '性能之巔:常用性能分析方法', 'description': '目錄為了便於總結,這些方法已經被歸類成了不同的類型1、街燈訛方法2、隨機變動訛方法3、責怪他人訛方法4、AdHoc核對清單法5、問題陳述法6、科學法7、診斷循環8、工具法9、USE方法10、工作負載特征歸納11、向下挖掘分析12、延時分析13、R方法14、事件跟踪15、基礎線統計16、靜態性能調整17、緩存調優18、微基准測試為了便於總結,這些方法已經被歸類成了不同的類型方法\t\t\t類型\t\t街燈訛方法\t\t\t觀測分析\t.', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 4, 'postTime': 1622390160000, 'createTime': 1621782063000, 'url': 'https://blog.csdn.net/Smart_look/article/details/117202352', 'articleType': 1, 'viewCount': 289, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '7 月前', 'title': 'Python:線程與並發、Threading、線程安全、daemon線程', 'description': '並發:基本概念並發和並行區別並行(parallel):同時做某些事,可以互不幹擾的同一個時刻做幾件事\t並發(concurrency):也是同時做某些事,但是强調,一個時間段內有事情處理舉例:鄉村公路一條車道,半幅路面出現了坑,交警指揮交通。眾多車輛在這一時段通過路面的事件,這就是並發。交警指揮,車輛排隊通過另外半幅路面,一個方向放行3分鐘,停止該方向通行,換另一個方向放行高速公路的車道,雙向4車道,所有車輛(數據)可以互不幹擾的在自己的車道上奔跑(傳輸)。在同一個時刻,每條車道上可能同時.', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 2, 'postTime': 1622896294000, 'createTime': 1621379099000, 'url': 'https://blog.csdn.net/Smart_look/article/details/117012157', 'articleType': 1, 'viewCount': 71, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '7 月前', 'title': 'Python:類的魔術方法、Hash、可視化、運算符重載、容器相關', 'description': '類的特殊方法屬性\t\t\t含義\t\t__name__\t\t\t類、函數、方法等的名字\t\t__module__\t\t\t類定義所在的模塊明\t\t__class__\t\t\t對象或類所屬的類\t\t__bases__\t\t\t類的基類元組,順序為他們在基類列錶中出現的順序\t\t__doc__\t\t\t類、函數的文檔字符串,如果沒有定義則為None\t\t__mro__\t\t\t類的mro,class.mro()返回結果保存在__mro__中\t\t__dict__\t\t\t類或實例的屬性,可寫字典\t\t__subclasse', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 2, 'postTime': 1621813664000, 'createTime': 1621158785000, 'url': 'https://blog.csdn.net/Smart_look/article/details/116898412', 'articleType': 1, 'viewCount': 65, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '7 月前', 'title': 'Python:類魔術方法、反射、描述器', 'description': '類的特殊方法屬性\t\t\t含義\t\t__name__\t\t\t類、函數、方法等的名字\t\t__module__\t\t\t類定義所在的模塊明\t\t__class__\t\t\t對象或類所屬的類\t\t__bases__\t\t\t類的基類元組,順序為他們在基類列錶中出現的順序\t\t__doc__\t\t\t類、函數的文檔字符串,如果沒有定義則為None\t\t__mro__\t\t\t類的mro,class.mro()返回結果保存在__mro__中\t\t__dict__\t\t\t類或實例的屬性,可寫字典\t\t__subclasse', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 2, 'postTime': 1621158896000, 'createTime': 1620601220000, 'url': 'https://blog.csdn.net/Smart_look/article/details/116582336', 'articleType': 1, 'viewCount': 51, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '7 月前', 'title': 'Python:生成手機號碼數', 'description': '題目:編寫一個函數,該函數接受10個整數(0到9之間)的數組,該函數以電話號碼的形式返回這些數字的字符串。create_phone_number([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) # => returns "(123) 456-7890"解答:方案一def create_phone_number(list): #your code here return f"({list[0]}{list[1]}{list[2]})"+" " + f.', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1620575140000, 'createTime': 1620574550000, 'url': 'https://blog.csdn.net/Smart_look/article/details/116573174', 'articleType': 1, 'viewCount': 50, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '7 月前', 'title': 'Python:類的多繼承', 'description': '目錄Python不同版本的類多繼承多繼承弊端 Python多繼承實現多繼承的缺點MixinMixin類Python不同版本的類Python2.2之前是沒有共同的祖先的,之後引入Object類,它是所有類的共同祖先類Object\tPython2中為了兼容,分為古典類(舊式類)和新式類\tPython3中全部都是新式類\t新式類都是繼承自Object的,新式類可以使用super#古典類在python2.x中運行class A: passprint...', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 4, 'postTime': 1620556683000, 'createTime': 1620531937000, 'url': 'https://blog.csdn.net/Smart_look/article/details/116562797', 'articleType': 1, 'viewCount': 84, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '7 月前', 'title': 'Python:類的單繼承', 'description': '類的繼承面向對象三要素之一,繼承Inheritance人類和猫類都繼承自動物類。個體繼承自父母,繼承了父母的一部分特征,但也可以有自己的個性。在面向對象的世界中,從父類繼承,就可以直接擁有父類的屬性和方法,這樣就可以减少代碼、多服用。子類可以定義自己的屬性和方法class Animal: def __init__(self,name): self._name = name def shout(self): print("{} sh', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 2, 'postTime': 1620529315000, 'createTime': 1620340252000, 'url': 'https://blog.csdn.net/Smart_look/article/details/116475263', 'articleType': 1, 'viewCount': 90, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '8 月前', 'title': 'Python練習題 :隨機生成一批數', 'description': '1、題目:指定生成一批數的個數,並可以指定數的範圍"""1、隨機整數生成器可以指定一批生成的個數、可以指定數值的範圍、可以調整每批數字的個數"""import randomclass Random_integer: def __init__(self,count,integer_start= 1,integer_stop= 100): self.count = count self.integer_start = integer_start', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1619650522000, 'createTime': 1619649308000, 'url': 'https://blog.csdn.net/Smart_look/article/details/116254616', 'articleType': 1, 'viewCount': 64, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '8 月前', 'title': 'Python:面向對象', 'description': 'Python中一切皆對象面向對象的三要素封裝\t組裝:將數據和操作組裝到一起\t\t隱藏數據:對外暴露一些接口,通過接口訪問對象。比如駕駛員使用汽車,不需要了解汽車的構造細節,只需要知道怎麼使用部件,怎麼駕駛就行,踩了油門就能跑,可以不了解後面的激動原理\t...', 'hasOriginal': True, 'diggCount': 6, 'commentCount': 14, 'postTime': 1620225350000, 'createTime': 1619276972000, 'url': 'https://blog.csdn.net/Smart_look/article/details/116110162', 'articleType': 1, 'viewCount': 328, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '8 月前', 'title': 'Python:類型注解、inspect', 'description': '函數定義的弊端Python是動態語言,變量隨時可以被賦值,且能賦值為不同的類型Python不是靜態編譯型語言,變量類型是在運行器决定的動態語言很靈活,但是這種特性也是弊端def add(x,y): return x + yprint(add(1,2))print(add("Hello","Word"))print(add(1,"Word")) #Python是强類型這裏會報錯難發現:由於不做任何類型檢查,直到運行期問題才顯現出來,或者線上運行時才能暴露出問 題', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1619274568000, 'createTime': 1618639835000, 'url': 'https://blog.csdn.net/Smart_look/article/details/115794474', 'articleType': 1, 'viewCount': 62, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '8 月前', 'title': 'Python:funtools模塊、覆蓋被裝飾的函數模塊名、名稱、限定名、文檔、參數注解', 'description': "update_wrapperdef update_wrapper(wrapper, wrapped,assigned = WRAPPER_ASSIGNMENTS,updated = WRAPPER_UPDATES):類似copy_properties功能\twrapper 包裝函數、被更新者,wrapped 被包裝函數、數據源\t元組WRAPPER_ASSIGNMENTS中是要被覆蓋的屬性【'__module__', '__name__', '__qualname__', '__doc__', ", 'hasOriginal': True, 'diggCount': 0, 'commentCount': 1, 'postTime': 1618626697000, 'createTime': 1618064673000, 'url': 'https://blog.csdn.net/Smart_look/article/details/115585532', 'articleType': 1, 'viewCount': 61, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '8 月前', 'title': 'Python:函數 ----》裝飾器函數', 'description': '目錄引入裝飾器【無參】文檔字符串帶參裝飾器引入一個加法函數,想增强它的功能,能够輸出被調用過以及調用的參數信息def add(x, y): return x + y用嵌套函數、柯裏化來解决def add(x,y): return x + ydef logger(fn): def _loger(*args,**kwargs): print("函數開始運行") ret = fn(*args,**kw...', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1618064000000, 'createTime': 1618040074000, 'url': 'https://blog.csdn.net/Smart_look/article/details/115578004', 'articleType': 1, 'viewCount': 31, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '8 月前', 'title': 'Python:高階函數,柯裏化Currying', 'description': '高階函數First Class Object函數在Python中是一等公民\t函數也是對象,可調用的對象\t函數也是對象,可調用的對象高階函數數學概念 y=g(f(x))\t在數學和計算機學科中,高階函數應當是至少滿足下面一個條件的函數\t接受一個或多個函數作為參數\t\t輸出一個函數\t棧裏面存放的是,函數的變量,壓棧過程是有序的,堆裏面存放的是調用函數的對象的變量,是無序的內鍵高階函數【常用的】排序:sorted(iterable[, key][, reverse])返.', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 2, 'postTime': 1618039859000, 'createTime': 1618017927000, 'url': 'https://blog.csdn.net/Smart_look/article/details/115563679', 'articleType': 1, 'viewCount': 36, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '9 月前', 'title': 'Mysql:插入中文失敗,校對集問題(數據比較的方式)、Web亂碼問題', 'description': '目錄插入中文失敗校對集問題(數據比較的方式)Web亂碼插入中文失敗中文數據問題本質就是字符集問題計算機識別二進制:人類更多是識別符號:需要由兩個二進制與字符的對應關系(字符集)原因是:客戶端與服務端編不統一問題;服務器沒有識別對應的四個字節:服務器認為數據是UTF8,一個漢字有三個字節:讀取三個字節轉化成漢字(失敗),剩餘的讀在讀取三個字節(不够):最終失敗GBK:2個字節數是一個漢字UTF-8:3個字節數是一個漢字分析:1、查看服務器支持哪些字符集..', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1617628940000, 'createTime': 1617625715000, 'url': 'https://blog.csdn.net/Smart_look/article/details/115447579', 'articleType': 1, 'viewCount': 21, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '9 月前', 'title': 'Python:bytes、bytearray', 'description': "bytes、bytearrayPython3引入兩個新類型bytes:不可變字節序列\tbytearray:字節數組、可變字符串與bytes字符串是字符組成的有序序列,字符可以使用編碼來理解bytes是字節組成的有序的不可變序列bytearray是字節組成的有序的可變序列編碼與解碼字符串按照不同的字符集編碼encode返回字節序列bytesencode(encoding='utf-8', errors='strict') -> bytes字節序列...", 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1617539215000, 'createTime': 1617535131000, 'url': 'https://blog.csdn.net/Smart_look/article/details/115432113', 'articleType': 1, 'viewCount': 25, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '9 月前', 'title': 'Python:小數據池,深淺複制', 'description': '我們來看一個小知識點複制list1 = list(range(5))list2 = list(range(5))print(list1 == list2) #返回的是Trueprint(list1 is list2) #返回的是False【==】只是對值得比較 ;【is】是對內存地址的判斷賦值 【只是把內存的指針的發生了改變】這個過程有沒有發生複制?list1 = list(range(5))list2 = list(range(5))list...', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 1, 'postTime': 1617525869000, 'createTime': 1617449568000, 'url': 'https://blog.csdn.net/Smart_look/article/details/115419566', 'articleType': 1, 'viewCount': 36, 'rtype': 'article'}], 'total': None}}
{'code': 200, 'message': 'success', 'data': {'list': [{'type': 'blog', 'formatTime': '9 月前', 'title': 'Python:遞歸函數', 'description': '遞歸函數的定義:函數直接或間接調用自身就是遞歸\t遞歸函數需要有邊界、遞歸前進段、遞歸返回段\t遞歸一定要有邊界條件\t當邊界不滿足的時候,遞歸前進\t當邊界條件滿足的時候,遞歸返回斐波那契數列【用遞歸來實現】用for循環來看是怎麼寫的:...', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1616512305000, 'createTime': 1615987744000, 'url': 'https://blog.csdn.net/Smart_look/article/details/114950917', 'articleType': 1, 'viewCount': 25, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '10 月前', 'title': 'Docker:Docker安裝、基本命令', 'description': 'Docker體系Docker分為Docker-CE、Docker-EE,Docker-CE是社區版本免費\tDocker-EE是企業級版本是收費的這裏我們安裝的是Docke-CEyum源准備構建docker的yum源[[email protected] yum.repos.d]# curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo.', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1615206854000, 'createTime': 1615035730000, 'url': 'https://blog.csdn.net/Smart_look/article/details/114456982', 'articleType': 1, 'viewCount': 50, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '10 月前', 'title': 'Docker:簡介', 'description': '什麼是容器容器是指容納其他物品的工具,物體可以被放置在容器內,容器可以保護其中內容物;Linux容器發展之路容器技術的概念最初出現在 2000 年,當時稱為FreeBSD jail,這種技術可將FreeBSD系統分區為多個子系統(也稱為 Jail)。Jail 是作為安全環境而開發的,系統管理員可與企業內部或外部的多個用戶共享這些 Jail通過Jail技術在Linux中的實現這個項目被叫做VServer,在完成了這項針對 Linux 中多個受控制用戶空間的基礎性工作後,Linux ...', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1615034891000, 'createTime': 1615030093000, 'url': 'https://blog.csdn.net/Smart_look/article/details/114453172', 'articleType': 1, 'viewCount': 105, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '10 月前', 'title': 'Python:生成器函數,yield from', 'description': '引入生成器generator:生成器指的是生成器對象,可以由生成器錶達式得到,也可以使用yield關鍵字得到一個生成器函數,調用這個函數得到一個生成器對象生成器函數:函數體中包含yeild語句的函數,返回生成器對象\t生成器對象,是一個可迭代對象,是一個迭代器\t生成器對象,是延遲求值,惰性求值的yield與return的比較遇到yield,函數就會讓出此次操作,去執行函數體別的語句\treturn,直接打斷函數的執行,返回結果普通函數,生成器函數的比較例子一: 單個yiel', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1615020266000, 'createTime': 1614994340000, 'url': 'https://blog.csdn.net/Smart_look/article/details/114433902', 'articleType': 1, 'viewCount': 46, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '10 月前', 'title': 'Python:匿名函數 lambda', 'description': '匿名函數顧名思義:即沒有名字沒有名字那輸入調用這個函數?\t沒有名字如何調用?\t最關鍵的是如何使用這個函數?Python中是借助lambda錶達式構建匿名函數的尼?格式:【lambda 參數列錶 : 錶達式】lambda x : x * 2調用:(lambda x : x * 2 ) (4) 匿名函數:使用lambda 關鍵子來定義函數\t參數列錶不需要小括號\t冒號是用來分割參數列錶和錶達式的\t不需要使用return,錶達式的值就是匿名函數的錶達值\tlambda錶...', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 4, 'postTime': 1614870730000, 'createTime': 1614866305000, 'url': 'https://blog.csdn.net/Smart_look/article/details/114379049', 'articleType': 1, 'viewCount': 37, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '10 月前', 'title': '爬蟲:Chrome、Firefox 、IE、Selenium瀏覽器驅動下載安裝', 'description': 'Chrome webdriver下載下載地址:https://chromedriver.storage.googleapis.com/index.html查看自己的chrome瀏覽器的版本,於webdriver的驅動相同下載適合自己chrome瀏覽器的webdrvier', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1614699458000, 'createTime': 1614522728000, 'url': 'https://blog.csdn.net/Smart_look/article/details/114241485', 'articleType': 1, 'viewCount': 129, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '10 月前', 'title': 'Python:函數的銷毀', 'description': "全局函數銷毀方法一:重新定義同名函數def foo(a): return aprint(foo(1),id(foo),foo.__defaults__)def foo(a): return aprint(foo(1),id(foo),foo.__defaults__)結果:1 26875848 None 1 27317784 None函數的ID,不同,說明這是兩個不同的函數方法二:使用del 【報錯:NameError: name 'foo' .", 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1614518196000, 'createTime': 1614517493000, 'url': 'https://blog.csdn.net/Smart_look/article/details/114239956', 'articleType': 1, 'viewCount': 69, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '10 月前', 'title': 'Python:函數默認值的作用域【__defaults__】【__kwdefaults__】', 'description': '例子:引入def foo(abc=[]): abc.append(200) print(abc)foo()foo()結果:[200] [200, 200]第二次調用為什麼問什麼打印的是[ 200,200],而不是[ 200 ]?因為函數即對象,python把函數的默認值放在了屬性中,這個屬性就伴隨著這個函數對象的 整個生命周期,和abc這個變量沒有關系,abc調用玩就消失了\t可查看foo.__defaults__屬性查看例子:函數值的默認值是可變類型', 'hasOriginal': True, 'diggCount': 3, 'commentCount': 4, 'postTime': 1614516839000, 'createTime': 1614510814000, 'url': 'https://blog.csdn.net/Smart_look/article/details/114237347', 'articleType': 1, 'viewCount': 857, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '10 月前', 'title': 'Python:閉包函數,nonlocal使用', 'description': '嵌套函數:什麼是嵌套函數使用外部函數中變量def out(): x = 5 def inn(): print("inn函數中 x = {}".format(y)) print("out函數中 x = {}".format(x)) inn()out()結果:inn函數中 x = 5out函數中 x = 5內部函數是可以引用外部函數的變量【僅限於定義內部函數的外部函數】修改外部變量中函數def out(): x .', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 2, 'postTime': 1614482204000, 'createTime': 1614477811000, 'url': 'https://blog.csdn.net/Smart_look/article/details/114209891', 'articleType': 1, 'viewCount': 68, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '10 月前', 'title': 'Mysql:報錯:error while loading shared libraries: libaio.so.1:', 'description': '初始化msyql報錯:mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directorylibaio包的作用是為了支持同步I/O。對於數據庫之類的系統特別重要,因此在linux上安裝數據庫軟件,就需要安裝libaio一、解决問題根據提示沒有這個共享庫:libaio安裝libaio:[[email protected] yum.rep.', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 2, 'postTime': 1614395075000, 'createTime': 1614386992000, 'url': 'https://blog.csdn.net/Smart_look/article/details/114159717', 'articleType': 1, 'viewCount': 68, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '10 月前', 'title': 'Python:函數的變量作用域,global,變量使用原則', 'description': '作用域:一個標識符的可見範圍,這就是標識符的作用域。一般常說的是變量的作用域全局作用域:在整個程序運行環境中都可見x = 90def out(): print(x)out()結果:90局部作用域:在函數、類等內部可見,局部變量使用範圍不能超過其所在的局部作用域...', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 4, 'postTime': 1614476125000, 'createTime': 1614084497000, 'url': 'https://blog.csdn.net/Smart_look/article/details/114002733', 'articleType': 1, 'viewCount': 83, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '10 月前', 'title': 'OpenSSL:SSL會話、OpenSSL簡介、OpenSSL命令', 'description': '目錄話題引入:通信雙方通信時依賴與公鑰的,公鑰如何獲取?【證書頒發機構:頒發CA證書】\u200b公鑰的組成OpenSSL:開放源代碼的軟件庫包 ,包括三個組件OpenSSL命令對稱加密命令單項加密算法公鑰加密:話題引入:通信雙方通信時依賴與公鑰的,公鑰如何獲取?【證書頒發機構:頒發CA證書】其實這個CA證書有很多複雜信息在裏面,小黑要驗證這個證書是可靠的,小黑必須要有一種可靠的手段拿到CA證書,用CA的證書去驗證CA的簽名公鑰的組成PKI(Public Key In..', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1613919496000, 'createTime': 1613823629000, 'url': 'https://blog.csdn.net/Smart_look/article/details/113894506', 'articleType': 1, 'viewCount': 74, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '10 月前', 'title': 'OpenSSL:引入簡介', 'description': '美國NIST(美國國家標准與技術研究院)定義的網絡安全標准:保密性(數據保密性、隱私性)、完整性(數據完整性、系統完整性)、可用性(對與授權的第三方,要能還原到元數據)數據在傳輸中會收到安全攻擊,安全攻擊分為:被動攻擊(竊聽)、主動攻擊(偽裝、重放、消息篡改、拒絕服務)為了極高數據的安全防護:提到了一些列的安全機制:加密:數據加密,明文轉換為密文\t數字簽名:數字簽名的主要目的就是為了做身份認證的,收到消息後,確認對方的確是自己請求的服務器\t訪問控制:服務器未經允許拒絕任何人訪問,...', 'hasOriginal': True, 'diggCount': 3, 'commentCount': 14, 'postTime': 1613752152000, 'createTime': 1613743300000, 'url': 'https://blog.csdn.net/Smart_look/article/details/113872787', 'articleType': 1, 'viewCount': 1000, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '10 月前', 'title': 'DNS:Bind安全配置、視圖', 'description': 'Bind中的安全配置Bind支持ACL(訪問控制列錶)功能:主要實現把一個或多個地址歸並為一個集合,並通過一個統一的名稱調用格式:acl acl_name { ip; ip; net/prelen; };acl mynet { 192.168/43.0/16; }Bind中有四個內置的ACL:none...', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 4, 'postTime': 1613652192000, 'createTime': 1613623736000, 'url': 'https://blog.csdn.net/Smart_look/article/details/113844866', 'articleType': 1, 'viewCount': 233, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '10 月前', 'title': 'DNS:BIND高級應用、子域授權、區域轉發、全局轉發', 'description': 'BIND:子域授權子域授權是完成分布式數據庫的主要手段,DNS對全球解析的量太大了不能使用集中一臺服務器進行解析,最後使用把整個區域庫分成N部分,授權給不同服務器,自頂到下分成N級結構【最多有128級,每一級的字符到255個字符】正向解析區域子域方法: ops.node3.com. IN NS ns1.ops.node3.com. ops.ndoe3.com. IN NS n...', 'hasOriginal': True, 'diggCount': 1, 'commentCount': 0, 'postTime': 1613623397000, 'createTime': 1613398997000, 'url': 'https://blog.csdn.net/Smart_look/article/details/113820212', 'articleType': 1, 'viewCount': 164, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '10 月前', 'title': 'DNS:DNS與BIND 安裝配置,緩存服務器配置、正向配置、反向配置、主從複制', 'description': 'BIND:Bekerley Internat Name Domain, ISC (www.isc.org)BIND的安裝配置:dns服務,程序包名bind,程序名named程序包:bind:主程序\tbind-libs:通用庫文件\tbing-utils:客戶端工具【測試工具,】\tbind-chroot:把程序圈禁在一個小範圍中,訪問空間有限\tbind-devel:開發組件\tbind-dyndb:把文件放在非文件中,如:數據庫\tbind-sdb:把文件放在非文件中,如:數據庫需要安', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1613398446000, 'createTime': 1613266639000, 'url': 'https://blog.csdn.net/Smart_look/article/details/113805864', 'articleType': 1, 'viewCount': 173, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '10 月前', 'title': 'DNS:解析域資源記錄(A, AAAA, PTR, SOA, NS, CNAME, MX)', 'description': 'DNS簡介DNS:Domain Name Service,是一種協議,基於C/S架構,監聽與udp/53,tcp/53,在網絡七層中的應用層協議。網絡中通信時通過IP地址進行通信的,域名只是IP地址的標記,小範圍通信中,使用host文件解析配置可以的由於網絡中的站點眾多,每天新增的也很多,就出現的IANA,做域名解析本地名稱解析配置文件:hostsLinux:/etc/hosts\tWindows:C:\\Windows\\System32\\drivers\\etc\\hosts\t域名填寫格式', 'hasOriginal': True, 'diggCount': 1, 'commentCount': 0, 'postTime': 1613222690000, 'createTime': 1613180036000, 'url': 'https://blog.csdn.net/Smart_look/article/details/113799190', 'articleType': 1, 'viewCount': 753, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '10 月前', 'title': 'Linux:vim編輯器', 'description': '目錄vim編輯器簡介vim文件打開與關閉vim編輯器光標跳轉\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200bvim的編輯命令【删除、替換】\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b其它編輯操作\u200b\u200b\u200b\u200b\u200b\u200b\u200bvim中的末行模式【地址定界】\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b多文件模式【多窗口】\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b定制vim的工作特性【配置文件】\u200b\u200b\u200b\u200b\u200b\u200b\u200bvim編輯器簡介vi: Visual Interface,文本編輯器\tVIM - Vi IMproved\t文本格式:ASCII', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1612972462000, 'createTime': 1612880025000, 'url': 'https://blog.csdn.net/Smart_look/article/details/113776464', 'articleType': 1, 'viewCount': 43, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '11 月前', 'title': 'Python:函數參數傳參方式', 'description': '目錄函數定義、調用函數參數傳參函數參數可變參數傳參\u200b\u200b\u200b\u200b\u200b\u200b\u200b例子參數解構函數定義、調用def語句定義函數\tdef 函數名(參數列錶):\t 函數體(代碼塊)\t [return 返回值]\t函數名就是標識符,命名要求一樣\t\tPython的函數沒有return語句,隱式會返回一個None值\t\t定義中的參數列錶成為形式參數,只是一種符號錶達,簡稱形參\t\t調用\t調用的方式,就是函數名加上小括號,括號內寫上參數\t\t調用時寫的參數是實際參數,是實實在在傳...', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1612616867000, 'createTime': 1612575247000, 'url': 'https://blog.csdn.net/Smart_look/article/details/113710741', 'articleType': 1, 'viewCount': 408, 'rtype': 'article'}, {'type': 'blog', 'formatTime': '11 月前', 'title': 'Python:內置數據機構--> 元組', 'description': '元組一個有序的元素組成的集合,不可變對象\t支持索引(下標)\t\t正索引:從左至右,從0開始,\t\t負索引:從右至左\t\tt = ("woshi",1,3,"wobushi")print(t[0])print(t[-1])結果:woshiwobushi\t\t\t\t\t\t\t使用小括號 ( ) 錶示\t元組定義t_tuple = tuple()\tt_tuple = ()\tt_tuple = (1,) #必須加逗號,才錶示是元組元組的方法:index(value,[s...', 'hasOriginal': True, 'diggCount': 0, 'commentCount': 0, 'postTime': 1612271613000, 'createTime': 1612270847000, 'url': 'https://blog.csdn.net/Smart_look/article/details/113574111', 'articleType': 1, 'viewCount': 22, 'rtype': 'article'}], 'total': None}}

這樣我們就順利的通過分析Ajax來獲取數據了

版权声明:本文为[Amae]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201080639062533.html