python京東價格
㈠ 學python學費多少
想要學習Python語言的話,那麼大家肯定都會去對比現在市面上Python培訓機構的價格。現在線下好的Python培訓機構價格大概兩萬元左右,然後好的線上的Python培訓機構的價格大概在一萬元左右。
線下培訓班屬於面對面授課,線上的話是通過視頻直播或者錄播課程的方式進行授課,這兩種上課方式的價格是不一樣的,如果說大家要問小編哪種上課方式比較好的話,我覺得根據自己的實際情況選擇即可。如果你是零基礎的學員建議參加線下Python培訓機構,如果具有一定基礎的情況下,可以選擇線上培訓班。
線上培訓和線下培訓也有很大的差異,線下Python培訓機構要有固定的場地、每個班級配有講師、班主任、助教、上課設備以及維修等費用,成本較高,費用也會高一些;而線上Python培訓機構除了講師、班主任、助教之外,一些多餘的費用都可以直接省去,所以相對於而言學費比較便宜,但也存在一定的弊端,需要很強的自製力,學習氛圍沒有線下培訓班好。
㈡ 如何用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天以內進行評論,因此我們可以近似的認為在一個月的時間維度中評論時間的變化趨勢代表了用戶購買商品的變化趨勢。
㈢ 圖形編程和python編程共2500元貴嗎
不貴。
從初級的圖形化編程開始到後面的Python編程,每個課程體系的價格都是不一樣的,總價介於3000元到1萬元之間,你這個價格算是比較便宜的。