最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pythonr基于selenium如何實(shí)現(xiàn)不同商城的商品價(jià)格差異分析系統(tǒng)

 更新時(shí)間:2022年03月19日 11:32:48   作者:一枚大果殼  
這篇文章主要給大家介紹了關(guān)于Pythonr基于selenium如何實(shí)現(xiàn)不同商城的商品價(jià)格差異分析系統(tǒng)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

1. 前言

selenium 原本是一款自動(dòng)化測(cè)試工具,因其出色的頁面數(shù)據(jù)解析和用戶行為模擬能力而常用于爬蟲程序中,致使爬蟲程序的爬取過程更簡(jiǎn)單、快捷。

爬蟲程序與其它類型程序相比較,本質(zhì)一樣,為數(shù)據(jù)提供處理邏輯,只是爬蟲程序的數(shù)據(jù)來源于 HTML 代碼片段中。

怎樣準(zhǔn)確查找到頁面中數(shù)據(jù)所在的標(biāo)簽(或叫節(jié)點(diǎn)、元素、組件)就成了爬蟲程序的關(guān)鍵,只有這一步成立,后續(xù)的數(shù)據(jù)提取、清洗、匯總才有可能。

相比較于 Beaufulsoup 模塊, selenium 底層依靠的是強(qiáng)大的瀏覽器引擎,在頁面解析能力上頗有王者的從容和決絕。

本文將使用 selenium 自動(dòng)摸擬用戶的搜索行為,獲取不同商城上同類型商品的價(jià)格信息,最終生成商品在不同商城上的價(jià)格差對(duì)比表。

本文通過實(shí)現(xiàn)程序流程講解 selenium,只會(huì)講解程序中涉及到的 selenium 功能。不會(huì)深究其它 selenium API 的細(xì)節(jié)。所以你在閱讀本文時(shí),請(qǐng)確定你對(duì) selenium 有所一點(diǎn)點(diǎn)的了解。

2、程序設(shè)計(jì)流程

2.1 需求分析:

本程序?qū)崿F(xiàn)了用戶不打開瀏覽器、只需要輸入一個(gè)商品關(guān)鍵字,便能全自動(dòng)化的實(shí)現(xiàn)在不同商城中查找商品價(jià)格,并匯總出價(jià)格一些差異信息。

1、程序運(yùn)行時(shí),提示使用者輸入需要搜索的商品關(guān)鍵字。

本程序僅為探研 selenium 的奇妙之處,感受其王者風(fēng)范,沒有在程序結(jié)構(gòu)和界面上費(fèi)心力。

2、使用 selenium 摸擬用戶打開京東和蘇寧易購(gòu)首頁。

為什么選擇京東和蘇寧易,而不選擇淘寶?

因?yàn)檫@ 2 個(gè)網(wǎng)站使用搜索功能時(shí)沒有登錄驗(yàn)證需要,可簡(jiǎn)化本程序代碼。

3、使用 selenium 在首頁的文本搜索框中自動(dòng)輸入商品關(guān)鍵字,然后自動(dòng)觸發(fā)搜索按鈕的點(diǎn)擊事件,進(jìn)入商品列表頁面。

4、使用 selenium 分析、爬取不同商城中商品列表頁面中的商品名稱和價(jià)格數(shù)據(jù)。

5、對(duì)商品的價(jià)格數(shù)據(jù)做簡(jiǎn)單分析后,使用 CSV 模塊以文件方式保存。

主要分析商品在不同商城上的平均價(jià)格、最低價(jià)格、最高體系的差異。

當(dāng)然,如果有需要,可以借助其它的模塊或分析邏輯,得到更多的數(shù)據(jù)分析結(jié)論。

2.2 認(rèn)識(shí) selenium

雖然本文不深究 selenium API 的細(xì)節(jié),但是,既然要用它,其使用流程還是要面面俱到。

1、安裝:

selenium 是 python 第三庫,使用前要安裝,安裝細(xì)節(jié)就沒必要在此多費(fèi)筆墨。

pip3 install selenium

除了安裝 selenium 模塊,還需要為它下載一個(gè)瀏覽器驅(qū)動(dòng)程序,否則它無法工作。

什么是瀏覽器驅(qū)動(dòng)程序?為什么需要它?

解釋這個(gè)問題,需要從 selenium 的工作原理說起。

2、淺淡 selenium 的工作原理:

Beautiful soup 使用特定的解析器程序解析 HTML 頁面。selenium 更干脆、直接借助瀏覽器的解析能力。通過調(diào)用瀏覽器的底層 API 完成頁面數(shù)據(jù)查找,也是跪服了,不僅爬取,還可以向?yàn)g覽器模擬用戶行為發(fā)送操作指令。

有沒有感覺瀏覽器就是 selenium 手中的牽線木偶(玩弄瀏覽器于股掌之中)。 selenium 的工作就是驅(qū)動(dòng)瀏覽器,向?yàn)g覽器發(fā)送指令或接收瀏覽的反饋,此過程中,瀏覽器驅(qū)動(dòng)程序(webdriver)就起到了上傳下達(dá)的作用。

典型的組件開發(fā)模式。

很顯然,因不同瀏覽器的內(nèi)核存在差異性,驅(qū)動(dòng)程序必然也不相同,所以,下載驅(qū)動(dòng)程序之前,請(qǐng)確定你使用的瀏覽器類型和版本。

本文使用谷歌瀏覽器,需要下載與谷歌瀏覽器對(duì)應(yīng)的 webdriver 驅(qū)動(dòng)程序。

進(jìn)入 https://www.selenium.dev/downloads/ 網(wǎng)站,選擇 python 語言,選擇最新穩(wěn)定版本。

請(qǐng)選擇與正使用的瀏覽版本一致的驅(qū)動(dòng)程序。

下載完畢后,指定一個(gè)驅(qū)動(dòng)程序的存放目錄,本文存放在 D:\chromedriver\chromedriver.exe 。也可存放在瀏覽器的安裝目錄。

2.3 功能函數(shù)設(shè)計(jì)

準(zhǔn)備工作就緒后,開始編碼:

導(dǎo)入程序所需要的模塊,定義程序所需要的變量。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import csv
import time
import math
# 瀏覽器對(duì)象
chrome_browser = None
# 商品關(guān)鍵字
search_keyword = None
# 保存在京東商城搜索到的商品數(shù)據(jù),格式{商品名:價(jià)格}
jd_data = {}
# 保存在蘇寧商城搜索到的商品數(shù)據(jù),格式{商品名:價(jià)格}
sn_data = {}
  • webdriver: 用來構(gòu)建瀏覽器對(duì)象,從底層設(shè)計(jì)角度講,是 selenium 和瀏覽器之間的接口層。selenium 向上為用戶提供高級(jí)應(yīng)用接口,向下通過 webdriver 和瀏覽器無障礙溝通。
  • Service: webdriver 構(gòu)建瀏覽器對(duì)象時(shí)的參數(shù)類型。
  • By: ** 封裝了查找頁面組件的各種方式。selenium** 向開者提供了很多高級(jí)方法用來查詢 HTML 頁面組件,如通過元素 ID、樣式、樣式選擇器、XPATH……By 封裝了這些方案。

諸如:find_element_by_class_name( )、 find_element_by_id()、find_element_by_()、find_element_by_tag_name()、find_element_by_class_name()、find_element_by_xpath()、find_element_by_css_selector()

以上方法已經(jīng)被標(biāo)注為過時(shí),請(qǐng)使用 find_element( ) 方法,配合 By 對(duì)象切換方式。

  • csv: 用來把獲取到的數(shù)據(jù)以 csv 格式保存。
  • time: 時(shí)間模塊,用來模擬網(wǎng)絡(luò)延遲。
  • math: 數(shù)學(xué)模塊,輔助數(shù)據(jù)分析。

初始化函數(shù):初始化瀏覽器對(duì)象和用戶輸入數(shù)據(jù)

'''
初始瀏覽器對(duì)象
'''
def init_data():
    # 驅(qū)動(dòng)程序存放路徑
    webdriver_path = r"D:\chromedriver\chromedriver.exe"
    service = Service(webdriver_path)
    # 構(gòu)建瀏覽器對(duì)象
    browser = webdriver.Chrome(service=service)
    # 等待瀏覽器就緒
    browser.implicitly_wait(10)
    return browser

'''
初始用戶輸入的商品名稱關(guān)鍵字
'''
def input_search_key():
    info = input("請(qǐng)輸入商品關(guān)鍵字:")
    return info

查詢京東商品信息。在京東商城查詢商品,分兩個(gè)步驟,在首頁輸入商品關(guān)鍵字,點(diǎn)擊搜索后,在結(jié)果頁面查詢價(jià)格信息。完整代碼如下:

'''
進(jìn)入京東商城查詢商品信息
'''
def search_jd():
    global jd_data
    products_names = []
    products_prices = []
    # 京東首頁
    jd_index_url = r"https://www.jd.com/"
    # 打開京東首面
    try:
        if chrome_browser is None:
            raise Exception()
        else:
            # 打開京東首頁
            chrome_browser.get(jd_index_url)
            # 模擬網(wǎng)絡(luò)延遲
            chrome_browser.implicitly_wait(10)
            # 找到文本輸入組件
            search_input = chrome_browser.find_element(By.ID, "key")
            # 在文本框中輸入商品關(guān)鍵字
            search_input.send_keys(search_keyword)
            chrome_browser.implicitly_wait(5)
            # 找到搜索按鈕 這里使用 CSS 選擇器方案
            search_button = chrome_browser.find_element(By.CSS_SELECTOR, "#search > div > div.form > button")
            # 觸發(fā)按鈕事件
            search_button.click()
            chrome_browser.implicitly_wait(5)
            # 獲取所有打開的窗口(當(dāng)點(diǎn)擊按鈕后應(yīng)該有 2 個(gè))
            windows = chrome_browser.window_handles
            # 切換新打開的窗口,使用負(fù)索引找到最后打開的窗口
            chrome_browser.switch_to.window(windows[-1])
            chrome_browser.implicitly_wait(5)
            # 獲取商品價(jià)格
            product_price_divs = chrome_browser.find_elements(By.CLASS_NAME, "p-price")
            for i in range(5):
                div = product_price_divs[i]
                if len(div.text) != 0:
                    # 刪除價(jià)格前面的美元符號(hào)
                    products_prices.append(float(div.text[1:]))
            # 獲取商品名稱
            product_name_divs = chrome_browser.find_elements(By.CLASS_NAME, "p-name")
            chrome_browser.implicitly_wait(10)
            for i in range(5):
                div = product_name_divs[i]
                if len(div.text) != 0:
                    products_names.append(div.text)

            jd_data = dict(zip(products_names, products_prices))

            jd_data["平均價(jià)格"] = sum(products_prices) / len(products_prices)
            jd_data["最低價(jià)格"] = min(products_prices)
            jd_data["最高價(jià)格"] = max(products_prices)
            # 使用 CSV 模塊寫入文檔
            csv_save("京東商城", jd_data)

    except Exception as e:
        print(e)

chrome_browser: 由 webdriver 構(gòu)建出來的對(duì)瀏覽器映射的對(duì)象,selenium 通過此對(duì)象控制對(duì)瀏覽器的所有操作。

此對(duì)象有一個(gè) find_element( ) 核心方法,用來查找(定位)HTML 頁面元素。查找時(shí),可以通過 By 對(duì)象指定查找的方式(這里使用了工廠設(shè)計(jì)模式), By 的取值可以是 ID、CSS_SELECTOR、XPATH、CLASS_NAME、CSS_SELECTOR、TAG_NAME、LINK_TEX、PARTIAL_LINK_TEXT。

打開京東首頁后,先定位定位文本搜索框和搜索按鈕。

使用瀏覽器的開發(fā)者工具,檢查到文本框的源代碼是一段 input html 片段,為了精確地定位到此組件,一般先試著分析此組件有沒有獨(dú)有的屬性或特征值,id 是一個(gè)不錯(cuò)的選擇。html 語法規(guī)范 id 值應(yīng)該是一個(gè)唯一值。

search_input = chrome_browser.find_element(By.ID, "key")

找到組件后,可以對(duì)此組件進(jìn)行一系列操作,常用的操作:

  • text 屬性: 獲取組件的文本內(nèi)容。
  • send_keys( ) 方法:為此組件賦值。
  • get_attribute( ) 方法:獲取組件的屬性值。

這里使用 send_keys 給文本組件賦予用戶輸入商品關(guān)鍵字。

search_input.send_keys(search_keyword)

再查找搜索按鈕組件:

按鈕組件是一段 button html 代碼,沒有過于顯著的特性屬性值,為了找到這個(gè)唯一組件,可以使用 XPATH 或 CSS 選擇器方式。右擊此代碼片段,在彈出的快捷菜單中找到“復(fù)制”命令,再找到此組件的 CSS選擇器值。

search_button = chrome_browser.find_element(By.CSS_SELECTOR, "#search > div > div.form > button")

調(diào)用按鈕組件的 click() 方法,模擬用戶點(diǎn)擊操作,此操作會(huì)打開新窗口,并以列表方式顯示搜索出來的商品數(shù)據(jù)。

search_button.click()

selenium 接收到瀏覽器打開新窗后的反饋后,可以使用 window_handles 屬性獲取瀏覽器中已經(jīng)打開的所有窗口,并以列表的方式存儲(chǔ)每一個(gè)窗口的操作引用。

windows = chrome_browser.window_handles

對(duì)頁面元素進(jìn)行定位查找時(shí),有一個(gè)當(dāng)前窗口(當(dāng)前可以、正在操作的窗口)的概念。剛開始是在首頁窗口操作,現(xiàn)在要在搜索結(jié)果窗口中進(jìn)行操作,所以要切換到剛打開的新窗口。使用負(fù)索引得到剛打開的窗口(剛打開的窗口一定是最后一個(gè)窗口)。

chrome_browser.switch_to.window(windows[-1])

注意,這時(shí)切換到了搜索結(jié)果窗口,便可以在這個(gè)窗口中搜索所需要組件。

在這個(gè)頁面中,只需要獲取前 5 名的商品具體信息,包括商品名、商品價(jià)格。至于具體要獲取什么數(shù)據(jù),可以根據(jù)自己的需要定奪。本程序只需要商品的價(jià)格和名稱,則檢查頁面,找到對(duì)應(yīng)的 html 片段。

商品名信息存放在一個(gè) div 片段中,此 div 有一個(gè)值為 p-name 的 class 屬性??梢允褂?CSS-NAME 方式獲取,因?yàn)樗械纳唐凡捎孟嗤文0?,這里使用 find_elements( ) 方法即可。

product_name_divs = chrome_browser.find_elements(By.CLASS_NAME, "p-name")

find_elements 方法返回具有相同 CSS-NAME 的組件列表,編寫代碼迭代出每一個(gè)組件,并獲取數(shù)據(jù),然后存儲(chǔ)在商品名稱列表中。

for i in range(5):
    div = product_name_divs[i]
    if len(div.text) != 0:
       products_names.append(div.text)

以同樣的方式,獲取到價(jià)格數(shù)據(jù)。再把商品名稱和價(jià)格數(shù)據(jù)制成字典,并對(duì)價(jià)格數(shù)據(jù)做簡(jiǎn)單分析。

 jd_data = dict(zip(products_names, products_prices))
jd_data["平均價(jià)格"] = sum(products_prices) / len(products_prices)
jd_data["最低價(jià)格"] = min(products_prices)
jd_data["最高價(jià)格"] = max(products_prices)
csv_save("京東商城", jd_data)

以 CSV 格式存儲(chǔ)從京東商城上爬取下來的數(shù)據(jù)。

獲取蘇寧易購(gòu)上的商品數(shù)據(jù)。與從京東上獲取數(shù)據(jù)的邏輯一樣(兩段代碼可以整合到一個(gè)函數(shù)中,為了便于理解,本文分開編寫)。兩者的區(qū)別在于頁面結(jié)構(gòu)、承載數(shù)據(jù)的頁面組件不一樣或組件的屬性設(shè)置不一樣。

def search_sn():
    global sn_data
    # 保存商品名稱
    products_names = []
    # 保存商品價(jià)格
    products_prices = []
    # 蘇寧首頁
    sn_index_url = r"https://www.suning.com/"
    try:
        if chrome_browser is None:
            raise Exception()
        else:
            # 打開首頁
            chrome_browser.get(sn_index_url)
            # 摸擬網(wǎng)絡(luò)延遲
            chrome_browser.implicitly_wait(10)
            # 查找文本輸入組件
            search_input = chrome_browser.find_element(By.ID, "searchKeywords")
            # 在文本框中輸入商品關(guān)鍵字
            search_input.send_keys(search_keyword)
            time.sleep(2)
            # 找到搜索按鈕 這里使用 CSS 選擇器方案
            search_button = chrome_browser.find_element(By.ID, "searchSubmit")
            # 觸發(fā)按鈕事件
            search_button.click()
            time.sleep(3)
            # 獲取所有打開的窗口(當(dāng)點(diǎn)擊按鈕后應(yīng)該有 2 個(gè))
            windows = chrome_browser.window_handles
            # 切換新打開的窗口,使用負(fù)索引找到最后打開的窗口
            chrome_browser.switch_to.window(windows[-1])
            chrome_browser.implicitly_wait(20)
            # 獲取商品價(jià)格所在標(biāo)簽
            product_price_divs = chrome_browser.find_elements(By.CLASS_NAME, "def-price")
            # 僅查看前 5 個(gè)商品信息
            for i in range(5):
                div = product_price_divs[i]
                # 刪除價(jià)格前面的美元符號(hào)
                if len(div.text) != 0:
                    products_prices.append(float(div.text[1:]))
            chrome_browser.implicitly_wait(10)
            # 獲取商品名稱
            product_name_divs = chrome_browser.find_elements(By.CLASS_NAME, "title-selling-point")
            for i in range(5):
                products_names.append(product_name_divs[i].text)
            #
            sn_data = dict(zip(products_names, products_prices))
            sn_data["平均價(jià)格"] = sum(products_prices) / len(products_prices)
            sn_data["最低價(jià)格"] = min(products_prices)
            sn_data["最高價(jià)格"] = max(products_prices)
            # 使用 CSV 模塊寫入文檔
            csv_save("蘇寧商城", sn_data)

    except Exception as e:
        print(e)

獲取到蘇寧易購(gòu)上的商品數(shù)據(jù)后,同樣以 CSV 格式存儲(chǔ)。

存儲(chǔ)最終的分析結(jié)果。這里僅分析了兩個(gè)商城上同類型商品的平均價(jià)格、最低價(jià)、最高價(jià)的差異性。

def price_result():
    if len(jd_data) != 0 and len(sn_data) != 0:
        with open("d:/商品比較表.csv", "w", newline='') as f:
            csv_writer = csv.writer(f)
            jd_name = list(jd_data.keys())
            jd_price = list(jd_data.values())
            sn_price = list(sn_data.values())
            csv_writer.writerow(["比較項(xiàng)", "京東價(jià)格", "蘇寧價(jià)格", "價(jià)格差"])
            for i in range(5, len(jd_price)):
                csv_writer.writerow([jd_name[i], jd_price[i], sn_price[i], math.fabs(jd_price[i] - sn_price[i])])

保存了兩個(gè)商城上商品價(jià)格的平均值、最小值、最大值以及絕對(duì)差。

最終測(cè)試代碼

if __name__ == '__main__':
    search_keyword = input_search_key()
    chrome_browser = init_data()
    search_jd()
    time.sleep(2)
    search_sn()
    price_result()

請(qǐng)輸入商品關(guān)鍵字:華為meta 40

3. 總結(jié)

本文主要是應(yīng)用 selenium 。通過應(yīng)用過程對(duì) selenium 做一個(gè)講解,了解 selenium 的基本使用流程。數(shù)據(jù)分析并不是本文的重點(diǎn)。

如果要得到更全面的分析結(jié)果,則需要提供更多維度的數(shù)據(jù)分析邏輯。

到此這篇關(guān)于Pythonr基于selenium如何實(shí)現(xiàn)不同商城的商品價(jià)格差異分析系統(tǒng)的文章就介紹到這了,更多相關(guān)Pythonr selenium商品價(jià)格差異分析系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解PyQt5信號(hào)與槽的幾種高級(jí)玩法

    詳解PyQt5信號(hào)與槽的幾種高級(jí)玩法

    這篇文章主要介紹了詳解PyQt5信號(hào)與槽的幾種高級(jí)玩法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 關(guān)于numpy強(qiáng)制類型轉(zhuǎn)換的問題

    關(guān)于numpy強(qiáng)制類型轉(zhuǎn)換的問題

    這篇文章主要介紹了關(guān)于numpy強(qiáng)制類型轉(zhuǎn)換的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python?對(duì)excel交互工具的使用詳情

    python?對(duì)excel交互工具的使用詳情

    這篇文章主要介紹了python?對(duì)excel交互工具的使用詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • Python圖算法實(shí)例分析

    Python圖算法實(shí)例分析

    這篇文章主要介紹了Python圖算法,結(jié)合實(shí)例形式詳細(xì)分析了Python數(shù)據(jù)結(jié)構(gòu)與算法中的圖算法實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08
  • Python??序列化反序列化和異常處理的問題小結(jié)

    Python??序列化反序列化和異常處理的問題小結(jié)

    這篇文章主要介紹了Python?序列化反序列化和異常處理,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • 18個(gè)幫你簡(jiǎn)化代碼的Python技巧分享

    18個(gè)幫你簡(jiǎn)化代碼的Python技巧分享

    選擇學(xué)習(xí)?python?時(shí),最令我震驚的是它的簡(jiǎn)單性和可讀性。但是你知道還可以用更少的代碼行可以讓?Python?代碼變得更簡(jiǎn)單嗎?本文為大家總結(jié)了18個(gè)幫你簡(jiǎn)化代碼的Python技巧,感興趣的可以了解一下
    2022-07-07
  • Python中WebService客戶端接口調(diào)用及身份驗(yàn)證的問題

    Python中WebService客戶端接口調(diào)用及身份驗(yàn)證的問題

    這篇文章主要介紹了Python中WebService客戶端接口調(diào)用及身份驗(yàn)證的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python實(shí)時(shí)獲取cmd的輸出

    Python實(shí)時(shí)獲取cmd的輸出

    本文給大家分享python實(shí)時(shí)獲取cmd的輸出,對(duì)python實(shí)時(shí)獲取輸出相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • pandas 添加空列并賦空值案例

    pandas 添加空列并賦空值案例

    這篇文章主要介紹了pandas 添加空列并賦空值案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python 使用 attrs 和 cattrs 實(shí)現(xiàn)面向?qū)ο缶幊痰膶?shí)踐

    Python 使用 attrs 和 cattrs 實(shí)現(xiàn)面向?qū)ο缶幊痰膶?shí)踐

    這篇文章主要介紹了Python 使用 attrs 和 cattrs 實(shí)現(xiàn)面向?qū)ο缶幊痰膶?shí)踐,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06

最新評(píng)論

凤山市| 永嘉县| 许昌县| 保靖县| 灵台县| 璧山县| 南岸区| 佛山市| 清水县| 万安县| 江油市| 开化县| 郧西县| 普定县| 仪陇县| 松潘县| 喜德县| 丹寨县| 华阴市| 百色市| 随州市| 峡江县| 宝山区| 涿州市| 镇宁| 洛川县| 贵阳市| 盐边县| 陇川县| 客服| 汾阳市| 浦县| 瑞安市| 和平县| 天津市| 利津县| 大城县| 庆城县| 鄂温| 莆田市| 马关县|