當前位置:首頁 » 編程語言 » python京東評論

python京東評論

發布時間: 2022-09-12 01:24:20

python使用json爬取京東評論,在瀏覽器頁面的request url 打開是空白的,所以導致No JSON object

json不是一種格式嗎,能當爬蟲用?你訪問的url既然是空白的,那就說明不是這個url,注意找找究竟是哪個url,能訪問並且顯示想要的內容才是對的。最後就是如果能訪問,爬蟲卻抓取不下來,就得考慮是不是被檢測到爬蟲了,需要修改請求頭部等信息隱藏自身。

㈡ Python爬蟲可以爬取什麼

Python爬蟲可以爬取的東西有很多,Python爬蟲怎麼學?簡單的分析下:

如果你仔細觀察,就不難發現,懂爬蟲、學習爬蟲的人越來越多,一方面,互聯網可以獲取的數據越來越多,另一方面,像 Python這樣的編程語言提供越來越多的優秀工具,讓爬蟲變得簡單、容易上手。

利用爬蟲我們可以獲取大量的價值數據,從而獲得感性認識中不能得到的信息,比如:

知乎:爬取優質答案,為你篩選出各話題下最優質的內容。

淘寶、京東:抓取商品、評論及銷量數據,對各種商品及用戶的消費場景進行分析。

安居客、鏈家:抓取房產買賣及租售信息,分析房價變化趨勢、做不同區域的房價分析。

拉勾網、智聯:爬取各類職位信息,分析各行業人才需求情況及薪資水平。

雪球網:抓取雪球高回報用戶的行為,對股票市場進行分析和預測。

爬蟲是入門Python最好的方式,沒有之一。Python有很多應用的方向,比如後台開發、web開發、科學計算等等,但爬蟲對於初學者而言更友好,原理簡單,幾行代碼就能實現基本的爬蟲,學習的過程更加平滑,你能體會更大的成就感。

掌握基本的爬蟲後,你再去學習Python數據分析、web開發甚至機器學習,都會更得心應手。因為這個過程中,Python基本語法、庫的使用,以及如何查找文檔你都非常熟悉了。

對於小白來說,爬蟲可能是一件非常復雜、技術門檻很高的事情。比如有人認為學爬蟲必須精通 Python,然後哼哧哼哧系統學習 Python 的每個知識點,很久之後發現仍然爬不了數據;有的人則認為先要掌握網頁的知識,遂開始 HTMLCSS,結果入了前端的坑,瘁……

但掌握正確的方法,在短時間內做到能夠爬取主流網站的數據,其實非常容易實現,但建議你從一開始就要有一個具體的目標。

在目標的驅動下,你的學習才會更加精準和高效。那些所有你認為必須的前置知識,都是可以在完成目標的過程中學到的。這里給你一條平滑的、零基礎快速入門的學習路徑。

1.學習 Python 包並實現基本的爬蟲過程

2.了解非結構化數據的存儲

3.學習scrapy,搭建工程化爬蟲

4.學習資料庫知識,應對大規模數據存儲與提取

5.掌握各種技巧,應對特殊網站的反爬措施

6.分布式爬蟲,實現大規模並發採集,提升效率

學習 Python 包並實現基本的爬蟲過程

大部分爬蟲都是按「發送請求——獲得頁面——解析頁面——抽取並儲存內容」這樣的流程來進行,這其實也是模擬了我們使用瀏覽器獲取網頁信息的過程。

Python中爬蟲相關的包很多:urllib、requests、bs4、scrapy、pyspider 等,建議從requests+Xpath 開始,requests 負責連接網站,返回網頁,Xpath 用於解析網頁,便於抽取數據。

如果你用過 BeautifulSoup,會發現 Xpath 要省事不少,一層一層檢查元素代碼的工作,全都省略了。這樣下來基本套路都差不多,一般的靜態網站根本不在話下,豆瓣、糗事網路、騰訊新聞等基本上都可以上手了。

當然如果你需要爬取非同步載入的網站,可以學習瀏覽器抓包分析真實請求或者學習Selenium來實現自動化,這樣,知乎、時光網、貓途鷹這些動態的網站也可以迎刃而解。

了解非結構化數據的存儲

爬回來的數據可以直接用文檔形式存在本地,也可以存入資料庫中。

開始數據量不大的時候,你可以直接通過 Python 的語法或 pandas 的方法將數據存為csv這樣的文件。

當然你可能發現爬回來的數據並不是干凈的,可能會有缺失、錯誤等等,你還需要對數據進行清洗,可以學習 pandas 包的基本用法來做數據的預處理,得到更干凈的數據。

學習 scrapy,搭建工程化的爬蟲

掌握前面的技術一般量級的數據和代碼基本沒有問題了,但是在遇到非常復雜的情況,可能仍然會力不從心,這個時候,強大的 scrapy 框架就非常有用了。

scrapy 是一個功能非常強大的爬蟲框架,它不僅能便捷地構建request,還有強大的 selector 能夠方便地解析 response,然而它最讓人驚喜的還是它超高的性能,讓你可以將爬蟲工程化、模塊化。

學會 scrapy,你可以自己去搭建一些爬蟲框架,你就基本具備爬蟲工程師的思維了。

學習資料庫基礎,應對大規模數據存儲

爬回來的數據量小的時候,你可以用文檔的形式來存儲,一旦數據量大了,這就有點行不通了。所以掌握一種資料庫是必須的,學習目前比較主流的 MongoDB 就OK。

MongoDB 可以方便你去存儲一些非結構化的數據,比如各種評論的文本,圖片的鏈接等等。你也可以利用PyMongo,更方便地在Python中操作MongoDB。

因為這里要用到的資料庫知識其實非常簡單,主要是數據如何入庫、如何進行提取,在需要的時候再學習就行。

掌握各種技巧,應對特殊網站的反爬措施

當然,爬蟲過程中也會經歷一些絕望啊,比如被網站封IP、比如各種奇怪的驗證碼、userAgent訪問限制、各種動態載入等等。

遇到這些反爬蟲的手段,當然還需要一些高級的技巧來應對,常規的比如訪問頻率控制、使用代理IP池、抓包、驗證碼的OCR處理等等。

往往網站在高效開發和反爬蟲之間會偏向前者,這也為爬蟲提供了空間,掌握這些應對反爬蟲的技巧,絕大部分的網站已經難不到你了.

分布式爬蟲,實現大規模並發採集

爬取基本數據已經不是問題了,你的瓶頸會集中到爬取海量數據的效率。這個時候,相信你會很自然地接觸到一個很厲害的名字:分布式爬蟲。

分布式這個東西,聽起來很恐怖,但其實就是利用多線程的原理讓多個爬蟲同時工作,需要你掌握 Scrapy + MongoDB + Redis 這三種工具。

Scrapy 前面我們說過了,用於做基本的頁面爬取,MongoDB 用於存儲爬取的數據,Redis 則用來存儲要爬取的網頁隊列,也就是任務隊列。

所以有些東西看起來很嚇人,但其實分解開來,也不過如此。當你能夠寫分布式的爬蟲的時候,那麼你可以去嘗試打造一些基本的爬蟲架構了,實現一些更加自動化的數據獲取。

你看,這一條學習路徑下來,你已然可以成為老司機了,非常的順暢。所以在一開始的時候,盡量不要系統地去啃一些東西,找一個實際的項目(開始可以從豆瓣、小豬這種簡單的入手),直接開始就好。

因為爬蟲這種技術,既不需要你系統地精通一門語言,也不需要多麼高深的資料庫技術,高效的姿勢就是從實際的項目中去學習這些零散的知識點,你能保證每次學到的都是最需要的那部分。

當然唯一麻煩的是,在具體的問題中,如何找到具體需要的那部分學習資源、如何篩選和甄別,是很多初學者面臨的一個大問題。

以上就是我的回答,希望對你有所幫助,望採納。

㈢ 如何用python爬取一個網站的評論數據

假如一個商品全部評論數據為20w+ 默認好評15w+ 這15w+的默認好評就會不顯示出來。那麼我們可以爬取的數據就只剩下5w+ 接下來 我們就分別爬取全部好評 好評 中評 差評 追加評價 但是就算這些數據加起來 也仍然不足5w+ 上文的博主猜測可能有兩點原因:

1.出現了數據造假,這個數字可能是刷出來的
2.真的有這么多的評論,但這時候系統可能只顯示其中比較新的評論,而對比較舊的評論進行了存檔。
在博主理論的基礎上我也進行了很多相應的測試,就是說無論如何 我們最終都爬不到剩下的5w條數據 只能爬取一部分但這一部分數據也將近上千多條 如果有小夥伴能爬取下更多歡迎補充。

整體思路

全部評價 好評 中評 差評 追加評價的網址都是涉及到一定的參數的 只要修改網頁的數據 在遍歷頁碼 即可完成全部的爬取。

㈣ python中如何循環給對象的屬性賦值

  1. 正在做一個京東評論爬蟲,幾十個欄位,按照欄位順序建好表,存儲的時候也想到了這個問題,屬性一一對應太花時間,類的屬性順序跟返回的json數據key順序一致,能否循環賦值。經過研究,方法如下。每個人情況不一樣,請根據基礎隨機應變。編輯器不太好用,沒縮進。關鍵是eval()和setattr().廣告下自己創建的python技術交流群775648064

  2. 從網上獲取到的數據resp_str="{'username':'xiaoming', 'password'='123456'}"

  3. resp_dict = eval(resp_str),eval函數轉str到dict

  4. classUser():username=Char()password=Integer()
  5. user=User()
  6. foriinresp_dict.key():
    1. setattr(user,i,resp_dict[i])

㈤ 如何用爬蟲抓取京東商品評價

如果是爬蟲,需要你有專業的能力哦,編程語言的基礎,如果用博為小幫就不需要了。
目前很多網頁或者 軟體的數據採集都在用 小幫軟體機器人哦
你是想採集一個類別或者一個產品吧,可以用博 為的小幫 軟體機器人來採集哦,需要設置條件,採集什麼欄位,然後讓小幫軟體機器人自動運行就好了

㈥ python爬取用戶評價的目的與意義

是為了從互聯網上抓取對於我們有價值的信息。
比如說:訪問天貓的網站,搜索對應的商品,然後爬取它的評論數據,可以作為設計前期的市場調研的數據,幫助很大。
在爬蟲領域,Python幾乎是霸主地位,雖然C++、Java、GO等編程語言也可以寫爬蟲,但Python更具優勢,不僅擁有優秀的第三方庫,還可以為我們做很多的事情,比如:收集數據、數據儲存、網頁預處理等。

㈦ 茅台最大的消費群體是哪些人

很多人質疑會有多少人購買或消費茅台酒, 想到說不定可以從電商的評論數據來部分解決這一問題,於是就用Python爬取京東商城53度飛天的評論數據,然後大致進行分析一下。

先看一個最後形成的文字雲,基本上跟預想中一致,到後面再具體分析。

京東商城的數據顯示,53度飛天共有5.2萬+評論,好評度98%。由於京東官方限制,抓取到的數據大概從去年11月到現在,將近一千條,不過作為大致的分析應該沒問題。所取得的數據大致如下圖所示。

看一眼大家的評論先。“禮物“,“藏家裡捨不得喝”“過年有酒喝”“喝起來爽”“還沒喝”“有酒喝了”,感覺買來自己喝的還是不少的。

1.購買者京東用戶等級分布

首先看一下購買茅台者的京東用戶等級情況。

去年11月至今,購買者大致呈倒S型分布,1-2月作為傳統的春節,出現一個小高潮並不奇怪。年後在4/5月探底之後,購買者數量逐漸攀升,單看八月的數據更是恐怖。8月才過去了2/3多,就達到整個數據的34%。雖然由於京東的限制數據可能有所偏差,但基本的趨勢不會差太多。

對於24小時的分布,下午15點出現了一個高潮。推測可能該時間段開始搶購或者有其他的活動。其他的數據基本跟作息時間相一致。

5.評論文本分析

提到茅台,一般會想到什麼呢,送禮、請客,預約、搶購,囤貨、收藏還是其他什麼?從評論數據里也許可以看到一些端倪。

5.1有多少茅台酒用來送禮?

將近4%,不算太多,看看都是怎麼說的。

5.2有多少人買來自己喝?

(⊙﹏⊙)b光靠程序篩選果然成了智障,9條數據里有6條是給自己或家裡人喝的,剩下三個也是送人。修正後比例大致0.64%。

不過再換換其他關鍵詞呢?試試“好喝”這個詞。

這次大部分都符合要求。跟前面加一起大致算2%的比例好了,跟送人的3.85%相比是少了不少。

5.3茅台酒跟節日的關系

大致佔到1.5%。過節過年期間買可能是送人也可能是自飲。從這里的數據來看,應該還是自家喝的多一點。

5.4一直缺貨要搶購?

佔到11%的比例,由於搜索關鍵詞的原因,實際比例可能要更多。

5.5買來都要屯著?

看起來確實有些買來收藏、存著的(還有個要放10年的。。),不過看這比例得打個對折,按4%好了。這其中有收藏的,也有些只是為了多放兩年好喝點,二者大致對半。

6.評論雲文字圖

用jieba進行分詞計算權重,然後製成雲文字圖。

可以看出,評論大致可以分為幾類。

第一類是對購物體驗的評價。如“正品”“真品”“快遞”“信賴”“自營”“放心”等等,這其中很多表達的大概都是對於茅台旗艦店的相對信任,從評論也可以看到,很多評論說真假、檢驗之類,網上的直營方式應該能在很大程度上解決這一問題。另一方面也說明了茅台的宣傳或者透明度還不夠。

第二類是是比較多的評論是價格、漲價、搶到、好不容易、預約,也說明茅台之前一段時間的供不應求。

第三類是對於茅台酒本身的評價,如好喝、好酒、味道、口感一類。這一部分人是忠實的茅粉,也是茅台酒消費的中堅力量。

7.總結

總體而言,購買茅台酒的大都是高收入/消費人群,很大一部分屬於京東最優質的鑽石會員和plus會員。

購買茅台的時間上,節假日相對較多。另一方面跟股市一樣,部分人似乎都有追風的嫌疑。

從評論數據來看,買來送人的還是比較多,但相比之下買來自己喝的也不算少了,跟買來送禮的大致比例2:3或1:1(前面的比例本來是2%:3.8%,但是參考後面幾個方面自飲的比2%要多)。買來收藏或暫時存著之後喝的也不少,二者比例大致1:1。

㈧ 如何用python爬取一本書的評論用戶

京東圖書評論有非常豐富的信息,這裡面就包含了購買日期、書名、作者、好評、中評、差評等等。以購買日期為例,使用Python + Mysql的搭配進行實現,程序不大,才100行。相關的解釋我都在程序里加註了:

  • fromseleniumimportwebdriver

  • frombs4importBeautifulSoup

  • importre

  • importwin32com.client

  • importthreading,time

  • importMySQLdb

  • defmydebug():

  • driver.quit()

  • exit(0)

  • defcatchDate(s):

  • """頁面數據提取"""

  • soup=BeautifulSoup(s)

  • z=[]

  • globalnowtimes

  • m=soup.findAll("div",class_="date-buy")

  • forobjinm:

  • try:

  • tmp=obj.find('br').contents

  • exceptException,e:

  • continue

  • if(tmp!=""):

  • z.append(tmp)

  • nowtimes+=1

  • returnz

  • defgetTimes(n,t):

  • """獲取當前進度"""

  • return"當前進度為:"+str(int(100*n/t))+"%"

  • #———————————————————————————————————|程序開始|—————————————————————————————————

  • #確定圖書大類

  • cate={"3273":"歷史","3279":"心理學","3276":"政治軍事","3275":"國學古籍","3274":"哲學宗教","3277":"法律","3280":"文化","3281":"社會科學"}

  • #斷點續抓

  • num1=input("bookid:")

  • num2=input("pagenumber:")

  • #生成圖書大類鏈接,共需17355*20=347100次

  • totaltimes=347100.0

  • nowtimes=0

  • #開啟webdirver的PhantomJS對象

  • #driver=webdriver.PhantomJS()

  • driver=webdriver.Ie('C:Python27ScriptsIEDriverServer')

  • #driver=webdriver.Chrome('C:Python27Scriptschromedriver')

  • #讀出Mysql中的評論頁面,進行抓取

  • # 連接資料庫

  • try:

  • conn=MySQLdb.connect(host='localhost',user='root',passwd='',db='jd')

  • exceptException,e:

  • printe

  • sys.exit()

  • # 獲取cursor對象

  • cursor=conn.cursor()

  • sql="SELECT * FROM booknew ORDER BY pagenumber DESC"

  • cursor.execute(sql)

  • alldata=cursor.fetchall()

  • flag=0

  • flag2=0

  • # 如果有數據返回就循環輸出,htt/review/10178500-1-154.html

  • ifalldata:

  • forrecinalldata:

  • #rec[0]--bookid,rec[1]--cateid,rec[2]--pagenumber

  • if(rec[0]!=str(num1)andflag==0):

  • continue

  • else:

  • flag=1

  • forpinrange(num2,rec[2]):

  • if(flag2==0):

  • num2=0

  • flag2=1

  • p+=1

  • link="htteview/"+rec[0]+"-1-"+str(p)+".html"

  • #抓網頁

  • driver.get(link)

  • html=driver.page_source

  • #抓評論

  • buydate=catchDate(html)

  • #寫入資料庫

  • forzinbuydate:

  • sql="INSERT INTO ljj (id, cateid, bookid, date) VALUES (NULL, '"+rec[0]+"','"+rec[1]+"','"+z[0]+"');"

  • try:

  • cursor.execute(sql)

  • exceptException,e:

  • printe

  • conn.commit()

  • printgetTimes(nowtimes,totaltimes)

  • driver.quit()

  • cursor.close()

  • conn.close()




京東圖書評論有非常豐富的信息,這裡面就包含了購買日期、書名、作者、好評、中評、差評等等。以購買日期為例,使用Python + Mysql的搭配進行實現,程序不大,才100行。相關的解釋我都在程序里加註了:

  • fromseleniumimportwebdriver

  • frombs4importBeautifulSoup

  • importre

  • importwin32com.client

  • importthreading,time

  • importMySQLdb

  • defmydebug():

  • driver.quit()

  • exit(0)

  • defcatchDate(s):

  • """頁面數據提取"""

  • soup=BeautifulSoup(s)

  • z=[]

  • globalnowtimes

  • m=soup.findAll("div",class_="date-buy")

  • forobjinm:

  • try:

  • tmp=obj.find('br').contents

  • exceptException,e:

  • continue

  • if(tmp!=""):

  • z.append(tmp)

  • nowtimes+=1

  • returnz

  • defgetTimes(n,t):

  • """獲取當前進度"""

  • return"當前進度為:"+str(int(100*n/t))+"%"

  • #———————————————————————————————————|程序開始|—————————————————————————————————

  • #確定圖書大類

  • cate={"3273":"歷史","3279":"心理學","3276":"政治軍事","3275":"國學古籍","3274":"哲學宗教","3277":"法律","3280":"文化","3281":"社會科學"}

  • #斷點續抓

  • num1=input("bookid:")

  • num2=input("pagenumber:")

  • #生成圖書大類鏈接,共需17355*20=347100次

  • totaltimes=347100.0

  • nowtimes=0

  • #開啟webdirver的PhantomJS對象

  • #driver=webdriver.PhantomJS()

  • driver=webdriver.Ie('C:Python27ScriptsIEDriverServer')

  • #driver=webdriver.Chrome('C:Python27Scriptschromedriver')

  • #讀出Mysql中的評論頁面,進行抓取

  • # 連接資料庫

  • try:

  • conn=MySQLdb.connect(host='localhost',user='root',passwd='',db='jd')

  • exceptException,e:

  • printe

  • sys.exit()

  • # 獲取cursor對象

  • cursor=conn.cursor()

  • sql="SELECT * FROM booknew ORDER BY pagenumber DESC"

  • cursor.execute(sql)

  • alldata=cursor.fetchall()

  • flag=0

  • flag2=0

  • # 如果有數據返回就循環輸出,httreview/10178500-1-154.html

  • ifalldata:

  • forrecinalldata:

  • #rec[0]--bookid,rec[1]--cateid,rec[2]--pagenumber

  • if(rec[0]!=str(num1)andflag==0):

  • continue

  • else:

  • flag=1

  • forpinrange(num2,rec[2]):

  • if(flag2==0):

  • num2=0

  • flag2=1

  • p+=1

  • link="ht.com/review/"+rec[0]+"-1-"+str(p)+".html"

  • #抓網頁

  • driver.get(link)

  • html=driver.page_source

  • #抓評論

  • buydate=catchDate(html)

  • #寫入資料庫

  • forzinbuydate:

  • sql="INSERT INTO ljj (id, cateid, bookid, date) VALUES (NULL, '"+rec[0]+"','"+rec[1]+"','"+z[0]+"');"

  • try:

  • cursor.execute(sql)

  • exceptException,e:

  • printe

  • conn.commit()

  • printgetTimes(nowtimes,totaltimes)

  • driver.quit()

  • cursor.close()

  • conn.close()




㈨ Learning Python 第五版 原版 有這么貴么(在京東上300多,600多) 現在最新

中文最新的現在是第四版,沒有必要追最新版,服從業務需求來。

㈩ 如何用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天以內進行評論,因此我們可以近似的認為在一個月的時間維度中評論時間的變化趨勢代表了用戶購買商品的變化趨勢。

熱點內容
巴法雲伺服器帶寬 發布:2025-01-12 13:15:26 瀏覽:676
搭建國外伺服器需要多少錢 發布:2025-01-12 13:08:01 瀏覽:827
我的世界mod伺服器開荒 發布:2025-01-12 13:07:10 瀏覽:757
sql優化書 發布:2025-01-12 13:07:09 瀏覽:455
高校網站伺服器搭建與維護論文 發布:2025-01-12 13:06:31 瀏覽:711
sqlserver實例沒有 發布:2025-01-12 12:57:18 瀏覽:252
代碼文件伺服器地址怎麼寫 發布:2025-01-12 12:50:47 瀏覽:760
java中方法與 發布:2025-01-12 12:50:13 瀏覽:655
如何快速查找c語言編譯時的錯 發布:2025-01-12 12:49:56 瀏覽:32
看門狗上傳病毒 發布:2025-01-12 12:32:54 瀏覽:326