Python爬取京東商品評(píng)價(jià)(動(dòng)態(tài)網(wǎng)頁(yè)的爬取)

完整代碼可以關(guān)注公眾號(hào):Romi的雜貨鋪

首先打開京東的任意幾個(gè)商品頁(yè)面,并觀察URL添祸,可以發(fā)現(xiàn)都是https://item.jd.com/+數(shù)字+.htm的格式趾断,而且數(shù)字也隨著商品的改變而改變媚送,基本上可以確定這串?dāng)?shù)字是商品ID

image

之后我們找到網(wǎng)頁(yè)的源碼并隨便復(fù)制一句評(píng)論,在網(wǎng)頁(yè)源碼中查找羽戒,發(fā)現(xiàn)并沒(méi)有找到評(píng)論內(nèi)容缤沦,說(shuō)明jd的評(píng)論頁(yè)面并非靜態(tài)網(wǎng)頁(yè)

AJAX:
AJAX的全稱是Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)。
ajax不是新的編程語(yǔ)言易稠,而是一種使用現(xiàn)有標(biāo)準(zhǔn)的新方法缸废。ajax是與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁(yè)的藝術(shù),在不重新加載整個(gè)頁(yè)面的情況下驶社。
ajax是一種在無(wú)需重新加載整個(gè)網(wǎng)頁(yè)的情況下企量,能夠更新部分網(wǎng)頁(yè)的技術(shù)。
ajax是一種用于創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁(yè)的技術(shù)亡电。通過(guò)在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換届巩。ajax可以使網(wǎng)頁(yè)實(shí)現(xiàn)異步更新。這意味著可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下份乒,對(duì)網(wǎng)頁(yè)的某部分進(jìn)行更新恕汇。而傳統(tǒng)的網(wǎng)頁(yè)(不使用ajax)如果需要更新內(nèi)容,必須重載整個(gè)網(wǎng)頁(yè)面或辖。

既然確定是AJAX的方式加載瘾英,我們可以直接打開chrome的調(diào)試工具,在network中的XHR和JS中尋找保存有評(píng)論的文件颂暇。注意這里必須先下拉到評(píng)論頁(yè)面使數(shù)據(jù)文件加載下來(lái)缺谴,否則會(huì)找不到加載的數(shù)據(jù)文件

我們可以通過(guò)兩種方式來(lái)查找包含評(píng)論的文件:
1.可以在js和XHR中尋找comment關(guān)鍵字,查看是否有文件符合要求耳鸯,并對(duì)符合要求的結(jié)果篩選
2.評(píng)論在頁(yè)面的最下方瓣赂,根據(jù)文件的加載順序可以大致了解到會(huì)在后面榆骚,從后面開始找即可

最終確定js文件,如下圖所示

image

這樣我們就可以確定評(píng)論的請(qǐng)求地址并開始抓取

import requestsimport jsonurl='https://item.jd.com/52297931949.html'jsonurl='https://club.jd.com/comment/productPageComments.action?productId=52297931949&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1'html=requests.get(jsonurl).text#print(html)josntext=json.loads(html)comments= josntext['comments']for comment in comments:    content = comment['content']    print(content)

這里需要注意一下原始的jsonurl得到的文件并不是標(biāo)準(zhǔn)的json文件格式煌集,我們可以將得到的文本內(nèi)容復(fù)制到https://www.json.cn發(fā)現(xiàn)這并不是一個(gè)標(biāo)準(zhǔn)的josn文件妓肢,所以直接loads()會(huì)直接報(bào)錯(cuò):json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0),只要返
回的對(duì)象不是josn對(duì)象就會(huì)出現(xiàn)此錯(cuò)誤
解決的方法有兩個(gè)苫纤,一是將URL中的?callback=fetchJSON_comment98去除碉钠,另外一種方法是將返回的文本對(duì)象中的fetchJSON_comment98替換為空

得到所需要的json文件后就可以將數(shù)據(jù)存到sqllite中了
sqllite是python內(nèi)置的關(guān)系型數(shù)據(jù)庫(kù),具有以下優(yōu)點(diǎn):

  • 不需要一個(gè)單獨(dú)的服務(wù)器進(jìn)程或操作的系統(tǒng)(無(wú)服務(wù)器的)卷拘。

  • SQLite不需要配置喊废,這意味著不需要安裝或管理。

  • 一個(gè)完整的SQLite數(shù)據(jù)庫(kù)是存儲(chǔ)在一個(gè)單一的跨平臺(tái)的磁盤文件栗弟。

  • SQLite是非常小的污筷,是輕量級(jí)的,完全配置時(shí)小于 400KiB乍赫,省略可選功能配置時(shí)小于250KiB瓣蛀。

  • SQLite是自給自足的,這意味著不需要任何外部的依賴雷厂。

  • SQLite事務(wù)是完全兼容 ACID 的惋增,允許從多個(gè)進(jìn)程或線程安全訪問(wèn)。

  • SQLite支持 SQL92(SQL2)標(biāo)準(zhǔn)的大多數(shù)查詢語(yǔ)言的功能改鲫。

  • SQLite使用 ANSI-C 編寫的诈皿,并提供了簡(jiǎn)單和易于使用的 API。

  • SQLite 在 UNIX(Linux, Mac OS-X, Android,iOS)和 Windows(Win32, WinCE,WinRT)中運(yùn)行像棘。

python操作SQLite流程與連接其他的數(shù)據(jù)庫(kù)相同稽亏,大概分為以下五步

  • 通過(guò)sqlite3.open()創(chuàng)建與數(shù)據(jù)庫(kù)文件的連接對(duì)象connection;

  • 通過(guò)connection.cursor()創(chuàng)建光標(biāo)對(duì)象cursor缕题;

  • 通過(guò)cursor.execute()執(zhí)行SQL語(yǔ)句措左;

  • 通過(guò)connection.commit()提交當(dāng)前的事務(wù),或者通過(guò)cursor.fetchall()獲得查詢結(jié)果避除;

  • 通過(guò)connection.close()關(guān)閉與數(shù)據(jù)庫(kù)文件的連接

這一部分代碼如下所示

conn=sqlite3.connect("comments.db")#建立連接,數(shù)據(jù)庫(kù)存在時(shí)胸嘁,直接連接瓶摆;不存在時(shí),創(chuàng)建相應(yīng)數(shù)據(jù)庫(kù)#新建一張表conn.execute('''CREATE TABLE Comments_jd      (ID text PRIMARY KEY     NOT NULL,      comment text     );''')#注意sql語(yǔ)句中使用了格式化輸出的占位符%s和%d來(lái)表示將要插入的變量性宏,其中%s需要加引號(hào)''for comment in comments:    sql = "insert into Comments_jd(ID,comment) values('%s','%s')" % (comment['id'],comment['content'])    conn.execute(sql)conn.commit()# 關(guān)閉數(shù)據(jù)庫(kù)連接conn.close()

之后檢查以下數(shù)據(jù)是否有問(wèn)題:

conn=sqlite3.connect("comments.db")cursor = conn.execute("select *  from Comments_jd")for row in cursor:    print('ID = ', row[0], '  Comment = ', row[1])conn.close()

得到的結(jié)果如下圖所示

image

這樣整個(gè)流程就搞定了

原文鏈接http://smilecoc.vip/2020/03/02/%E4%BA%AC%E4%B8%9C%E5%95%86%E5%93%81%E8%AF%84%E8%AE%BA%E7%88%AC%E8%99%AB/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末群井,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子毫胜,更是在濱河造成了極大的恐慌书斜,老刑警劉巖诬辈,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異荐吉,居然都是意外死亡焙糟,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門样屠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)穿撮,“玉大人,你說(shuō)我怎么就攤上這事痪欲≡么” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵业踢,是天一觀的道長(zhǎng)栗柒。 經(jīng)常有香客問(wèn)我,道長(zhǎng)知举,這世上最難降的妖魔是什么瞬沦? 我笑而不...
    開封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘灌侣。我一直安慰自己补君,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開白布高氮。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪屡江。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天赛不,我揣著相機(jī)與錄音惩嘉,去河邊找鬼。 笑死踢故,一個(gè)胖子當(dāng)著我的面吹牛文黎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播殿较,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼耸峭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了淋纲?” 一聲冷哼從身側(cè)響起劳闹,我...
    開封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后本涕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體业汰,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年菩颖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了样漆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡位他,死狀恐怖氛濒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鹅髓,我是刑警寧澤舞竿,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站窿冯,受9級(jí)特大地震影響骗奖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜醒串,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一执桌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芜赌,春花似錦仰挣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至洲愤,卻和暖如春颓芭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背柬赐。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工亡问, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肛宋。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓州藕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親酝陈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子床玻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349