爬蟲學習筆記:淘寶天貓商品評論爬蟲:爬取某款熱水器商品評論


1、雜語

近期課程需要爬取淘寶、天貓商品評論信息,進行數據挖掘分析和情感分析。在網上查找相關資料,翻閱一些博客和csdn文章,對淘寶天貓商品評論爬蟲有了一些了解,並且成功爬取到需要的數據。因此,在此對這幾天的學習做個總結,也給有同樣需求的朋友一點參考。

2、目的和方法

2.1 目的

本文目的很明確,爬取天貓(淘寶)中某個商品的評論信息,信息包括商品的型號、用戶評論(主要分析這兩個信息)。

商品鏈接地址:

https://detail.tmall.com/item.htm?spm=a230r.1.14.6.1fbd56fdVF7LzY&id=566140365862&cm_id=140105335569ed55e27b&abbucket=16

 

 2.2 爬蟲方法

爬蟲說簡單也簡單,說難也難。掌握了爬蟲程序的邏輯,你就能實現爬蟲,當然這一切還需要你有相關知識作為基石支撐。爬蟲本質上是在模仿人的操作,請求網頁,獲取數據。爬蟲天貓(淘寶)商品評論的這個過程,其實與你查看天貓(淘寶)評論的過程是一致的。下面具體介紹每一步操作,我會盡量介紹的詳細一些:

step1:獲取cookie信息與評論url地址

解釋:cookie是用目標網站返回的驗證密鑰,當你申請訪問某個網站時,該網站會核對你的cookie,驗證成功才會將該網站的數據傳輸給你。因此,如果我們想要使用代碼訪問天貓商品評論,就需要天貓網站發送給我們的cookie,模擬登陸。

1、登陸天貓(賬戶、密碼登陸)

 2、選中某款商品,如本文中選擇了美的的一款熱水器。然后點擊右鍵(Google瀏覽器右鍵)檢查,查看網頁源碼。

 3、在network中找到list_detail_rate.htm文件,並在該文件中抓取header包。具體操作為:檢查后,得到出現下面頁面,點擊network,選擇顯示js文件,然后在name中尋找list_detail_rate.htm文件,查詢一遍,如果發現沒有,則點擊刷新,在點擊累計評論,name中就會自動加載出list_detail_rate.htm文件。PS:如果還沒有找到,在評論里面翻頁,這樣name中一定2會出現該文件。

 4、抓取cookie信息

在上一步中已經抓取到list_detail_rate.htm文件的header,在header中包含了許多信息,包括cookie,每一頁評論url地址,以及你的瀏覽器信息。但是我們暫時只需要cookie信息和評論的url地址。

如下圖:該url地址即為該頁評論的url地址,分析其組成我們很容易就可以發現,該url地址中的Page控制頁數。因此,每一頁評論的url地址我們就能確定了。下拉即可發現,cookie居然也在這里面。粘貼它,備用。

  

step2:獲取請求頭信息user-agent

方法一:網上直接搜索請求頭user-agent,隨意粘貼一個就能夠使用。

 方法二:在上一步的header里面下拉,找到user-agent,粘貼即可。

 step3:查看評論數據

繼續查看list_detail_rata.htm文件,點擊preview,再將數據展開,可以發現jsonp文件中包含了我們需要的評論數據信息,包括商品評論、評論時間,有無追加,商品型號、用戶名等信息。如下圖

 

 從這兩張圖我們能確定,我們只需要請求到這個文件,在對這個文件解析即可獲得我們需要的商品評論。從中我們能得到商品評論的頁數,99頁、商品評論數據,以及所評論的商品型號。下面只需要編寫程序提取其中的信息即可。

 step4:編寫程序

1、導入庫文件,requests,re,pd,time

#導入庫文件
import requests
from bs4 import  BeautifulSoup as bs4
import time
import re
import pandas as pd

2、建立請求頭(headers),包含cookie、user-agent,referer(商品鏈接)

def get_content(url_lists):
  headers = {
        #cookie網絡驗證,需要先登陸,獲取登陸以后的網絡驗證cookie,
        'cookie': 't=38c495563775b3b0c8a41a65da4f7c47; _tb_token_=5ebefe73457bb; cookie2=1f6389e4d007b9668ae799044835a590; dnk=%5Cu65E0%5Cu5FC3%5Cu660E%5Cu6728; hng=CN%7Czh-CN%7CCNY%7C156; tracknick=%5Cu65E0%5Cu5FC3%5Cu660E%5Cu6728; lid=%E6%97%A0%E5%BF%83%E6%98%8E%E6%9C%A8; lgc=%5Cu65E0%5Cu5FC3%5Cu660E%5Cu6728; enc=Zq6icfNyFHjVohVzMeSf%2BIfPHJ7hcR9TqFheMaSRC%2FbJR39SmHLQSGpQ5oMsZ8tqnhSNSH9anWnMyQc%2BPrkcRQ%3D%3D; cna=9KU5FwXkXiUCAbfYlO7jKln+; _m_h5_tk=1e5664f69d74ee30e656464a9483eb50_1589792673771; _m_h5_tk_enc=84bb8b2e3012e443dc0228361cb891bb; uc1=cookie14=UoTUM2jvNUqS2A%3D%3D&cookie16=UtASsssmPlP%2Ff1IHDsDaPRu%2BPw%3D%3D&existShop=false&cookie21=UtASsssmeW6lpyd%2BB%2B3t&cookie15=URm48syIIVrSKA%3D%3D&pas=0; uc3=id2=UU20t7pwAehm4Q%3D%3D&lg2=W5iHLLyFOGW7aA%3D%3D&nk2=rUeYFADn4ZE%3D&vt3=F8dBxGZuHaPt28arGzQ%3D; uc4=nk4=0%40r7Yq6ez6%2FiKCVsunPByL5FY%2Bsg%3D%3D&id4=0%40U2%2Fz8oplkCFeccA5ZVXogFNjFYNM; _l_g_=Ug%3D%3D; unb=2562036378; cookie1=Vv1zqw8QCKeLxmtxWLfD1h937JwOrbk70nwWm1OBXEY%3D; login=true; cookie17=UU20t7pwAehm4Q%3D%3D; _nk_=%5Cu65E0%5Cu5FC3%5Cu660E%5Cu6728; sgcookie=EKhZbjs6mP8oKvbKrBZeV; sg=%E6%9C%A88b; csg=21f92331; l=eBIW36YmQZ6s21ejBO5Nlurza77OBQRfGsPzaNbMiIHca6CVsFi_tNQDiUeH-dtjgtCEietzEdARfRH98Ezd0ZqhuJ1REpZZnxvO.; isg=BMHBO7ure9P4wJfmuEBqzsb80A3b7jXgde5qciMUQEhlCuXcaz-isPtM7H5MAs0Y',
        #商品的鏈接地址,每個商品鏈接不同
        'referer': 'https://detail.tmall.com/item.htm?spm=a230r.1.14.6.1fbd56fdVF7LzY&id=566140365862&cm_id=140105335569ed55e27b&abbucket=16',
        #電腦瀏覽器信息瀏覽器,這個信息是固定的,
        'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
    }

3、獲取評論url地址,根據之前發現的商品評論url地址特點,構建函數。忘記了可以看看step1的第四步。

#獲取評論url地址
def get_url(num):
    page_url = []
    #list_detail_rate.htm文件中保存了商品評論信息,因此需求請求該url地址,
    # 這個地址的尋找方法是:首先,確定你要爬蟲的頁面,點擊右鍵的檢查,
    # 然后再點擊network,在里面尋找list_detail_rate.htm包文件,在該文件的headers信息中可以找到url信息
    urlfirst = 'https://rate.tmall.com/list_detail_rate.htm?itemId=566140365862&spuId=1340127862&sellerId=1132304427&order=3&currentPage='
    urllast = '&append=1&content=1&tagId=&posi=&picture=0&groupId=&ua=098%23E1hve9vovZ9vUvCkvvvvvjiPn2c96jEbPFdW0jrCPmP90jl8Ps5yAjinR2FpAjEb9phv8cMGclG7zYswzpj87kdoE93ukbj2J1%2BhTKuUAbt39JW2g08Ly0eEpIEmdphvmpvh9IbzYAmwR86CvvyvCv4m%2Bfh9FWVrvpvEvvCZvli4UU2pRphvCvvvvvmCvpvWzC1EOUFNznswjo143QhvCvvhvvm5vpvhvvmv9FyCvvpvvvvv2QhvCvvvMM%2FtvpvIvvvvvhCvvvvvvUUFphvUqvvv9krvpvQvvvmm86CvmVWvvUUdphvUIgyCvvOUvvVvJheivpvUvvmvR7I4ueWEvpCWmUDfvvwdiNLh1CeXaHFXS47BhC3qVUcnDOmOjLEc6acEKBmAVAdvaNoxdX3l8bmxfwoOd56OfwLvaB4AVAdvaNoxdX31bbmxfJmK59hCvvOvCvvvphmCvpvWzC1EOUFSznswSpl4RphvCvvvvvvtvpvhvvvvvv%3D%3D&itemPropertyId=&itemPropertyIndex=&userPropertyId=&userPropertyIndex=&rateQuery=&location=&needFold=0&_ksTS=1589850461438_1131&callback=jsonp1132'
    for i in range(1,num,1):
        url = urlfirst+str(i)+urllast
        page_url.append(url)
    return page_url

4、請求數據,使用requests庫,requests參數,url地址為目標地址,headers為傳輸的驗證信息,傳輸回來為html源碼,需要以text格式查看。

 
   comment = [] # 定義評論字段 auctionSku = [] # 定義熱水器型號信息 for i in range(0,len(url_lists)): print('正在爬取第{}頁評論'.format(str(i+1))) #請求數據 data = requests.get(url_lists[i],headers = headers).text time.sleep(10) #數據提取 comment.extend(re.findall('rateContent":"(.*?)"fromMall"', data)) auctionSku.extend((re.findall('"auctionSku":"(.*?)"',data)))

 5、數據保存,保存為數表形式,存儲格式為xls。

 #定義數表
        com = pd.DataFrame()
        com['型號'] = auctionSku
        com['評論'] = comment
        print(com)
        com.to_excel('商品評論數據.xls')

 6、主函數

if __name__ == '__main__':
    num = 99 #頁數,商品總頁數為99頁
    url_list = get_url(num)
    get_content(url_list)

3、完整程序

# -*- coding:utf-8 -*-
#大明王
#天貓美的熱水器商品評論爬蟲 #美的電熱水器電家用衛生間洗澡淋浴60/50升小型儲水式即熱一級TK1,型號:F6021-TK1(HEY) #導入庫文件 import requests from bs4 import BeautifulSoup as bs4 import time import re import pandas as pd #獲取評論url地址 def get_url(num): page_url = [] #list_detail_rate.htm文件中保存了商品評論信息,因此需求請求該url地址, # 這個地址的尋找方法是:首先,確定你要爬蟲的頁面,點擊右鍵的檢查, # 然后再點擊network,在里面尋找list_detail_rate.htm包文件,在該文件的headers信息中可以找到url信息 urlfirst = 'https://rate.tmall.com/list_detail_rate.htm?itemId=566140365862&spuId=1340127862&sellerId=1132304427&order=3&currentPage=' urllast = '&append=1&content=1&tagId=&posi=&picture=0&groupId=&ua=098%23E1hve9vovZ9vUvCkvvvvvjiPn2c96jEbPFdW0jrCPmP90jl8Ps5yAjinR2FpAjEb9phv8cMGclG7zYswzpj87kdoE93ukbj2J1%2BhTKuUAbt39JW2g08Ly0eEpIEmdphvmpvh9IbzYAmwR86CvvyvCv4m%2Bfh9FWVrvpvEvvCZvli4UU2pRphvCvvvvvmCvpvWzC1EOUFNznswjo143QhvCvvhvvm5vpvhvvmv9FyCvvpvvvvv2QhvCvvvMM%2FtvpvIvvvvvhCvvvvvvUUFphvUqvvv9krvpvQvvvmm86CvmVWvvUUdphvUIgyCvvOUvvVvJheivpvUvvmvR7I4ueWEvpCWmUDfvvwdiNLh1CeXaHFXS47BhC3qVUcnDOmOjLEc6acEKBmAVAdvaNoxdX3l8bmxfwoOd56OfwLvaB4AVAdvaNoxdX31bbmxfJmK59hCvvOvCvvvphmCvpvWzC1EOUFSznswSpl4RphvCvvvvvvtvpvhvvvvvv%3D%3D&itemPropertyId=&itemPropertyIndex=&userPropertyId=&userPropertyIndex=&rateQuery=&location=&needFold=0&_ksTS=1589850461438_1131&callback=jsonp1132' for i in range(1,num,1): url = urlfirst+str(i)+urllast page_url.append(url) return page_url def get_content(url_lists): headers = { #cookie網絡驗證,需要先登陸,獲取登陸以后的網絡驗證cookie,需要更改 'cookie': 't=38c495563775b3b0c8a41a65da4f7c47; _tb_token_=5ebefe73457bb; cookie2=1f6389e4d007b9668ae799044835a590; dnk=%5Cu65E0%5Cu5FC3%5Cu660E%5Cu6728; hng=CN%7Czh-CN%7CCNY%7C156; tracknick=%5Cu65E0%5Cu5FC3%5Cu660E%5Cu6728; lid=%E6%97%A0%E5%BF%83%E6%98%8E%E6%9C%A8; lgc=%5Cu65E0%5Cu5FC3%5Cu660E%5Cu6728; enc=Zq6icfNyFHjVohVzMeSf%2BIfPHJ7hcR9TqFheMaSRC%2FbJR39SmHLQSGpQ5oMsZ8tqnhSNSH9anWnMyQc%2BPrkcRQ%3D%3D; cna=9KU5FwXkXiUCAbfYlO7jKln+; _m_h5_tk=1e5664f69d74ee30e656464a9483eb50_1589792673771; _m_h5_tk_enc=84bb8b2e3012e443dc0228361cb891bb; uc1=cookie14=UoTUM2jvNUqS2A%3D%3D&cookie16=UtASsssmPlP%2Ff1IHDsDaPRu%2BPw%3D%3D&existShop=false&cookie21=UtASsssmeW6lpyd%2BB%2B3t&cookie15=URm48syIIVrSKA%3D%3D&pas=0; uc3=id2=UU20t7pwAehm4Q%3D%3D&lg2=W5iHLLyFOGW7aA%3D%3D&nk2=rUeYFADn4ZE%3D&vt3=F8dBxGZuHaPt28arGzQ%3D; uc4=nk4=0%40r7Yq6ez6%2FiKCVsunPByL5FY%2Bsg%3D%3D&id4=0%40U2%2Fz8oplkCFeccA5ZVXogFNjFYNM; _l_g_=Ug%3D%3D; unb=2562036378; cookie1=Vv1zqw8QCKeLxmtxWLfD1h937JwOrbk70nwWm1OBXEY%3D; login=true; cookie17=UU20t7pwAehm4Q%3D%3D; _nk_=%5Cu65E0%5Cu5FC3%5Cu660E%5Cu6728; sgcookie=EKhZbjs6mP8oKvbKrBZeV; sg=%E6%9C%A88b; csg=21f92331; l=eBIW36YmQZ6s21ejBO5Nlurza77OBQRfGsPzaNbMiIHca6CVsFi_tNQDiUeH-dtjgtCEietzEdARfRH98Ezd0ZqhuJ1REpZZnxvO.; isg=BMHBO7ure9P4wJfmuEBqzsb80A3b7jXgde5qciMUQEhlCuXcaz-isPtM7H5MAs0Y', #商品的鏈接地址,每個商品鏈接不同需要更改 'referer': 'https://detail.tmall.com/item.htm?spm=a230r.1.14.6.1fbd56fdVF7LzY&id=566140365862&cm_id=140105335569ed55e27b&abbucket=16', #電腦瀏覽器信息瀏覽器,這個信息是固定的,可以不變 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11', } comment = [] # 定義評論字段 auctionSku = [] # 定義熱水器型號信息 for i in range(0,len(url_lists)): print('正在爬取第{}頁評論'.format(str(i+1))) #請求數據 data = requests.get(url_lists[i],headers = headers).text time.sleep(10) #數據提取 comment.extend(re.findall('rateContent":"(.*?)"fromMall"', data)) auctionSku.extend((re.findall('"auctionSku":"(.*?)"',data))) #定義數表 com = pd.DataFrame() com['型號'] = auctionSku com['評論'] = comment print(com) com.to_excel('商品評論數據.xls') if __name__ == '__main__': num = 99 #頁數 url_list = get_url(num) get_content(url_list)

 4、總結

萬事開頭難,加油,致愛學習,努力堅強的你。see you

好書推薦:《你當像鳥飛往你的山》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM