A. 京東如何進行大數據採集和分析
京東進行大數據採集和分析主要是通過用戶行為日誌採集方案(點擊流系統)和通用數據採集方案(數據直通車)。京東的數據目前包含了電商、金融、廣告、配送、智能硬體、運營、線下、線上等場景的數據,每個場景的數據背後都存在著眾多復雜的業務邏輯。為了幫助業務人員降低獲取數據的門檻,簡化數據獲取的流程,同時幫助分析人員方便快捷地進行數據統計分析,進而挖掘數據的潛在價值,京東搭建了一套完整的數據解決方案。
更多關於京東如何進行大數據採集和分析,進入:https://www.abcgonglue.com/ask/b0348f1615822942.html?zd查看更多內容
B. 如何用python獲取京東的評論數據
京東商品評論信息是由JS動態載入的,所以直接抓取商品詳情頁的URL並不能獲得商品評論的信息。因此我們需要先找到存放商品評論信息的文件。這里我們使用Chrome瀏覽器里的開發者工具進行查找。
具體方法是在商品詳情頁點擊滑鼠右鍵,選擇檢查,在彈出的開發者工具界面中選擇Network,設置為禁用緩存(Disable cache)和只查看JS文件。然後刷新頁面。頁面載入完成後向下滾動滑鼠找到商品評價部分,等商品評價信息顯示出來後,在下面Network界面的左側篩選框中輸入proctPageComments,這時下面的載入記錄中只有一條信息,這里包含的就是商品詳情頁的商品評論信息。點擊這條信息,在右側的Preview界面中可以看到其中包含了當前頁面中的評論信息。(抓取價格信息輸入prices)。
復制這條信息,並把URL地址放在瀏覽器中打開,裡麵包含了當前頁的商品評論信息。這就是我們要抓取的URL地址。
仔細觀察這條URL地址可以發現,其中proctId=10001234327是當前商品的商品ID。與商品詳情頁URL中的ID一致。而page=0是頁碼。如果我們要獲取這個商品的所有評論,只需要更改page後面的數字即可。
在獲得了商品評論的真實地址以及URL地址的規律後,我們開始使用python抓取這件商品的700+條評論信息。並對這些信息進行處理和分析。
開始前的准備工作
在開始抓取之前先要導入各種庫文件,這里我們分別介紹下需要導入的每個庫文件的名稱以及在數據抓取和分析中的作用。requests用於進行頁面抓取,time用於設置抓取過程中的Sleep時間,random用於生產隨機數,這里的作用是將抓取頁面的順序打亂,re用於在抓取後的頁面代碼中提取需要的信息,numpy用於常規的指標計算,pandas用於進行數據匯總和透視分析,matplotlib用於繪制各站圖表,jieba用於對評論內容進行分詞和關鍵詞提取。
#導入requests庫(請求和頁面抓取)
import requests
#導入time庫(設置抓取Sleep時間)
import time
#導入random庫(生成亂序隨機數)
import random
#導入正則庫(從頁面代碼中提取信息)
import re
#導入數值計算庫(常規計算)
import numpy as np
#導入科學計算庫(拼表及各種分析匯總)
import pandas as pd
#導入繪制圖表庫(數據可視化)
import matplotlib.pyplot as plt
#導入結巴分詞庫(分詞)
import jieba as jb
#導入結巴分詞(關鍵詞提取)
import jieba.analyse
將爬蟲偽裝成瀏覽器
導入完庫文件後,還不能直接進行抓取,因為這樣很容易被封。我們還需要對爬蟲進行偽裝,是爬蟲看起來更像是來自瀏覽器的訪問。這里主要的兩個工作是設置請求中的頭文件信息以及設置Cookie的內容。
頭文件信息很容易找到,在Chrome的開發者工具中選擇Network,刷新頁面後選擇Headers就可以看到本次訪問的頭文件信息,裡麵包含了一些瀏覽器的技術參數和引薦來源信息。將這些信息直接添加到代碼中就可以,這里我們將頭部信息保存在headers中。
#設置請求中頭文件的信息
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept':'text/html;q=0.9,*/*;q=0.8',
'Accept-Charset':'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Connection':'close',
'Referer':''
}
在查看頭文件信息的旁邊還有一個Cookies標簽,點擊進去就是本次訪問的Cookies信息。這里的Cookies信息與前面頭文件中的Cookie信息一致,不過這里更加清晰。把Request Cookies信息復制到代碼中即可,這里我們將Request Cookies信息保存在Cookie中。
#設置Cookie的內容
cookie={'TrackID':'1_VWwvLYiy1FUr7wSr6HHmHhadG8d1-Qv-TVaw8JwcFG4EksqyLyx1SO7O06_Y_XUCyQMksp3RVb2ezA',
'__jda':'122270672.1507607632.1423495705.1479785414.1479794553.92',
'__jdb':'122270672.1.1507607632|92.1479794553',
'__jdc':'122270672',
'__j':'1507607632',
'__jdv':'122270672|direct|-|none|-|1478747025001',
'areaId':'1',
'cn':'0',
'ipLoc-djd':'1-72-2799-0',
'ipLocation':'%u5317%u4EAC',
'mx':'0_X',
'rkv':'V0800',
'user-key':'216123d5-4ed3-47b0-9289-12345',
'xtest':'4657.553..'}
抓取商品評論信息
設置完請求的頭文件和Cookie信息後,我們開始抓取京東商品評論的信息。前面分析URL的時候說過,URL中包含兩個重要的信息,一個是商品ID,另一個是頁碼。這里我們只抓取一個商品的評論信息,因此商品ID不需要更改。但這個商品的評論有700+條,也就是有近80頁需要抓取,因此頁碼不是一個固定值,需要在0-80之間變化。這里我們將URL分成兩部分,通過隨機生成頁碼然後拼接URL的方式進行抓取。
#設置URL的第一部分
url1=''
#設置URL的第二部分
url2='&pageSize=10&callback=fetchJSON_comment98vv41127'
#亂序輸出0-80的唯一隨機數
ran_num=random.sample(range(80), 80)
為了使抓取過程看起來更加隨機,我們沒有從第1頁一直抓取到第80頁。而是使用random生成0-80的唯一隨機數,也就是要抓取的頁碼編號。然後再將頁碼編號與兩部分URL進行拼接。這里我們只知道商品有700+的評論,但並不知道具體數字,所以抓取范圍定位從0-80頁。
下面是具體的抓取過程,使用for循環每次從0-80的隨機數中找一個生成頁碼編號,與兩部分的URL進行拼接。生成要抓取的URL地址並與前面設置好的頭文件信息和Cookie信息一起發送請求獲取頁面信息。將獲取到的頁面信息進行匯總。每次請求間休息5秒針,避免過於頻繁的請求導致返回空值。
#拼接URL並亂序循環抓取頁面
for i in ran_num:
a = ran_num[0]
if i == a:
i=str(i)
url=(url1+i+url2)
r=requests.get(url=url,headers=headers,cookies=cookie)
html=r.content
else:
i=str(i)
url=(url1+i+url2)
r=requests.get(url=url,headers=headers,cookies=cookie)
html2=r.content
html = html + html2
time.sleep(5)
print("當前抓取頁面:",url,"狀態:",r)
在抓取的過程中輸入每一步抓取的頁面URL以及狀態。通過下面的截圖可以看到,在page參數後面的頁碼是隨機生成的並不連續。
抓取完80個頁面後,我們還需要對頁面進行編碼。完成編碼後就可以看到其中所包含的中文評論信息了。後面大部分苦逼的工作就是要對這些評論信息進行不斷提取和反復的清洗。
#對抓取的頁面進行編碼
html=str(html, encoding = "GBK")
這里建議將抓取完的數據存儲在本地,後續工作可以直接從本地打開文件進行清洗和分析工作。避免每次都要重新抓取數據。這里我們將數據保存在桌面的page.txt文件中。
#將編碼後的頁面輸出為txt文本存儲
file = open("c:\\Users \\Desktop\\page.txt", "w")
file.write(html)
file.close()
讀取文件也比較簡單,直接open加read函數就可以完成了。
#讀取存儲的txt文本文件
html = open('c:\\Users\\ Desktop\\page.txt', 'r').read()
提取信息並進行數據清洗
京東的商品評論中包含了很多有用的信息,我們需要將這些信息從頁面代碼中提取出來,整理成數據表以便進行後續的分析工作。這里應該就是整個過程中最苦逼的數據提取和清洗工作了。我們使用正則對每個欄位進行提取。對於特殊的欄位在通過替換等方式進行提取和清洗。
下面是提取的第一個欄位userClient,也就是用戶發布評論時所使用的設備類型,這類的欄位提取還比較簡單,一行代碼搞定。查看一下提取出來的欄位還比較干凈。使用同樣的方法我們分別提取了以下這些欄位的內容。
#使用正則提取userClient欄位信息
userClient=re.findall(r',"usefulVoteCount".*?,"userClientShow":(.*?),',html)
#使用正則提取userLevel欄位信息
userLevel=re.findall(r'"referenceImage".*?,"userLevelName":(.*?),',html)
#使用正則提取proctColor欄位信息
proctColor=re.findall(r'"creationTime".*?,"proctColor":(.*?),',html)
#使用正則提取recommend欄位信息
recommend=re.findall(r'"creationTime".*?,"recommend":(.*?),',html)
#使用正則提取nickname欄位信息
nickname=re.findall(r'"creationTime".*?,"nickname":(.*?),',html)
#使用正則提取userProvince欄位信息
userProvince=re.findall(r'"referenceImage".*?,"userProvince":(.*?),',html)
#使用正則提取usefulVoteCount欄位信息
usefulVoteCount=re.findall(r'"referenceImage".*?,"usefulVoteCount":(.*?),',html)
#使用正則提取days欄位信息
days=re.findall(r'"usefulVoteCount".*?,"days":(.*?)}',html)
#使用正則提取score欄位信息
score=re.findall(r'"referenceImage".*?,"score":(.*?),',html)</pre>
還有一些欄位比較負責,無法通過正則一次提取出來,比如isMobile欄位,有些值的後面還有大括弧。這就需要進一步的提取和清洗工作。
#使用正則提取isMobile欄位信息
isMobile=re.findall(r'"usefulVoteCount".*?,"isMobile":(.*?),',html)
使用for循環配合替換功能將欄位中所有的}替換為空。替換完成後欄位看起來干凈多了。
#替換掉最後的}
mobile=[]
for m in isMobile:
n=m.replace('}','')
mobile.append(n)
proctSize欄位中包含了胸圍和杯罩兩類信息,為了獲得獨立的杯罩信息需要進行二次提取,將杯罩信息單獨保存出來。
#使用正則提取proctSize欄位信息
proctSize=re.findall(r'"creationTime".*?,"proctSize":(.*?),',html)
使用for循環將proctSize中的第三個字元杯罩信息提取出來,並保持在cup欄位中。
#提取杯罩信息
cup=[]
for s in proctSize:
s1=s[3]
cup.append(s1)
創建評論的日期信息僅依靠正則提取出來的信息還是比較亂,無法直接使用。因此也需要進行二次提取。下面是使用正則提取出的結果。
#使用正則提取時間欄位信息
creationTime1=re.findall(r'"creationTime":(.*?),"referenceName',html)
日期和時間信息處於前20個字元,在二次提取中根據這個規律直接提起每個條目的前20個字元即可。將日期和時間單獨保存為creationTime。
#提取日期和時間
creationTime=[]
for d in creationTime1:
date=d[1:20]
creationTime.append(date)
在上一步日期和時間的基礎上,我們再進一步提取出單獨的小時信息,方法與前面類似,提取日期時間中的第11和12個字元,就是小時的信息。提取完保存在hour欄位以便後續的分析和匯總工作。
#提取小時信息
hour=[]
for h in creationTime:
date=h[10:13]
hour.append(date)
最後要提取的是評論內容信息,頁面代碼中包含圖片的評論信息是重復的,因此在使用正則提取完後還需要對評論信息進行去重。
#使用正則提取評論信息
content=re.findall(r'"guid".*?,"content":(.*?),',html)
使用if進行判斷,排除掉所有包含圖片的評論信息,已達到評論去重的目的。
#對提取的評論信息進行去重
content_1=[]
for i in content:
if not "img" in i:
content_1.append(i)
完成所有欄位信息的提取和清洗後,將這些欄位組合在一起生成京東商品評論數據匯總表。下面是創建數據表的代碼。數據表生成後還不能馬上使用,需要對欄位進行格式設置,例如時間和日期欄位和一些包含數值的欄位。具體的欄位和格式設置依據後續的分析過程和目的。這里我們將creationTime設置為時間格式,並設置為數據表的索引列。將days欄位設置為數值格式。
#將前面提取的各欄位信息匯總為table數據表,以便後面分析
table=pd.DataFrame({'creationTime':creationTime,'hour':hour,'nickname':nickname,'proctColor':proctColor,'proctSize':proctSize,'cup':cup,'recommend':recommend,'mobile':mobile,'userClient':userClient,'userLevel':userLevel,'userProvince':userProvince,'usefulVoteCount':usefulVoteCount,'content_1':content_1,'days':days,'score':score})
#將creationTime欄位更改為時間格式
table['creationTime']=pd.to_datetime(table['creationTime'])
#設置creationTime欄位為索引列
table = table.set_index('creationTime')
#設置days欄位為數值格式
table['days']=table['days'].astype(np.int64)
#查看整理完的數據表
table.head()
這里建議再次保存清洗和預處理完的數據表。我們這里將數據表保存為csv格式。到了這一步可以選擇在Excel中完成後續的數據分析和可視化過程,也可以繼續在python中完成。我們這里選擇繼續在python中完成後續的數據分析和可視化工作。
#保存table數據表
table.to_csv('jd_table.csv')
數據分析及可視化
分月評論數據變化趨勢
首先查看京東商品評論的時間變化趨勢情況,大部分用戶在購買商品後會在10天以內進行評論,因此我們可以近似的認為在一個月的時間維度中評論時間的變化趨勢代表了用戶購買商品的變化趨勢。
C. 關於電商網站資料庫的設計有什麼好的建議
這個問題的核心點在於:不同商品類別差異很大,如何設計通用的存儲方案?簡單來說,用資料庫去存儲所有信息,不管橫表還是縱表,都有明顯的缺陷:橫表:同一個欄位對不同商品含義不一樣,這到了後面開發和維護是很蛋疼的縱表:一個商品的屬性分布到很多行記錄中,業務處理很麻煩,而且縱表的記錄數會非常多,性能會有問題所以不要嘗試只用資料庫去統一解決這個問題,思路擴散一些其實就簡單了:公共表:提煉商品公共的信息放到資料庫,例如商品id、名稱、發布的商家、發布日期、上架狀態擴展表:將變化的信息放到另外一個表,可以是資料庫表,例如電腦商品一個表、服裝一個表;也可以將信息放到MongoDB或者ElasticSearch這類文檔資料庫。搜索組件:擴展表在全文搜索的時候不好實現,因此需要獨立的組件負責搜索,可以用Elastic Search或者Solr來冗餘一份數據,用於搜索。表結構不算復雜,因為項目關系只有SPU,沒有涉及到SKU,但是可以做參考,更多的還是要根據項目實際情況設計。重點說明一下產品表的SPU,Keyword欄位。本來之前設計了關系表,但是發現在做SQL查詢時太痛苦,所以約定了一種數據存儲結構(數據結構的重要性)基於上面的基礎,可以實現URL規則變化的查詢,類似京東的產品查詢URL變化c=1,3 指分類層次關系ev=3_1+4_18 指SPU查詢 按約定規則轉換成字元串再進行查詢。
D. 如何在八爪魚採集京東商城中華為和蘋果手機評論
找到京東商品評論規則然後點擊立即使用,提供要採集的網頁網址,即商品評論頁的鏈接。自定義任務名,然後劃分分組,點擊保存,然後點擊開始採集即可。
八爪魚採集器是深圳視界信息技術有限公司研發的一款業界領先的網頁採集軟體,具有使用簡單,功能強大等諸多優點。
八爪魚採集器是一款全網通用的互聯網數據採集器,模擬人瀏覽網頁的行為,通過簡單的頁面點選,生成自動化的採集流程,從而將網頁數據轉化為結構化數據,存儲於EXCEL或資料庫等多種形式。並提供基於雲計算的大數據雲採集解決方案,實現數據採集。是數據一鍵採集平台。
E. 京東的京豆是怎麼設計資料庫表的
首先我們打開網頁,搜索京東商城。在搜索的結果中,我們選擇第一個。如圖示。
進入京東官網以後,我們點擊右上角的「請登錄」。
然後輸入自己的賬號密碼點擊登錄,如圖。
登錄以後,我們找到「我的京東」,如圖示,點開選擇「我的京豆」。
這個時候,我們就可以看到京豆的全部明細了。
我們可以點擊「收入京豆」查看我們收入的京豆的具體明細。
我們也可以點擊「支出京豆」查看我們消費了多少京豆,我這里沒有消費,所以我的支出京豆是空白。
F. 想從京東採集評論數據來研究,求大神解答
評論數據很多哦,你是想採集一個類別或者一個產品吧,可以用博 為的小幫 軟體機器人來採集哦,需要設置一下條件,採集什麼欄位,然後讓小幫軟體機器人自動運行就好了
目前很多網頁或者 軟體的數據採集都在用 小幫軟體機器人哦
G. 一直在疑問京東商城的資料庫是如何搭建的,那麼多商品,每種商品的參數各不相同,是怎樣設計資料庫的
思路一,使用獨立的商品類表, 構造商品屬性信息,1、N個商品類屬性值表,2、商品基本信息表,3、商品屬性表
思路二,使用key-value模型,使用動態行列轉換模型,將商品屬性信息碎片化存儲,整合型只讀輸出快照,1、公共鍵值表,2、公共類表,3、公共鍵類表,4、屬性值物化表,5、商品基本信息表,6、商品屬性表,6、商品屬性快照表或模型