主頁 > 後端開發 > Python實戰之如何爬取貓眼電影排行?本文詳解

Python實戰之如何爬取貓眼電影排行?本文詳解

2020-09-29 11:00:46 後端開發

本節中,我們利用requests庫和正則運算式來抓取貓眼電影TOP100的相關內容,requests比urllib使用更加方便,而且目前我們還沒有系統學習HTML決議庫,所以這里就選用正則運算式來作為決議工具,

1. 本節目標

本節中,我們要提取出貓眼電影TOP100的電影名稱、時間、評分、圖片等資訊,提取的站點URL為http://maoyan.com/board/4,提取的結果會以檔案形式保存下來,

2. 準備作業

在本節開始之前,請確保已經正確安裝好了requests庫,如果沒有安裝,可以參考第1章的安裝說明,

3. 抓取分析

我們需要抓取的目標站點為http://maoyan.com/board/4,打開之后便可以查看到榜單資訊,如圖3-11所示,
4.注意:光理論是不夠的,這里順便免費送大家一套2020最新python入門到高級專案實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,還可以跟老司機交流討教!

f7b78e2d92d43eea8459f7ccd466c16.png

排名第一的電影是霸王別姬,頁面中顯示的有效資訊有影片名稱、主演、上映時間、上映地區、評分、圖片等資訊,

將網頁滾動到最下方,可以發現有分頁的串列,直接點擊第2頁,觀察頁面的URL和內容發生了怎樣的變化,如圖3-12所示,

6b9997eb13b6015bec7cef904fc6e75.png

可以發現頁面的URL變成http://maoyan.com/board/4?offset=10,比之前的URL多了一個引數,那就是offset=10,而目前顯示的結果是排行11~20名的電影,初步推斷這是一個偏移量的引數,再點擊下一頁,發現頁面的URL變成了http://maoyan.com/board/4?offset=20,引數offset變成了20,而顯示的結果是排行21~30的電影,

由此可以總結出規律,offset代表偏移量值,如果偏移量為n,則顯示的電影序號就是n+1到n+10,每頁顯示10個,所以,如果想獲取TOP100電影,只需要分開請求10次,而10次的offset引數分別設定為0、10、20、…90即可,這樣獲取不同的頁面之后,再用正則運算式提取出相關資訊,就可以得到TOP100的所有電影資訊了,

4. 抓取首頁

接下來用代碼實作這個程序,首先抓取第一頁的內容,我們實作了get_one_page()方法,并給它傳入url引數,然后將抓取的頁面結果回傳,再通過main()方法呼叫,初步代碼實作如下:

import requests
def get_one_page(url):
    response = requests.get(url)
    if response.status_code == 200:
        return response.text
    return None
def main():
    url = 'http://maoyan.com/board/4'
    html = get_one_page(url)
    print(html)
main()

這樣運行之后,就可以成功獲取首頁的源代碼了,獲取源代碼后,就需要決議頁面,提取出我們想要的資訊,

5. 正則提取

接下來,回到網頁看一下頁面的真實原始碼,在開發者模式下的Network監聽組件中查看源代碼,如圖3-13所示,

d2c73975ba9bfcef6880106c60439fa.png

注意,這里不要在Elements選項卡中直接查看原始碼,因為那里的原始碼可能經過JavaScript操作而與原始請求不同,而是需要從Network選項卡部分查看原始請求得到的原始碼,

查看其中一個條目的源代碼,如圖3-14所示,

a397f4a9c48111c0673fcaab08384e9.png

可以看到,一部電影資訊對應的源代碼是一個dd節點,我們用正則運算式來提取這里面的一些電影資訊,首先,需要提取它的排名資訊,而它的排名資訊是在class為board-index的i節點內,這里利用非貪婪匹配來提取i節點內的資訊,正則運算式寫為:

<dd>.*?board-index.*?>(.*?)</i>

隨后需要提取電影的圖片,可以看到,后面有a節點,其內部有兩個img節點,經過檢查后發現,第二個img節點的data-src屬性是圖片的鏈接,這里提取第二個img節點的data-src屬性,正則運算式可以改寫如下:

<dd>.*?board-index.*?>(.*?)</i>.*?data-src="https://www.cnblogs.com/chengxuyuanaa/p/(.*?)"

再往后,需要提取電影的名稱,它在后面的p節點內,class為name,所以,可以用name做一個標志位,然后進一步提取到其內a節點的正文內容,此時正則運算式改寫如下:

<dd>.*?board-index.*?>(.*?)</i>.*?data-src="https://www.cnblogs.com/chengxuyuanaa/p/(.*?)".*?name.*?a.*?>(.*?)</a>

再提取主演、發布時間、評分等內容時,都是同樣的原理,最后,正則運算式寫為:

<dd>.*?board-index.*?>(.*?)</i>.*?data-src="https://www.cnblogs.com/chengxuyuanaa/p/(.*?)".*?name.*?a.*?>(.*?)</a>.*?star.*?>(.*?)</p>.*?releasetime.*?>
(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>.*?</dd>

這樣一個正則運算式可以匹配一個電影的結果,里面匹配了7個資訊,接下來,通過呼叫findall()方法提取出所有的內容,

接下來,我們再定義決議頁面的方法parse_one_page(),主要是通過正則運算式來從結果中提取出我們想要的內容,實作代碼如下:

def parse_one_page(html):
    pattern = re.compile(
        '<dd>.*?board-index.*?>(.*?)</i>.*?data-src="https://www.cnblogs.com/chengxuyuanaa/p/(.*?)".*?name.*?a.*?>(.*?)</a>.*?star.*?>(.*?)</p>.
        *?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>.*?</dd>',re.S)
    items = re.findall(pattern, html)
    print(items)

這樣就可以成功地將一頁的10個電影資訊都提取出來,這是一個串列形式,輸出結果如下:

[('1', 'http://p1.meituan.net/movie/20803f59291c47e1e116c11963ce019e68711.jpg@160w_220h_1e_1c', '霸王別姬', '

主演:張國榮,張豐毅,鞏俐

', '上映時間:1993-01-01(中國香港)', '9.', '6'),
('2', 'http://p0.meituan.net/movie/__40191813__4767047.jpg@160w_220h_1e_1c', '肖申克的救贖', '

主演:蒂姆·羅賓斯,摩根·弗里曼,鮑勃·岡頓

', '上映時間:1994-10-14(美國)', '9.', '5'),
('3', 'http://p0.meituan.net/movie/fc9d78dd2ce84d20e53b6d1ae2eea4fb1515304.jpg@160w_220h_1e_1c', '這個殺手不太冷', '

主演:讓·雷諾,加里·奧德曼,娜塔莉·波特曼

', '上映時間:1994-09-14(法國)', '9.', '5'), 
('4', 'http://p0.meituan.net/movie/23/6009725.jpg@160w_220h_1e_1c', '羅馬假日', '

主演:格利高利·派克,奧黛麗·赫本,埃迪·艾伯特

', '上映時間:1953-09-02(美國)', '9.', '1'), 
('5', 'http://p0.meituan.net/movie/53/1541925.jpg@160w_220h_1e_1c', '阿甘正傳', '

主演:湯姆·漢克斯,羅賓·懷特,加里·西尼斯

', '上映時間:1994-07-06(美國)', '9.', '4'), 
('6', 'http://p0.meituan.net/movie/11/324629.jpg@160w_220h_1e_1c', '泰坦尼克號', '

主演:萊昂納多·迪卡普里奧,凱特·溫絲萊特,比利·贊恩

', '上映時間:1998-04-03', '9.', '5'), 
('7', 'http://p0.meituan.net/movie/99/678407.jpg@160w_220h_1e_1c', '龍貓', '

主演:日高法子,坂本千夏,糸井重里

', '上映時間:1988-04-16(日本)', '9.', '2'), 
('8', 'http://p0.meituan.net/movie/92/8212889.jpg@160w_220h_1e_1c', '教父', '

主演:馬龍·白蘭度,阿爾·帕西諾,詹姆斯·凱恩

', '上映時間:1972-03-24(美國)', '9.', '3'), 
('9', 'http://p0.meituan.net/movie/62/109878.jpg@160w_220h_1e_1c', '唐伯虎點秋香', '

主演:周星馳,鞏俐,鄭佩佩

', '上映時間:1993-07-01(中國香港)', '9.', '2'), 
('10', 'http://p0.meituan.net/movie/9bf7d7b81001a9cf8adbac5a7cf7d766132425.jpg@160w_220h_1e_1c', '千與千尋', '

主演:柊瑠美,入野自由,夏木真理

', '上映時間:2001-07-20(日本)', '9.', '3')]

但這樣還不夠,資料比較雜亂,我們再將匹配結果處理一下,遍歷提取結果并生成字典,此時方法改寫如下:

def parse_one_page(html):
    pattern = re.compile(
        '<dd>.*?board-index.*?>(.*?)</i>.*?data-src="https://www.cnblogs.com/chengxuyuanaa/p/(.*?)".*?name.*?a.*?>(.*?)</a>.*?star.*?>(.*?)</p>
        .*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>.*?fraction.*?>(.*?)</i>.*?</dd>',re.S)
    items = re.findall(pattern, html)
    for item in items:
        yield {
            'index': item[0],
            'image': item[1],
            'title': item[2].strip(),
            'actor': item[3].strip()[3:] if len(item[3]) > 3 else '',
            'time': item[4].strip()[5:] if len(item[4]) > 5 else '',
            'score': item[5].strip() + item[6].strip()
        }

這樣就可以成功提取出電影的排名、圖片、標題、演員、時間、評分等內容了,并把它賦值為一個個的字典,形成結構化資料,運行結果如下:

{'image': 'http://p1.meituan.net/movie/20803f59291c47e1e116c11963ce019e68711.jpg@160w_220h_1e_1c', 'actor': 
'張國榮,張豐毅,鞏俐', 'score': '9.6', 'index': '1', 'title': '霸王別姬', 'time': '1993-01-01(中國香港)'}
{'image': 'http://p0.meituan.net/movie/__40191813__4767047.jpg@160w_220h_1e_1c', 'actor': 
'蒂姆·羅賓斯,摩根·弗里曼,鮑勃·岡頓', 'score': '9.5', 'index': '2', 'title': 
'肖申克的救贖', 'time': '1994-10-14(美國)'}
{'image': 'http://p0.meituan.net/movie/fc9d78dd2ce84d20e53b6d1ae2eea4fb1515304.jpg@160w_220h_1e_1c', 'actor': 
'讓·雷諾,加里·奧德曼,娜塔莉·波特曼', 'score': '9.5', 'index': '3', 'title': '這個殺手不太冷', 'time': 
'1994-09-14(法國)'}
{'image': 'http://p0.meituan.net/movie/23/6009725.jpg@160w_220h_1e_1c', 'actor': 
'格利高利·派克,奧黛麗·赫本,埃迪·艾伯特', 'score': '9.1', 'index': '4', 'title': '羅馬假日', 'time': 
'1953-09-02(美國)'}
{'image': 'http://p0.meituan.net/movie/53/1541925.jpg@160w_220h_1e_1c', 'actor': 
'湯姆·漢克斯,羅賓·懷特,加里·西尼斯', 'score': '9.4', 'index': '5', 'title': '阿甘正傳', 'time': 
'1994-07-06(美國)'}
{'image': 'http://p0.meituan.net/movie/11/324629.jpg@160w_220h_1e_1c', 'actor': 
'萊昂納多·迪卡普里奧,凱特·溫絲萊特,比利·贊恩', 'score': '9.5', 'index': '6', 'title': '泰坦尼克號', 'time': 
'1998-04-03'}
{'image': 'http://p0.meituan.net/movie/99/678407.jpg@160w_220h_1e_1c', 'actor': 
'日高法子,坂本千夏,糸井重里', 'score': '9.2', 'index': '7', 'title': '龍貓', 'time': '1988-04-16(日本)'}
{'image': 'http://p0.meituan.net/movie/92/8212889.jpg@160w_220h_1e_1c', 'actor': 
'馬龍·白蘭度,阿爾·帕西諾,詹姆斯·凱恩', 'score': '9.3', 'index': '8', 'title': '教父', 'time': '1972-03-24(美國)'}
{'image': 'http://p0.meituan.net/movie/62/109878.jpg@160w_220h_1e_1c', 'actor': 
'周星馳,鞏俐,鄭佩佩', 'score': '9.2', 'index': '9', 'title': '唐伯虎點秋香', 'time': '1993-07-01(中國香港)'}
{'image': 'http://p0.meituan.net/movie/9bf7d7b81001a9cf8adbac5a7cf7d766132425.jpg@160w_220h_1e_1c', 
'actor': '柊瑠美,入野自由,夏木真理', 'score': '9.3', 'index': '10', 'title': '千與千尋', 'time': '2001-07-20(日本)'}

到此為止,我們就成功提取了單頁的電影資訊,

6. 寫入檔案

隨后,我們將提取的結果寫入檔案,這里直接寫入到一個文本檔案中,這里通過JSON庫的dumps()方法實作字典的序列化,并指定ensure_ascii引數為False,這樣可以保證輸出結果是中文形式而不是Unicode編碼,代碼如下:

def write_to_json(content):
    with open('result.txt', 'a') as f:
        print(type(json.dumps(content)))
        f.write(json.dumps(content, ensure_ascii=False,).encode('utf-8'))

通過呼叫write_to_json()方法即可實作將字典寫入到文本檔案的程序,此處的content引數就是一部電影的提取結果,是一個字典,

7. 整合代碼

最后,實作main()方法來呼叫前面實作的方法,將單頁的電影結果寫入到檔案,相關代碼如下:

def main():
    url = 'http://maoyan.com/board/4'
    html = get_one_page(url)
    for item in parse_one_page(html):
        write_to_json(item)

到此為止,我們就完成了單頁電影的提取,也就是首頁的10部電影可以成功提取并保存到文本檔案中了,

8. 分頁爬取

因為我們需要抓取的是TOP100的電影,所以還需要遍歷一下,給這個鏈接傳入offset引數,實作其他90部電影的爬取,此時添加如下呼叫即可:

if __name__ == '__main__':
    for i in range(10):
        main(offset=i * 10)

這里還需要將main()方法修改一下,接收一個offset值作為偏移量,然后構造URL進行爬取,實作代碼如下:

def main(offset):
    url = 'http://maoyan.com/board/4?offset=' + str(offset)
    html = get_one_page(url)
    for item in parse_one_page(html):
        print(item)
        write_to_file(item)

到此為止,我們的貓眼電影TOP100的爬蟲就全部完成了,再稍微整理一下,完整的代碼如下:

import json
import requests
from requests.exceptions import RequestException
import re
import time
def get_one_page(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        return None
def parse_one_page(html):
    pattern = re.compile('<dd>.*?board-index.*?>(d+)</i>.*?data-src="https://www.cnblogs.com/chengxuyuanaa/p/(.*?)".*?name"><a'
                         + '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
                         + '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)
    items = re.findall(pattern, html)
    for item in items:
        yield {
            'index': item[0],
            'image': item[1],
            'title': item[2],
            'actor': item[3].strip()[3:],
            'time': item[4].strip()[5:],
            'score': item[5] + item[6]
        }
def write_to_file(content):
    with open('result.txt', 'a', encoding='utf-8') as f:
        f.write(json.dumps(content, ensure_ascii=False) + '
')
def main(offset):
    url = 'http://maoyan.com/board/4?offset=' + str(offset)
    html = get_one_page(url)
    for item in parse_one_page(html):
        print(item)
        write_to_file(item)
if __name__ == '__main__':
    for i in range(10):
        main(offset=i * 10)
        time.sleep(1)

現在貓眼多了反爬蟲,如果速度過快,則會無回應,所以這里又增加了一個延時等待,

9. 運行結果

最后,我們運行一下代碼,輸出結果類似如下:

{'index': '1', 'image': 'http://p1.meituan.net/movie/20803f59291c47e1e116c11963ce019e68711.jpg@160w_220h_1e_1c', 
'title': '霸王別姬', 'actor': '張國榮,張豐毅,鞏俐', 'time': '1993-01-01(中國香港)', 'score': '9.6'}
{'index': '2', 'image': 'http://p0.meituan.net/movie/__40191813__4767047.jpg@160w_220h_1e_1c', 'title': 
'肖申克的救贖', 'actor': '蒂姆·羅賓斯,摩根·弗里曼,鮑勃·岡頓', 'time': '1994-10-14(美國)', 'score': '9.5'}
...
{'index': '98', 'image': 'http://p0.meituan.net/movie/76/7073389.jpg@160w_220h_1e_1c', 'title': '東京物語', 
'actor': '笠智眾,原節子,杉村春子', 'time': '1953-11-03(日本)', 'score': '9.1'}
{'index': '99', 'image': 'http://p0.meituan.net/movie/52/3420293.jpg@160w_220h_1e_1c', 'title': '我愛你', 
'actor': '宋在河,李彩恩,吉海延', 'time': '2011-02-17(韓國)', 'score': '9.0'}
{'index': '100', 'image': 'http://p1.meituan.net/movie/__44335138__8470779.jpg@160w_220h_1e_1c', 'title': 
'遷徙的鳥', 'actor': '雅克·貝漢,菲利普·拉波洛,Philippe Labro', 'time': '2001-12-12(法國)', 'score': '9.1'}

這里省略了中間的部分輸出結果,可以看到,這樣就成功地把TOP100的電影資訊爬取下來了,

這時我們再看下文本檔案,結果如圖3-15所示,

4c70c2f60cd0bb44802eb3fe4baabc3.png

可以看到,電影資訊也已全部保存到了文本檔案中了,大功告成!

10. 本節代碼

本節的代碼地址為https://github.com/Python3WebSpider/MaoYan,

最后注意:光理論是不夠的,這里順便免費送大家一套2020最新python入門到高級專案實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,還可以跟老司機交流討教!

本文的文字及圖片來源于網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/138084.html

標籤:Python

上一篇:根據json串動態生成Bean

下一篇:Python如何繪制可視化圖?給你一段代碼,你能自己做出來嗎

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more