<label id="jgr5k"></label>
    <legend id="jgr5k"><track id="jgr5k"></track></legend>

    <sub id="jgr5k"></sub>
  1. <u id="jgr5k"></u>
      久草国产视频,91资源总站,在线免费看AV,丁香婷婷社区,久久精品99久久久久久久久,色天使av,无码探花,香蕉av在线
      您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
      此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
      人工智能開發(fā)者 正文
      發(fā)私信給skura
      發(fā)送

      0

      亞馬遜工程師分享:如何抓取、創(chuàng)建和構(gòu)造高質(zhì)量的數(shù)據(jù)集

      本文作者: skura 2019-04-23 13:20
      導(dǎo)語:詳細(xì)指南

      雷鋒網(wǎng) AI 科技評(píng)論按,數(shù)據(jù)是所有機(jī)器學(xué)習(xí)問題的核心。如果不能訪問相關(guān)數(shù)據(jù),那么現(xiàn)在使用機(jī)器學(xué)習(xí)所取得的所有進(jìn)展都是不可能的。盡管如此,如今大多數(shù)機(jī)器學(xué)習(xí)愛好者專注于獲取方法論知識(shí)(這是一個(gè)很好的開始,但不是一直如此)。

      當(dāng)方法論達(dá)到一定程度時(shí),僅解決數(shù)據(jù)集可用的問題就限制了其潛力。

      幸運(yùn)的是,我們生活在一個(gè)網(wǎng)絡(luò)上有大量數(shù)據(jù)可用的時(shí)代,我們所需要的只是識(shí)別和提取有意義的數(shù)據(jù)集的技能。對(duì)此,亞馬遜工程師 Rishabh Misra 分享了他關(guān)于如何識(shí)別、抓取和構(gòu)建一個(gè)高質(zhì)量的機(jī)器學(xué)習(xí)數(shù)據(jù)集的心得,雷鋒網(wǎng) AI 科技評(píng)論編譯整理如下。

      本文的重點(diǎn)是通過真實(shí)的案例和代碼片段解釋如何構(gòu)建高質(zhì)量的數(shù)據(jù)集。

      本文將參考作者收集的三個(gè)高質(zhì)量數(shù)據(jù)集,即服裝尺寸推薦數(shù)據(jù)集、新聞?lì)悇e數(shù)據(jù)集和諷刺檢測(cè)數(shù)據(jù)集來解釋不同的點(diǎn)。下面先簡(jiǎn)要地解釋每個(gè)數(shù)據(jù)集是關(guān)于什么的。

      • 服裝尺寸推薦數(shù)據(jù)集

      服裝尺寸推薦和合身度預(yù)測(cè)對(duì)于改善顧客的購物體驗(yàn)和降低產(chǎn)品返工率至關(guān)重要。從 ModCloth 收集的數(shù)據(jù)集包含客戶對(duì)其購買的服裝是否合適的反饋,以及諸如評(píng)級(jí)、評(píng)論、類別信息、客戶度量等其他方面的信息。這個(gè)數(shù)據(jù)集在識(shí)別決定服裝產(chǎn)品是否適合客戶的關(guān)鍵特征方面很有用。

      • 新聞?lì)悇e數(shù)據(jù)集

      該數(shù)據(jù)集包含從 HuffPost 獲得的 2012 至 2018 年約 20 萬條新聞的標(biāo)題。它包含諸如新聞?lì)悇e、新聞標(biāo)題、新聞故事的簡(jiǎn)短描述、出版日期等詳細(xì)信息。數(shù)據(jù)集可以用于多種用途,如識(shí)別未跟蹤的新聞文章的標(biāo)簽、識(shí)別不同新聞?lì)悇e中使用的語言類型等。

      • 諷刺檢測(cè)數(shù)據(jù)集

      過去關(guān)于諷刺檢測(cè)的研究大多是利用基于 hashtag 的監(jiān)督收集的 twitter 數(shù)據(jù)集,但這些數(shù)據(jù)集在標(biāo)簽和語言方面存在噪音。為了克服這些限制,這個(gè)數(shù)據(jù)集是從兩個(gè)新聞網(wǎng)站收集的:TheOnion 和 HuffPost。TheOnion 制作了當(dāng)前事件的諷刺版本,而 HuffPost 則報(bào)道了真實(shí)和非諷刺的新聞。

      一個(gè)有趣的事實(shí)是:這些數(shù)據(jù)集在 Kaggle 上共有超過 250 個(gè)贊、50k+次瀏覽、6000+次下載和 50+個(gè)提交者。

      步驟1:搜索數(shù)據(jù)

      這個(gè)階段需要耐心,因?yàn)槟憧赡苄枰獜V泛地進(jìn)行網(wǎng)絡(luò)搜索。但你不用擔(dān)心。在這里,我將根據(jù)我的經(jīng)驗(yàn)提供一些指導(dǎo),使您的搜索更加系統(tǒng)和高效。

      如果您希望收集和構(gòu)建一個(gè)高質(zhì)量的數(shù)據(jù)集,那么您可能處于以下兩種情況之一:

      您正在尋找一個(gè)數(shù)據(jù)集去解決特定的問題 [已知問題]。

      您正在尋找可用于解決有趣問題的數(shù)據(jù)集 [未知問題]。

      根據(jù)您所處的情況,以下指南將很有幫助。

      已知問題

      收集服裝合身度和諷刺檢測(cè)數(shù)據(jù)集,以解決特定的問題。

      以下步驟可能有助于在這種情況下搜索數(shù)據(jù)集:

      分解問題以識(shí)別解決問題所必需的數(shù)據(jù)信號(hào):這是最重要的一步。在尺寸推薦問題的情況中,如果我們想向客戶推薦服裝尺寸,那么最重要的數(shù)據(jù)信息將是用戶 ID、產(chǎn)品 ID、購買的尺寸以及客戶對(duì)本次購買尺寸是否合適的反饋。其他信息,如產(chǎn)品類別、客戶測(cè)量等,有了更好但也不是必須的。

      在網(wǎng)絡(luò)上搜索一個(gè)提供所有必要信息的來源:在這里,你的谷歌搜索技巧會(huì)派上用場(chǎng)。使用它可以瀏覽多個(gè)網(wǎng)站,并查看它們是否提供必要的數(shù)據(jù)信息。對(duì)于服裝尺寸匹配數(shù)據(jù)集,像 Zappos 這樣的網(wǎng)站似乎很有希望,但缺少基本的購買尺寸信息,而 ModCloth 確實(shí)提供了所有基本數(shù)據(jù)信息(盡管需要進(jìn)行一些額外的調(diào)整,稍后將詳細(xì)介紹)。

      如果找不到單個(gè)數(shù)據(jù)源,請(qǐng)查看是否可以組合多個(gè)數(shù)據(jù)源的數(shù)據(jù)來構(gòu)建數(shù)據(jù)集:諷刺檢測(cè)數(shù)據(jù)集是將多個(gè)源的數(shù)據(jù)組合起來以構(gòu)建完整且質(zhì)量良好的數(shù)據(jù)集的完美示例。因?yàn)槲覀冎绬栴}(發(fā)現(xiàn)諷刺)和我們想要的數(shù)據(jù)類型(諷刺和非諷刺文本),所以我們不必堅(jiān)持用一個(gè)數(shù)據(jù)源來提供所有信息。我將 TheOnion 確定為獲取諷刺文本的來源,而對(duì)于非諷刺文本,我選擇了一個(gè)真正的新聞報(bào)道網(wǎng)站 HuffPost。

      查看數(shù)據(jù)源是否包含足夠的歷史數(shù)據(jù),以允許您構(gòu)造足夠大的數(shù)據(jù)集:這也是在開始收集數(shù)據(jù)之前需要考慮的一個(gè)非常重要的點(diǎn)。如果一個(gè)網(wǎng)站沒有足夠的數(shù)據(jù),例如,一個(gè)在線零售商沒有大量的產(chǎn)品可提供,或者如果一個(gè)新聞網(wǎng)站不包含對(duì)舊故事的存檔,那么即使你收集了這些數(shù)據(jù),它也不會(huì)給你帶來多大好處。所以,尋找一個(gè)提供足夠數(shù)據(jù)的數(shù)據(jù)源來構(gòu)造足夠大的數(shù)據(jù)集。

      如何改進(jìn)數(shù)據(jù)集?你能把其他來源的數(shù)據(jù)結(jié)合起來使它更有趣嗎?檢查完上述所有點(diǎn)后,看看如何進(jìn)一步改進(jìn)數(shù)據(jù)集。思考一下,您是否可以通過不同的數(shù)據(jù)源組合有關(guān)某些屬性的更多信息,這些信息可能會(huì)幫助人們?yōu)樗麄兊哪P蜆?gòu)建特性。

      未知問題

      在解釋這些類型情況的時(shí)候,新聞?lì)悇e數(shù)據(jù)集是一個(gè)很好的選擇。不知道要找的是什么會(huì)使情況稍微復(fù)雜一點(diǎn),但是,當(dāng)您在瀏覽網(wǎng)頁時(shí)注意以下幾點(diǎn)可以幫助您識(shí)別下一個(gè)有趣的數(shù)據(jù)集:

      數(shù)據(jù)源是否包含任何值得估計(jì)/預(yù)測(cè)的數(shù)據(jù)信號(hào)?:分析網(wǎng)站時(shí),請(qǐng)考慮網(wǎng)站是否提供了任何值得評(píng)估的有趣信息。它可以是一些直接的東西,或者與網(wǎng)站上的信息類型有關(guān)的東西。

      一個(gè)直截了當(dāng)?shù)睦邮牵以?HuffPost 上注意到,每個(gè)故事都被進(jìn)行了分類(如體育、政治等),而我認(rèn)為預(yù)測(cè)分類將是一個(gè)有趣的問題。對(duì)于信息類型的案例,我將 HuffPost 的新聞標(biāo)題視為諷刺檢測(cè)數(shù)據(jù)集中的非諷刺性句子(假設(shè)他們報(bào)道的是真實(shí)新聞),而將 TheOnion 的標(biāo)題視為諷刺性句子。

      數(shù)據(jù)源是否包含足夠的元數(shù)據(jù),這些元數(shù)據(jù)在預(yù)測(cè)結(jié)果時(shí)是否有用?一旦您選定了一個(gè)值得預(yù)測(cè)的數(shù)據(jù)信息,您就必須確保站點(diǎn)為您提供足夠的可用于預(yù)測(cè)該數(shù)據(jù)信息的相關(guān)信息,如果不是,您是否可以使用其他數(shù)據(jù)源將該信息帶到數(shù)據(jù)集中。例如,如果我們沒有關(guān)于商品的元數(shù)據(jù),那么在電子商務(wù)平臺(tái)上預(yù)測(cè)產(chǎn)品價(jià)格的效果可能不會(huì)很好。為了使數(shù)據(jù)集成為一個(gè)好的數(shù)據(jù)集,需要足夠的相關(guān)信息。

      站點(diǎn)是否包含足夠的歷史數(shù)據(jù),讓你可以構(gòu)建足夠大的數(shù)據(jù)集?這與「已知問題」部分中的第 4 點(diǎn)相同。
      預(yù)測(cè)結(jié)果有什么重要的意義或應(yīng)用嗎?高質(zhì)量數(shù)據(jù)集的一個(gè)標(biāo)志是,它還可以用于解決有趣的實(shí)際問題,或者能夠?qū)δ承┈F(xiàn)象提供有趣的見解。例如,基于新聞?lì)悇e數(shù)據(jù)集構(gòu)建的分類器可以幫助識(shí)別任何散文的寫作風(fēng)格(無論是政治、幽默等),幫助標(biāo)記未跟蹤的新聞文章,提供對(duì)不同類型新聞的寫作風(fēng)格差異的洞察等等。

      交叉檢查以查看此類數(shù)據(jù)是否已經(jīng)可用。如果是,數(shù)據(jù)集是否在現(xiàn)有數(shù)據(jù)集上添加了任何內(nèi)容?這一步很重要,這樣你就知道你在貢獻(xiàn)一些獨(dú)特的東西,而不是一些已經(jīng)存在的東西。從這一步開始,在谷歌上簡(jiǎn)單搜索就足夠了。

      如何改進(jìn)數(shù)據(jù)集?你能把其他來源的數(shù)據(jù)結(jié)合起來使它更有趣嗎?這與「已知問題」部分中的第 5 點(diǎn)相同。

      步驟 2:提取數(shù)據(jù)

      一旦縮小了數(shù)據(jù)源范圍,我們就可以開始提取數(shù)據(jù)了。

      在抓取數(shù)據(jù)之前,請(qǐng)仔細(xì)閱讀網(wǎng)站的條款,以確保您不會(huì)因?yàn)樽ト『凸_分發(fā)數(shù)據(jù)而違反法律規(guī)則。

      由于在不舉實(shí)際例子的情況下很難解釋這一節(jié),因此我將以我在從 ModCloth 獲取數(shù)據(jù)時(shí)使用的腳本為例來闡述不同的觀點(diǎn)。

      了解網(wǎng)站的結(jié)構(gòu)

      首先要做的是熟悉站點(diǎn)的結(jié)構(gòu)。

      亞馬遜工程師分享:如何抓取、創(chuàng)建和構(gòu)造高質(zhì)量的數(shù)據(jù)集

      在 ModCloth 上,我們看到在網(wǎng)站頂部有各種服裝類別:連衣裙、上衣、下裝等等。如果我們單擊其中一個(gè)類別(如上圖中的頂部),就會(huì)看到產(chǎn)品以網(wǎng)格格式顯示。圖片中的頁面顯示 100 個(gè)產(chǎn)品,其余產(chǎn)品可通過滾動(dòng)右上角附近的頁面滾動(dòng)器訪問。

      接下來,我們單擊其中一個(gè)產(chǎn)品來觀察每個(gè)產(chǎn)品的頁面是什么樣子的。在頂部,我們有與項(xiàng)目相關(guān)的元數(shù)據(jù),在底部,我們有產(chǎn)品評(píng)論。

      亞馬遜工程師分享:如何抓取、創(chuàng)建和構(gòu)造高質(zhì)量的數(shù)據(jù)集

      亞馬遜工程師分享:如何抓取、創(chuàng)建和構(gòu)造高質(zhì)量的數(shù)據(jù)集

      我們注意到每一頁最多包含 10 條評(píng)論。如果評(píng)論超過 10 條,我們會(huì)在右下角看到「NEXT」按鈕。

      亞馬遜工程師分享:如何抓取、創(chuàng)建和構(gòu)造高質(zhì)量的數(shù)據(jù)集

      亞馬遜工程師分享:如何抓取、創(chuàng)建和構(gòu)造高質(zhì)量的數(shù)據(jù)集

      當(dāng)我們單擊「NEXT」按鈕時(shí),將顯示接下來的 10 條評(píng)論。但是,您可能會(huì)注意到鏈接沒有更改,這意味著除了單擊「NEXT」按鈕之外,沒有其他方法可以訪問后續(xù)評(píng)論。我們還可以看到,在隨后的頁面中,還會(huì)出現(xiàn)「PREVIOUS」按鈕。稍后我們將知道為什么這些細(xì)節(jié)對(duì)于數(shù)據(jù)提取很重要。

      亞馬遜工程師分享:如何抓取、創(chuàng)建和構(gòu)造高質(zhì)量的數(shù)據(jù)集

      我們現(xiàn)在對(duì)網(wǎng)站的結(jié)構(gòu)有了相當(dāng)好的了解。重申一下,我們的目標(biāo)是從每個(gè)類別中提取每個(gè)產(chǎn)品的評(píng)論。

      提取產(chǎn)品鏈接

      由于類別數(shù)量有限,因此不需要編寫腳本來提取鏈接,我們可以手動(dòng)收集這些鏈接。在本節(jié)中,我們將重點(diǎn)從服裝類別之一:上衣中提取產(chǎn)品鏈接

      要了解數(shù)據(jù)提取的基礎(chǔ)知識(shí),請(qǐng)瀏覽以下博客:如何使用 pytho 和 BeautifulSoup 提取網(wǎng)站數(shù)據(jù)
      我們還將利用瀏覽器自動(dòng)化工具 Selenium 進(jìn)行數(shù)據(jù)提取。

      要了解 Selenium 的工作原理,請(qǐng)瀏覽以下博客:使用 Selenium 提取網(wǎng)站數(shù)據(jù)

      那么,讓我們開始吧:

      到目前為止,我們知道在每個(gè)類別中,產(chǎn)品以每組 100 個(gè)的形式呈現(xiàn),我們可以滾動(dòng)頁面滾動(dòng)器來訪問所有產(chǎn)品。首先,我們需要了解不同頁面的鏈接是如何變化的。通常情況下,以下圖片建議使用遵循一個(gè)模式的鏈接。

      亞馬遜工程師分享:如何抓取、創(chuàng)建和構(gòu)造高質(zhì)量的數(shù)據(jù)集

      頁面 1

      亞馬遜工程師分享:如何抓取、創(chuàng)建和構(gòu)造高質(zhì)量的數(shù)據(jù)集

      頁面 2

      亞馬遜工程師分享:如何抓取、創(chuàng)建和構(gòu)造高質(zhì)量的數(shù)據(jù)集

      頁面 3

      然后,對(duì)于每個(gè)頁面,我們需要提取到單個(gè)項(xiàng)目的頁面的鏈接。為此,請(qǐng)轉(zhuǎn)到其中一個(gè)項(xiàng)目,右鍵單擊該項(xiàng)目并轉(zhuǎn)到「inspect」選項(xiàng)。滾動(dòng)滾動(dòng)條以識(shí)別包含 item 鏈接的<a>元素并注意其 css 類。在下面的圖片中,我們看到在我們的例子中,類是虛鏈接。最有可能的是,所有其他產(chǎn)品鏈接也將使用相同的類進(jìn)行樣式設(shè)計(jì)(只需驗(yàn)證一次)。

      亞馬遜工程師分享:如何抓取、創(chuàng)建和構(gòu)造高質(zhì)量的數(shù)據(jù)集

      有了這些信息,我們可以編寫以下代碼來提取 Tops 類別中所有產(chǎn)品的鏈接:

      from selenium import webdriver   

      from bs4 import BeautifulSoup


      # download driver from http://chromedriver.chromium.org/downloads   

      path_to_chromedriver = './chromedriver2.exe'   

      browser = webdriver.Chrome(executable_path = path_to_chromedriver)   


      urls = []; counter = 0; tops_link = []   

      ## Since Tops category has 7 pages, link to each following a specific pattern,   

      ## we can create links to pages in following way.   

      for i in range(7):   

              urls.append('https://www.modcloth.com/shop/tops?sz=102&start='+str(counter))   

              counter += 102   


      ## Extracting links for products in each page   

      for url in urls:   

              ## open the url   

              browser.get(url)   


              ## purposeful wait time to allow website to get fully loaded   

              time.sleep(4)  


              ## get page content   

             content = browser.page_source   

              soup = BeautifulSoup(content, "lxml")   


              product_links = []   


              ## extract all the "a" elements with "thumb-link" class from the page   

              data_links = soup.find_all("a", {"class":"thumb-link"})   


              ## from each <a> element, extract the URL   

              for i in data_links:   

                      product_links.append(i['href'])   


              tops_link.extend(product_links)   


              ## purposeful wait time to avoid sending requests in quick succession   

              time.sleep(10)

      正如您所注意到的,腳本有等待時(shí)間,以確保我們不會(huì)向站點(diǎn)太頻繁地發(fā)送請(qǐng)求。通常,每秒一個(gè)請(qǐng)求是合適的,但是考慮到 ModCloth 是一個(gè)小站點(diǎn)(可能沒有亞馬遜那么大),我們可以將等待時(shí)間延長(zhǎng)。在這方面你可以運(yùn)用你的判斷力。

      提取評(píng)論

      既然我們已經(jīng)為每個(gè)產(chǎn)品建立了一個(gè)鏈接,那么我們就可以更深入地了解每個(gè)產(chǎn)品的評(píng)論。首先,我們將檢查每個(gè)評(píng)論對(duì)應(yīng)的 HTML。再次,右鍵單擊查看并單擊「inspect」。

      亞馬遜工程師分享:如何抓取、創(chuàng)建和構(gòu)造高質(zhì)量的數(shù)據(jù)集

      我們注意到每個(gè)評(píng)論都包含在<article>元素中。讓我們來探索一下<article>元素的構(gòu)成。我們可以通過單擊元素旁邊的箭頭來實(shí)現(xiàn)這一點(diǎn)。當(dāng)我們將鼠標(biāo)懸停在<article>標(biāo)記內(nèi)的各個(gè)元素上時(shí),相應(yīng)的視圖將在網(wǎng)頁上突出顯示。

      亞馬遜工程師分享:如何抓取、創(chuàng)建和構(gòu)造高質(zhì)量的數(shù)據(jù)集

      例如,在上面的圖像中,具有名為「pr-rd-content-block pr-accordion pr-accordion-collapsed」的類的<section>元素折疊對(duì)應(yīng)于尺寸反饋意見和與客戶測(cè)量相關(guān)的數(shù)據(jù)。請(qǐng)參閱下面的腳本以了解如何提取<article>里面所有相關(guān)內(nèi)容的詳細(xì)信息。

      from selenium.common.exceptions import NoSuchElementException, WebDriverException

      import numpy as np   

      import random   


      ## helper function to consolidate two dictionaries    

      def merge_two_dicts(x, y):    

              z = x.copy()   # start with x's keys and values    

              z.update(y)    # modifies z with y's keys and values & returns None    

              return z    


      scraped_data = []    

      ## for each product in Tops category    

      for iterr in range(0,len(tops_link)):    

              init = 0    

              url = tops_link[iterr]    


              ## open the URL in browser    

              try:    

                      browser.get(url)    

                      time.sleep(4)    

              except WebDriverException: ## when extracted URL is invalid    

                      print('invalid url', iterr)    

                      continue    


              ## get the webpage content    

              content = browser.page_source    

              soup = BeautifulSoup(content, "lxml")    


              ## repeat until we run of review pages    

              while(True):    

                      ## get the webpage content    

                      content = browser.page_source    

                      soup = BeautifulSoup(content, "lxml")    


                      ## extract reviewer details   

                     reviewer_details = soup.find_all("div", {"class": "pr-rd-reviewer-details pr-rd-inner-side-cont                                                                  ent-block"})    


                    ## extract reviewers' name    

                      reviewers_name = []    

                      for reviewer in reviewer_details:    

                              ## In ModCloth, reviewer name appears as "By REVIEWER_NAME"    

                              ## Splitting at the end is to remove "By" to get only the actual reviewer name    

                              reviewer_name = reviewer.find("p", {"class":"pr-rd-details pr-rd-author-nickname"}).te                                                                           xt.split('\n')[-1].strip()    

                              reviewers_name.append(reviewer_name)   


                      ## extract "isVerified" information    

                      isVerified = soup.find_all("span", {"class": "pr-rd-badging-text"})   


                      ## extract the fit feedback and customer measurements data (review_metadata)    

                      review_data = soup.find_all("article", {"class": "pr-review"})    

                      review_metadata_raw = []   


                      for i in range(len(review_data)):    

                              review_metadata_raw.append(review_data[i].find("div", {"class": "pr-accordion-conten                                                                          t"})) 

       

                      ## extract HTML elements which contain review metadata    

                      review_metadata_elements = [review_metadata_raw[i].find_all("dl", {"class", "pr-rd-def-list"                                                                                                                               })    

                              if review_metadata_raw[i] is not None else None     

                              for i in range(len(review_metadata_raw))]   


                      ## extract actual data from HTML elements    

                      review_metadata = []    

                      for element in review_metadata_elements:    

                              if element is None:    

                                      review_metadata.append(None)    

                                      continue    

                              ## <dt> elements contain metadata field name like "fit", "length" etc    

                              ## <dd> elements contain reviewer's response for those metadata fields like "small",                              "just right" etc 

                               review_metadata.append([(element[i].find("dt").text.lower(), element[i].find("dd").text.                                                                  lower())    

                                                           if element is not None else ""     

                                                           for i in range(len(element))])   


                      ## extract review text    

                      review_text = [txt.text for txt in soup.find_all("p", {"class": "pr-rd-description-text"})]    

                      review_summary = [txt.text for txt in soup.find_all("h2", {"class": "pr-rd-review-headline"})] 

       

                      ## extract item id    

                      item_id = soup.find("div", {"class": "product-number"}).find("span").text   


                      ## extract item category    

                       try:    

                              category = soup.find("a", {"class":"breadcrumb-element"}).text.lower()    

                      except AttributeError:  ## if category not present, item is not available    

                              time.sleep(15 + random.randint(0,10))    

                              break   


                       ## extract available product sizes    

                       product_sizes = [i.text.strip().lower() for i in soup.find("ul", {"class": "swatches size"})    

                                                   .find_all("li", {"class": "selectable variation-group-value"})]    

                       item_info = {"category": category, "item_id": item_id, "product_sizes": product_sizes}    


                       ## consolidate all the extracted data    

                       ## ignore records which don't have any review metadata as fit feedback is an essential sig                       nal for us 

                       scraped_data.extend([merge_two_dicts({"review_text": review_text[j], "review_summary":

                                                         review_summary[j]},    merge_two_dicts(merge_two_ dicts({

                                                         "user_name":reviewers_name[j]},    

                                                          {data[0]:data[1] for data in review_metadata[j]})    

                                                           ,item_info))    

                                 for j in range(len(reviewer_details)) if review_metadata_raw[j] is not None])   


                       ## if current page is the initial one, it contains only NEXT button (PREVIOUS is missing)   

                       if init == 0:   

                               try:   

                                       init = 1   

                                       ## execute click on NEXT by utilizing the xpath of NEXT    

                                       browser.execute_script("arguments[0].click();",    browser.find_element_by_xpath                                                                      ('//*[@id="pr-review-display"]/footer/div/aside/button'))                                  time.sleep(10 + random.randint(0,5))   

                                except NoSuchElementException: ## No NEXT button present, less than 10 reviews                                    time.sleep(15 + random.randint(0,10))   

                                        break   


                     else:   

                     try:   

                             ## execute click on NEXT by utilizing the xpath of NEXT    

                             ## if you notice, the xpath of NEXT is different here since PREVIOUS button is also pre                            sent now   

                             browser.execute_script("arguments[0].click();",   browser.find_element_by_xpath('//*[@                                                              id="pr-review-display"]/footer/div/aside/button[2]'))   

                             time.sleep(10 + random.randint(0,5))   

                      except  NoSuchElementException: ## No NEXT button, no more pages left    

                                  time.sleep(15 + random.randint(0,10))    

                                  break   


              ## save the extracted data locally    

              np.save('./scraped_data_tops.npy',scraped_data)   

      需要注意的幾點(diǎn):

      我們?cè)谠S多地方做過異常處理。當(dāng)我在運(yùn)行腳本時(shí)遇到問題時(shí),這些處理都會(huì)逐步添加進(jìn)去。

      第 30-97 行負(fù)責(zé)將感興趣的數(shù)據(jù)提取出來并解析為字典格式。通常,人們更喜歡將提取的數(shù)據(jù)存儲(chǔ)在本地并離線解析,但是,由于筆記本電腦的存儲(chǔ)空間限制,我更喜歡在線進(jìn)行分析。

      Selenium 在第 99-119 行中很有用。由于不同頁面的 URL 不會(huì)更改,所以導(dǎo)航的唯一方法是模擬按鈕單擊。我們已經(jīng)使用「NEXT」按鈕的 xpath 來完成同樣的工作。

      xpath 可用于瀏覽 XML 文檔中的元素和屬性。要標(biāo)識(shí)元素的 xpath,請(qǐng)轉(zhuǎn)到 inspect,右鍵單擊 HTML 代碼并復(fù)制 xpath,如下圖所示。

      亞馬遜工程師分享:如何抓取、創(chuàng)建和構(gòu)造高質(zhì)量的數(shù)據(jù)集

      獲取 HTML 元素的 xpath 的方法;在本例中,為「NEXT」按鈕

      這就完成了數(shù)據(jù)提取和分析過程,之后我們數(shù)據(jù)中的記錄將如下圖所示:

      亞馬遜工程師分享:如何抓取、創(chuàng)建和構(gòu)造高質(zhì)量的數(shù)據(jù)集

      亞馬遜工程師分享:如何抓取、創(chuàng)建和構(gòu)造高質(zhì)量的數(shù)據(jù)集

      看起來,我們的工作已經(jīng)完成了。但是,仍然有幾個(gè)步驟可以構(gòu)建最終的數(shù)據(jù)集。

      步驟 3:構(gòu)建數(shù)據(jù)集

      到目前為止,我們所擁有的數(shù)據(jù)質(zhì)量在以下幾個(gè)維度上有一些改進(jìn)空間:

      數(shù)據(jù)清洗

      到目前為止提取的數(shù)據(jù)可能缺少一些基本的數(shù)據(jù)信息或者記錄,謝謝數(shù)據(jù)可以被安全地處理掉。例如:
      有很多關(guān)于 ModCloth 的評(píng)論,它們不包含是否合身的反饋或購買產(chǎn)品尺寸信息。盡管我們放棄了第 64-66 行中不包含任何相關(guān)信息的評(píng)論,但也存在一些包含相關(guān)信息但不包含某些基本數(shù)據(jù)信息的評(píng)論。

      我們注意到,ModCloth 上評(píng)論人的信息并沒有和任何特定的 ID 關(guān)聯(lián)。這對(duì)我們來說是另一個(gè)挑戰(zhàn),因?yàn)橛脩?ID 是必不可少的數(shù)據(jù)。為了解決這個(gè)問題,我們可以將評(píng)論者的昵稱與打分值連接起來,以形成一個(gè)唯一的字符串。我們可以字符串要求至少包含 3 個(gè)字段信息,以減少數(shù)據(jù)集中由于不同的評(píng)論者得到相同的 ID 而產(chǎn)生的干擾。然后就可以安全地刪除不存在此類信息的所有記錄。

      此外,很少有記錄顯示產(chǎn)品目錄尺寸中沒有的采購尺寸(可能是報(bào)告錯(cuò)誤),因此我們也拋棄了這些記錄。

      匿名處理

      為了保護(hù)隱私,需要對(duì)用戶和條目的詳細(xì)信息進(jìn)行匿名處理。在 ModCloth 數(shù)據(jù)集中有一些敏感的屬性,比如身體尺寸數(shù)據(jù),我們可以隨機(jī)生成用戶 ID 和條目 ID。如果我們提取的是非公開的數(shù)據(jù)信息,這一點(diǎn)就變得更加重要了。

      標(biāo)準(zhǔn)化

      數(shù)據(jù)中可能存在一些屬性,這些屬性在所有記錄中的含義可能并不完全相同。在這種情況下,我們需要使用直覺(或一些基線)來標(biāo)準(zhǔn)化數(shù)據(jù)集中的屬性。例如,ModCloth 上的不同產(chǎn)品可能有不同的尺碼單位(比如牛仔褲在美國和中國有完全不同的尺碼單位)。因此,在我們標(biāo)準(zhǔn)化所有記錄的數(shù)據(jù)之前,數(shù)據(jù)集基本上是不可用的。

      處理這一問題的一種方法是利用 ModCloth 上的尺寸表,它將不同單位的尺寸轉(zhuǎn)換為統(tǒng)一的標(biāo)準(zhǔn)。然而,有些產(chǎn)品中仍然存在一些單位未知的尺寸。我們可以利用我們的直覺將它們轉(zhuǎn)換為標(biāo)準(zhǔn)尺度,或者刪除數(shù)據(jù)不確定的評(píng)論。

      結(jié)構(gòu)化

      在我們完成了所有的預(yù)處理之后,我們要做的事情就是將數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換成常見的格式,如 csv、json 等,以便讓對(duì)數(shù)據(jù)集感興趣的人能夠很容易地讀取和導(dǎo)入數(shù)據(jù)。

      結(jié)束語

      完成上述所有步驟后,數(shù)據(jù)中的記錄可能如下圖所示:

      亞馬遜工程師分享:如何抓取、創(chuàng)建和構(gòu)造高質(zhì)量的數(shù)據(jù)集

      吸收知識(shí)的最好方法就是動(dòng)手實(shí)踐,所以同學(xué)們現(xiàn)在就可以找個(gè)數(shù)據(jù)集,開始練手啦!

      via:https://towardsdatascience.com/a-practical-guide-to-collecting-ml-datasets-476f1ecf5e35

      雷鋒網(wǎng)雷鋒網(wǎng)

      雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知

      亞馬遜工程師分享:如何抓取、創(chuàng)建和構(gòu)造高質(zhì)量的數(shù)據(jù)集

      分享:
      相關(guān)文章
      當(dāng)月熱門文章
      最新文章
      請(qǐng)?zhí)顚懮暾?qǐng)人資料
      姓名
      電話
      郵箱
      微信號(hào)
      作品鏈接
      個(gè)人簡(jiǎn)介
      為了您的賬戶安全,請(qǐng)驗(yàn)證郵箱
      您的郵箱還未驗(yàn)證,完成可獲20積分喲!
      請(qǐng)驗(yàn)證您的郵箱
      立即驗(yàn)證
      完善賬號(hào)信息
      您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
      立即設(shè)置 以后再說
      主站蜘蛛池模板: 国产精品VA尤物在线观看 | 无码国产成人午夜电影在线观看 | 亚洲大尺度无码无码专线| 日本经典中文字幕人妻| 人妻洗澡被强公日日澡电影| 万山特区| 亚洲中文字幕久久精品蜜桃| 日韩精品人妻中文字幕有| 色又黄又爽18禁免费网站现观看| 性欧美乱熟妇xxxx白浆| 精品视频在线观看免费无码| 扒开双腿被两个男人玩弄视频| 天天综合网网欲色| 成人亚洲国产精品一区不卡| 洛隆县| 内射极品少妇xxxxxhd| 女18一成人免费A级毛片| 国产九九免费| 亚洲午夜福利精品无码不卡| 亚洲国产麻豆综合一区| 四虎www永久在线精品| 亚洲自拍偷拍福利小视频| 色综合久久成人综合网| 龙井市| 成a人片亚洲日本久久| 国产精品久久久久三级| 婷婷99狠狠躁天天躁欧美亚洲一区二区 | 精品少妇人妻AV无码久久| 成年片色大黄全免费网站久久| 亚洲午夜福利717| 久久久久国产精品人妻| 日日插插| 亚洲三区在线观看内射后入| 婷婷色色五月天| 国产精品人人妻人人爽| 黑人又粗又长又大| 成人国产亚洲欧美成人综合网| 99久久亚洲综合精品成人网| 产精品视频在线观看免费| 青柠影院免费观看高清电视剧丁香| 丰满人妻熟妇乱又伦精品视|