主頁 > 後端開發 > 大眾點評封ip,還字體加密?我直呼,就這啊!

大眾點評封ip,還字體加密?我直呼,就這啊!

2021-02-06 11:55:42 後端開發

像舊巷子里的貓,我很自由,但沒有歸宿

在這里插入圖片描述
假如csdn有創作激勵該多好,那樣就可以天天"水"博客了!

哈嘍,大家好,上期給大家伙分享了一期微博資料的爬取
Python爬取微博評論資料,竟被反爬封號了!

小夜斗花了將近5天滴時間肝出了一期與大眾點評斗智斗勇的一期,其實也沒那么久,思路其實挺清晰滴,就其中一些小的細節處理挺費勁的!詳細原始碼大家可以看文末自行獲取!

Python破解大眾點評字體加密

這期核心反爬措施是: 大眾點評這個網址的字體資訊專門保存在了一個文字字典當中,需要你根據字體的位置從這個文字字典中獲取!

一:獲取網頁html文本資訊與映射串列

在這里插入圖片描述

上圖為小夜斗將要抓取滴一個評論資訊,它在網頁原始碼中顯示如下:有些文字資訊并沒有直接加載出來,需要我們將其破解出來
在這里插入圖片描述

讓我們寫一段爬取網頁html原始碼滴代碼, url為評論區點擊更多后顯示的網頁地址!(請注意大眾點評對請求頭的反爬機制非常嚴重,如果沒有評論資訊可能就是請求頭的問題!)
在這里插入圖片描述
這段代碼我們需要做的是獲取每一個字體對應的隱射類屬性以及整個html網頁源代碼,具體代碼如下所示:

#coding:utf8
import requests
import re
from lxml import etree


# TODO: 評論區的資訊并沒有加載到網頁當中(請求頭問題)
# 請求頭
headers = {
            'Connection': 'keep-alive',
            'Host': 'www.dianping.com',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
            'Cookie': '_lxsdk_cuid=173ec1d725e80-001e5367555543-7e647c65-1fa400-173ec1d725fc8; _lxsdk=173ec1d725e80-001e5367555543-7e647c65-1fa400-173ec1d725fc8; _hc.v=9a0b663c-e5a8-7e01-077a-b8d4d7220afa.1597394220; s_ViewType=10; fspop=test; dper=7c9cd1b645ff07fe1fd65310a52d0eca184842b7256f2ef6b5bcb5de6f1d50d57f591dac67305a8997d64b4f32f280b3bb2f74d58210d10a0fcc57a335a1c1618e36e6a24b0e7784c40ef3a2583a5b8c7a65df07c94c25578fa6e7223abeec06; ua=dpuser_5191363077; ctu=d2a46ed772193566de2cd33b3ff8ea407fbae2e64a575314195403e2ec7f168a; cy=2; cye=beijing; ll=7fd06e815b796be3df069dec7836c3df; _lx_utm=utm_source%3Dwww.sogou%26utm_medium%3Dorganic; Hm_lvt_602b80cf8079ae6591966cc70a3940e7=1612071553,1612071565,1612071610,1612092249; dplet=e77caddcb23d0ee50d83ede34e65a5da; Hm_lpvt_602b80cf8079ae6591966cc70a3940e7=1612102455; _lxsdk_s=17758c69b55-16e-a09-efe%7C%7C173'
}

# 網址
url = 'http://www.dianping.com/shop/H9FNPpCqj1Tu98oD/review_all'

# 發起請求
r = requests.get(url=url, headers=headers)
# 如果狀態碼為200顯示正常
if r.status_code == 200:
    print("訪問成功")
    text = r.text.encode("gbk", "ignore").decode("gbk", "ignore")  # 解決報錯雙重嚴格限制
    print(text)
    # 轉換為xpath物件
    tree = etree.HTML(text)
    # 保存所有字體類隱射屬性
    class_list = []
    # 字體映射串列串列屬性
    svgmtsi_list = tree.xpath(r'//div[@class="main-review"]/div[@class="review-truncated-words"]/svgmtsi/@class')
    print(len(svgmtsi_list))
    for svgmtsi in svgmtsi_list:
        class_list.append(svgmtsi)
    print(class_list)
    # 保存網頁原始碼
    # with open('網頁源代碼.html', 'w', encoding='utf8') as f:
    #     f.write(text)
else:
     print("被反爬了!小夜斗趕緊跑路!")

成功獲取到評論區的html原始碼以及字體映射的類屬性,看了一下(原始碼內部是有文本資訊的)

在這里插入圖片描述
在這里插入圖片描述

二:找到存放字體資訊滴css檔案

要找到隱射關系,首先咋們得獲取到css檔案,獲取其字體資訊
在這里插入圖片描述
代碼如下:

#coding:utf8
import requests
import re
from lxml import etree


# TODO: 評論區的資訊并沒有加載到網頁當中(請求頭問題)
# 請求頭
headers = {
            'Connection': 'keep-alive',
            'Host': 'www.dianping.com',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
            'Cookie': '_lxsdk_cuid=173ec1d725e80-001e5367555543-7e647c65-1fa400-173ec1d725fc8; _lxsdk=173ec1d725e80-001e5367555543-7e647c65-1fa400-173ec1d725fc8; _hc.v=9a0b663c-e5a8-7e01-077a-b8d4d7220afa.1597394220; s_ViewType=10; fspop=test; dper=7c9cd1b645ff07fe1fd65310a52d0eca184842b7256f2ef6b5bcb5de6f1d50d57f591dac67305a8997d64b4f32f280b3bb2f74d58210d10a0fcc57a335a1c1618e36e6a24b0e7784c40ef3a2583a5b8c7a65df07c94c25578fa6e7223abeec06; ua=dpuser_5191363077; ctu=d2a46ed772193566de2cd33b3ff8ea407fbae2e64a575314195403e2ec7f168a; cy=2; cye=beijing; ll=7fd06e815b796be3df069dec7836c3df; _lx_utm=utm_source%3Dwww.sogou%26utm_medium%3Dorganic; Hm_lvt_602b80cf8079ae6591966cc70a3940e7=1612071553,1612071565,1612071610,1612092249; dplet=e77caddcb23d0ee50d83ede34e65a5da; Hm_lpvt_602b80cf8079ae6591966cc70a3940e7=1612102455; _lxsdk_s=17758c69b55-16e-a09-efe%7C%7C173'
}

headers2 = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
}
# 網址
url = 'http://www.dianping.com/shop/H9FNPpCqj1Tu98oD/review_all'

# 發起請求
r = requests.get(url=url, headers=headers)
# 如果狀態碼為200顯示正常
if r.status_code == 200:
    print("訪問成功")
    text = r.text.encode("gbk", "ignore").decode("gbk", "ignore")  
    css_url = re.search('<link rel="stylesheet" type="text/css" href="(//s3plus.meituan.*?)"', text)[1]
    # 拼接css_rul
    total_css_url = 'http:' + css_url
    print(total_css_url)
    # TODO: 404 r1,換個請求頭
    r1 = requests.get(url=total_css_url, headers=headers2)
    print(r1.status_code)
    text1 = r1.text.encode("gbk", "ignore").decode("gbk", "ignore")  # 解決報錯雙重嚴格限制
    # 保存css檔案
    print("我進來了保存了!")
    with open('css字體映射.css', 'w', encoding='utf8') as f:
         f.write(text1)
    # 保存css檔案
else:
     print("被反爬了!小夜斗趕緊跑路!")

pycharm中css檔案弄了很久格式化不了,就轉到java滴ideal中顯示,結果如下圖所示,每個字體的資訊都保存在這個css檔案中!
在這里插入圖片描述

二:找到字體css樣式中滴url鏈接

字體css中對應者下了圖中url, 通過一種映射關系能夠將其找到!
在這里插入圖片描述
將url復制到網頁中顯示的內容如下所示:

在這里插入圖片描述
寫一個正則匹配出字體樣式中的url鏈接,代碼如下所示:

在這里插入圖片描述

#coding:utf8
import requests
import re
from lxml import etree


# TODO: 評論區的資訊并沒有加載到網頁當中(請求頭問題)
# 請求頭
headers = {
            'Connection': 'keep-alive',
            'Host': 'www.dianping.com',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
            'Cookie': '_lxsdk_cuid=173ec1d725e80-001e5367555543-7e647c65-1fa400-173ec1d725fc8; _lxsdk=173ec1d725e80-001e5367555543-7e647c65-1fa400-173ec1d725fc8; _hc.v=9a0b663c-e5a8-7e01-077a-b8d4d7220afa.1597394220; s_ViewType=10; fspop=test; dper=7c9cd1b645ff07fe1fd65310a52d0eca184842b7256f2ef6b5bcb5de6f1d50d57f591dac67305a8997d64b4f32f280b3bb2f74d58210d10a0fcc57a335a1c1618e36e6a24b0e7784c40ef3a2583a5b8c7a65df07c94c25578fa6e7223abeec06; ua=dpuser_5191363077; ctu=d2a46ed772193566de2cd33b3ff8ea407fbae2e64a575314195403e2ec7f168a; cy=2; cye=beijing; ll=7fd06e815b796be3df069dec7836c3df; _lx_utm=utm_source%3Dwww.sogou%26utm_medium%3Dorganic; Hm_lvt_602b80cf8079ae6591966cc70a3940e7=1612071553,1612071565,1612071610,1612092249; dplet=e77caddcb23d0ee50d83ede34e65a5da; Hm_lpvt_602b80cf8079ae6591966cc70a3940e7=1612102455; _lxsdk_s=17758c69b55-16e-a09-efe%7C%7C173'
}

headers2 = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
}
# 網址
url = 'http://www.dianping.com/shop/H9FNPpCqj1Tu98oD/review_all'

# 發起請求
r = requests.get(url=url, headers=headers)
# 如果狀態碼為200顯示正常
if r.status_code == 200:
    print("訪問成功")
    text = r.text.encode("gbk", "ignore").decode("gbk", "ignore")  # 解決報錯雙重嚴格限制 
    # 獲取存放映射關系css鏈接
    css_url = re.search('<link rel="stylesheet" type="text/css" href="(//s3plus.meituan.*?)"', text)[1]
    # 拼接css_rul
    total_css_url = 'http:' + css_url
    print(total_css_url)
    # TODO: 404 r1,換個請求頭
    r1 = requests.get(url=total_css_url, headers=headers2)
    print(r1.status_code)
    text1 = r1.text.encode("gbk", "ignore").decode("gbk", "ignore")  # 解決報錯雙重嚴格限制
    '''
    svgmtsi[
    class ^="iz"] {
    width: 14
    px;
    height: 24
    px;
    margin - top: -14
    px;
    background - image: url( // s3plus.meituan.net / v1 / mss_0a06a47… / svgtextcss / 60
    ff9a5….svg);
    background - repeat: no - repeat;
    display: inline - block;
    vertical - align: middle;
    }
    '''
    # svgmtsi[class^="iz"]{width: 14px;height: 24px;margin-top: -14px;background-image: url(//s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/60ff9a50fd0d7753c8ebc0178004f283.svg)
    # \:轉譯符號
    svg_url = re.findall(r'svgmtsi\[class\^="iz"\].*?background-image: url\((.*?)\)', text1)
    # print(svg_url)
    # 加一個http
    total_svg_url = 'http:' + svg_url[0]
    print(total_svg_url)
else:
     print("被反爬了!小夜斗趕緊跑路!")

獲取到字體映射字典后我們可以查看其網頁源代碼,每一行文字都有其對應的屬性y,這個屬性是我們找字體位置所在行數的關鍵資訊,我們可以看到每一行這個屬性是升序的
ps:

ps: 大眾點評滴網址好像每天都在變,上面這個代碼運行的話需要改一個引數,今天小夜斗在看這個網址的時候已經是svg_rul, 注意class里面的引數改變了,大家自己也可以查一下自己網址對應的class引數,大眾點評還是挺狡猾滴,順便提一下,cookie引數也要是全部評論網頁滴那個cookie,大眾點評每個網址cookie引數也不同····你得把最新的cookie給弄到自己的pycharm代碼請求頭上去!
在這里插入圖片描述
在這里插入圖片描述

讓我們先來找一個單個的子,如下圖所示:“

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

這個文字有效資訊為(負號加絕對值后):寬14像素、所在行數高度最少為2332px(即要找到第一個比2332大的行高(y屬性的值)即為該字體所在的行),252px代表這個的x值,x/寬可計算出字體的位置

在這里插入圖片描述
從零開始數,第18個位置(看y=2355這一行)就是“”這個字:

在這里插入圖片描述

下面讓小夜斗寫個代碼把這些文本資料爬取下來吧

#coding:utf8
import requests
import re
from lxml import etree
import random
import parsel

ip_list = [
    {'http': 'http://8.135.103.42:80'},
    {'http': 'http://112.80.248.75:80'},
    {'http': 'http://117.185.17.145:80'},
    {'http': 'http://140.207.229.170:80'},
    {'http': 'http://113.214.13.1:1080'}
    ]

# TODO: 評論區的資訊并沒有加載到網頁當中(請求頭問題)
# 每一個網頁中的cookie都是不同滴
# 請求頭
headers = {
            'Connection': 'keep-alive',
            'Host': 'www.dianping.com',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
            'Cookie': 'Cookie: _lxsdk_cuid=173ec1d725e80-001e5367555543-7e647c65-1fa400-173ec1d725fc8; _lxsdk=173ec1d725e80-001e5367555543-7e647c65-1fa400-173ec1d725fc8; _hc.v=9a0b663c-e5a8-7e01-077a-b8d4d7220afa.1597394220; s_ViewType=10; fspop=test; ua=dpuser_5191363077; ctu=d2a46ed772193566de2cd33b3ff8ea407fbae2e64a575314195403e2ec7f168a; cy=2; cye=beijing; cityid=1409; default_ab=shopreviewlist%3AA%3A1; _lx_utm=utm_source%3Dwww.sogou%26utm_medium%3Dorganic; Hm_lvt_602b80cf8079ae6591966cc70a3940e7=1612158059,1612158139,1612166936,1612327052; thirdtoken=db6b0a0e-c710-4b3f-a083-b9fed37ad4fd; dper=7c9cd1b645ff07fe1fd65310a52d0eca3f820f2c408bac5cbe1065d16321ba289d73446448580d71587a5ef790a7f2171b96ef8e556a5adbae82a31a5ce5d975815bfa8720f6cad4c9ebca38ab510dfc842471b9d4044afbb67beed0a2748fe3; ll=7fd06e815b796be3df069dec7836c3df; ctu=e8d18ba96a5973c4241e98ea92e6ef18f2b6806cefea83baee63e0dc52d6474b79afc8e7246462cc70d0c6c9c0b01d74; dplet=186d217716bb58d41809c4132e4b1188; Hm_lpvt_602b80cf8079ae6591966cc70a3940e7=1612327415; _lxsdk_s=177662e6072-ce-65b-a68%7C%7C212'
}

headers2 = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
}

headers3 = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
# 網址
url = 'http://www.dianping.com/shop/H9FNPpCqj1Tu98oD/review_all'

# 發起請求
r = requests.get(url=url, headers=headers, proxies=ip_list.pop(random.randint(0, len(ip_list)-1)))
# 如果狀態碼為200顯示正常
if r.status_code == 200:
    print("訪問成功")
    text = r.text.encode("gbk", "ignore").decode("gbk", "ignore")  # 解決報錯雙重嚴格限制
    print(text)
    # 獲取存放映射關系css鏈接
    css_url = re.search('<link rel="stylesheet" type="text/css" href="(//s3plus.meituan.*?)"', text)[1]
    # 拼接css_rul
    total_css_url = 'http:' + css_url
    print(total_css_url)
    # TODO: 404 r1,換個請求頭
    r1 = requests.get(url=total_css_url, headers=headers2)
    print(r1.status_code)
    text1 = r1.text.encode("gbk", "ignore").decode("gbk", "ignore")  # 解決報錯雙重嚴格限制
    # 保存css檔案
    # \:轉譯符號
    svg_url = re.findall(r'svgmtsi\[class\^="xsw"\].*?background-image: url\((.*?)\)', text1)
    # print(svg_url)
    # 加一個http
    total_svg_url = 'http:' + svg_url[0]
    print(total_svg_url)
    # 獲取所有的文本資訊
    r2 = requests.get(url=total_svg_url, headers=headers3)
    text2 = r2.text.encode("gbk", "ignore").decode("gbk", "ignore")

    select = parsel.Selector(text2)

    # 找到所有的text標簽
    content_list = select.css('text')
    # print(content_list)
    # 新建一個空字典
    y_text_dict = {}
    for content in content_list:
        # 獲取文本
        # print(content.css("text::text").get())
        line_text = content.css("text::text").get()
        # 獲取y屬性
        # print(content.css("text::attr(y)").get())
        line_y = content.css("text::attr(y)").get()
        # 保存到字典當中(高度y當作建,內容文本當作值)
        y_text_dict[line_y] = line_text
    print(y_text_dict)
        

else:
     print("被反爬了!小夜斗趕緊跑路!")

結果如下圖所示:

在這里插入圖片描述
這個代碼小夜斗新添加了ip代理池(其實就是隨便復制粘貼了幾個能用的代理放到串列里面,然后隨機取出其中一個,如果真滴訪問量大的小伙伴不建議和小夜斗一樣這么做哈!)然后在將其保存到字典中來!
在這里插入圖片描述
以上,我們就拿到了我們想要拿到滴css檔案、映射文字的字典資訊

三:字體映射關系找到字體所在位置

在這里插入圖片描述

首先還得先拿到字體的資訊(字體大小width但這個大多是個定值、背景高度y、背景橫軸x),從上圖中可以看出直接從css檔案中拿就行,直接上代碼!

# 獲取svg字體資訊
def svg_character(name_class_list, y_text_dict):
    # 拿到這個類名對應的字體的高度
    character_list = []
    for name_class in name_class_list:
        try:
            y = back_dict[name_class][1]
            # print(f'y:{y}')
            # 拿到這個類名對應的字體的x軸
            x = back_dict[name_class][0]
        except:
            print('error')

        # print(f'x:{x}')
        # 找對應的行數
        # 找對應的行數
        for index in y_text_dict.keys():
            # 第一個比y大的行數
            # print(index)
            if int(index) > int(y):
                # 計算x的位置, 14為字體的大小
                position = int(int(x) / 14)
                # print(position)
                # 從index這一行獲取這個字體資訊
                find_it = y_text_dict[index][position]
                # print(y_text_dict[index])
                # print(find_it, end="->")
                character_list.append(find_it)
                # 找到后跳出
                break
    # print(character_list)
    return character_list
# 正則匹配類名、x坐標、y坐標
background_name_list = re.findall(r'\.(.*?){background:-(.*?).0px -(.*?)\.0px;}', text1)
print(f'background_name_list: {background_name_list}')

在這里插入圖片描述

大眾點評可真行,網頁上同一段評論加載下來滴頁面竟然三個都不一樣!牛的牛的!簡直不要太混亂了吧!

在這里插入圖片描述
頁面一:

在這里插入圖片描述
頁面二:

在這里插入圖片描述
頁面三:

在這里插入圖片描述
問題不大,經過小夜斗一番瞎操作最后哈哈成功了,來先上圖!絲毫不變的給大眾點評上了一課,就這就這?大快人心!

串列里面的內容就是小夜斗爬下來的內容
在這里插入圖片描述
這是原評論,大家可以仔細對比一下哈!

在這里插入圖片描述
哦對了,小夜斗發現大眾點評有兩種svg格式的字體反爬,每天都是換著來的!遇到那種textlength屬性的,那個y值就是<path標簽里面那個d屬性里面被包著的那個數值,就是那個45、92等等!問題不大!文本還是那個文本!
在這里插入圖片描述

兩種映射字體文本獲取,代碼如下:

# 映射文本獲取
def mapping_text(flag):
    # 請求鏈接
    url = css_info()[0]
    print(url)
    # 回傳文本
    text2 = post_request(url)
    # 第一種字體格式
    if flag == '2':
        select = parsel.Selector(text2)
        # 找到所有的text標簽
        content_list = select.css('text')
        # 存放資訊滴字典
        y_text_dict = {}
        for content in content_list:
            # 獲取文本
            # print(content.css("text::text").get())
            line_text = content.css("text::text").get()
            # 獲取y屬性
            # print(content.css("text::attr(y)").get())
            line_y = content.css("text::attr(y)").get()
            # 保存到字典當中(高度y當作建,內容文本當作值)
            y_text_dict[line_y] = line_text
        return y_text_dict
    #  第二種svg格式
    if flag == '1':
        select = parsel.Selector(text2)
        # 找到所有的path標簽
        path_list = select.css('path')
        print("第二種svg格式")
        # print(path_list)
        y_list = []
        for path in path_list:
            # 獲取高度
            y = path.css("path::attr(d)").get().split(' ')[1]
            y_list.append(y)
        line_text_list = []
        content_list = select.css('textPath')
        for content in content_list:
            # 獲取文本
            line_text = content.css("textPath::text").get()
            line_text_list.append(line_text)
        # 存放資訊滴字典
        y_text_dict = {}
        for k, v in zip(y_list, line_text_list):
            y_text_dict[k] = v
        return y_text_dict

最后最后,因為我只爬取了一頁的評論就是14條,給大家伙看看成果!評論都保存在了txt文本當中了!

在這里插入圖片描述
在這里插入圖片描述
要實作多頁爬取很簡單,只要將url拼接一下即可

下面是第三頁的url:形式例如p2、p3這樣子滴,小夜斗出于好奇想攻克這個大眾點評,完整評論資訊就不爬取了!

http://www.dianping.com/shop/H9FNPpCqj1Tu98oD/review_all/p3

注意事項:大眾點評對ip的訪問很嚴格,小夜斗自己弄了3個ip,還有自己的請求頭有兩個,cookie資訊一定要是當天登錄進去滴,而且必須保證是你要抓取評論的那一頁;然后那個css檔案background的class類屬性每天都會改變,經過小夜斗這幾天的觀察,字典映射檔案就兩種方式,大致方法都一樣破解,只不過兩種svg檔案的y值放置的位置不一樣罷了!

哦對了,如果用小夜斗原始碼的同學記得自己更新一下ip,三個ip不一定都能用,其中好像就下面這個能用!大家可以自己建立一個ip代理

‘http’: ‘http://113.214.13.1:1080’

然后精簡版小夜斗待會兒會分享到自己的公眾號,還沒關注滴小伙伴快來滴滴呀,原始碼后臺回復“006大眾點評”即可獲得!

在這里插入圖片描述
請持續關注夜斗小神社,爬蟲路上不迷路!

《小夜斗滴爬蟲入門實戰案例》

  • 在這個星球上,你很重要,請珍惜你的珍貴! ~~~夜斗小神社
    在這里插入圖片描述

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

標籤:python

上一篇:識別字串 [Python3]

下一篇:turtle畫哆啦A夢(不止一個哦 多個有趣的畫)

標籤雲
其他(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