淘宝评论的爬取

文章禁止转载,违者必究

淘宝网页的评论数据动态加载的,首先要关闭adblock等屏蔽插件广告。还有我登陆了账号。

<pre id="line1"><ul id="J_TabBar" class="tb-tabbar tb-clear" data-spm-anchor-id="2013.1.20140004.i0.323910cfuqpKQZ">  <li class="tb-first"></pre>
<pre id="line1"> 
 <a class="tb-tab-anchor" href="javascript:void(0);" hidefocus="true" shortcut-key="g d" shortcut-label="查看宝贝详情" shortcut-effect="click" data-index="0" data-spm-click="gostr=/tbdetail;locaid=d1" data-spm-anchor-id="2013.1.20140004.d1">宝贝详情</a> 
 <div class="tb-selected-indicator">
</div> 
 </li>  
<li class="selected">  <a class="tb-tab-anchor" href="javascript:void(0);" hidefocus="true" shortcut-key="g c" shortcut-label="查看累计评论" shortcut-effect="click" data-index="1" data-spm-click="gostr=/tbdetail;locaid=d2" data-spm-anchor-id="2013.1.20140004.d2"> 累计评论 
<em class="J_ReviewsCount">6050
</em>
</pre>
<pre id="line1">  
</a> 
 <div class="tb-selected-indicator"></div>  </li> 
 </pre>
<pre id="line1">li id="J_ServiceTab">  <a class="tb-tab-anchor" href="javascript:void(0);" hidefocus="true" data-spm-click="gostr=/tbdetail;locaid=d4" shortcut-key="g z" shortcut-label="查看专享服务" shortcut-effect="click" data-index="4" data-spm-anchor-id="2013.1.20140004.d4"> 
专享服务</a>  
<div class="tb-selected-indicator"></div>  
</li>
</pre>

image.png

通过firefox浏览器,终于找到了评论的url,如下。

image.png

评论的url

这几个url在html源代码中可以找到。

   
    描述加载中
    
    </div>
</div><div id="reviews"
     data-reviewApi = "//rate.taobao.com/detail_rate.htm?userNumId=143813255&amp;auctionNumId=556129616183&amp;showContent=1&amp;currentPage=1&amp;ismore=0&amp;siteID=12"
     data-reviewCountApi = ""
     data-listApi = "//rate.taobao.com/feedRateList.htm?userNumId=143813255&amp;auctionNumId=556129616183&amp;siteId=12&amp;spuId=0"
     data-commonApi = "//rate.taobao.com/detailCommon.htm?userNumId=143813255&amp;auctionNumId=556129616183&amp;siteID=12&amp;spuId=0"
     data-usefulApi = "//rate.taobao.com/vote_useful.htm?userNumId=143813255&amp;auctionNumId=556129616183">
</div>
<div id="deal-record">

找到了评论的url其内容为

jsonp_tbcrate_reviews_list({
    "qnaDisabled": true,
    "watershed": 100,
    "search": "http://11.178.153.195:30051/bin/sp?app=pinglun&outfmt=json&seek_timeout=400&gmt_create=1521907200~&risk_status=0|-1&rate_risk_limit=0&item_id=556129616183&user_id=2970747408&risk_time_now=1537497213&layer_quota=500000&rate_risk_search=1&fold_flag=0&no_risk_status=0|-1&rate_risk_own=0&order=algo_sort:des&s=0&n=20&is_wireless=0&user_id=2970747408&utd_id=2970747408&is_click_sku=0",
    "total": 467,
    "comments": [{
        "date": "2018年09月16日 12:32",
        "shareInfo": {
            "lastReplyTime": "",
            "share": false,
            "pic": 0,
            "reply": 0,
            "userNumIdBase64": ""
        },
        "showDepositIcon": false,
        "o2oRate": null,
        "mainTradeId": 0,
        "raterType": 0,
        "validscore": 1,
        "video": null,
        "photos": [],
        "content": "小巧精致,挺好意思,孩子再大点就可以玩了。带上壳风扇,温度在40多度,装好系统直接在电脑上开ssh加wifi,不用再加显示器键盘鼠标,通电直接连上,爽撒",
        "rateId": 1017227150661,
        "spuRatting": [],
        "auction": {
            "thumbnail": "",
            "link": "//item.taobao.com/item.htm?id=556129616183",
            "auctionPic": "//img.alicdn.com/bao/uploaded/null_40x40.jpg",
            "sku": "套餐:单独主板  树莓派:3B+ E14 新款",
            "title": "",
            "aucNumId": "556129616183"
        },
        "award": "",
        "rate": "1",
        "creditFraudRule": 0,
        "appendCanExplainable": false,
        "from": "",
        "tag": "",
        "propertiesAvg": "0.0",
        "reply": null,
        "dayAfterConfirm": 0,
        "lastModifyFrom": 0,
        "bidPriceMoney": {
            "amount": 243,
            "centFactor": 100,
            "cent": 24300,
            "displayUnit": "元",
            "currency": {
                "symbol": "¥",
                "displayName": "人民币",
                "currencyCode": "CNY",
                "defaultFractionDigits": 2,
                "numericCode": 156
            },
            "currencyCode": "CNY"
        },
        "noQna": true,
        "promotionType": "活动促销 ",
        "vicious": "",
        "enableSNS": false,
        "appendList": [],
        "buyAmount": 1,
        "showCuIcon": true,
        "serviceRate": null,
        "useful": 0,
        "user": {
            "nick": "l***3",
            "vipLevel": 0,
            "displayRatePic": "b_blue_2.gif",
            "nickUrl": "",
            "anony": false,
            "rank": 874,
            "avatar": "//wwc.alicdn.com/avatar/getAvatar.do?userIdStr=Xmhzv8xLX8cbP0lhOmcSPmcLOH8LPG80XFR-P8c4PGMhMmgSPFx4vCIuvGgyOFvW&width=40&height=40&type=sns",
            "vip": "",
            "userId": "",
            "rankUrl": ""
        },
        "append": null,
        "status": 0
    }, 

...................

其返回的东西是json传输的。

json.loads
json.loads 用于解码 JSON 数据.该函数返回 Python 字段的数据类型。
json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

根据上面得到comments后面的[]即列表类型,[]里有多个{}信息,每个{}代表一个用户的评论信息

通过json.loads()后变成字典,取出需要的东西。

下面就是构造所有的url
下面是1,2页数的评论,主要currentPageNum变化。构造出需要的网站。

https://rate.taobao.com/feedRateList.htm?auctionNumId=556129616183&userNumId=143813255&currentPageNum=1&pageSize=20&rateType=&orderType

https://rate.taobao.com/feedRateList.htm?auctionNumId=556129616183&userNumId=143813255&currentPageNum=2&pageSize=20&rateType=&orderType

相关的code如下

# -*- coding: utf-8 -*-
"""
Created on Fri Sep 21 11:36:31 2018

@author: dflx
"""

import requests
import re
import os
import time
import json
import pandas as pd
from bs4 import BeautifulSoup
import xlwt
import xlrd
import os


#获取网页的html源码
def get_html(url):
    header = {
        'Accept':'application/json, text/plain, */*',
        'Accept-Language':'zh-CN,zh;q=0.3',
        'Referer':'https://item.taobao.com/item.htm',
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
        'Connection':'keep-alive',
    }
    
    response=requests.get(url,headers=header, verify=False)
    #response.encoding=response.apparent_encoding
    html=response.text
    return html

def getJson(url):
    data=get_html(url).strip().strip('()')
    d=json.loads(data)
    b=d['comments']  #得到comments后面的[]即列表类型,[]里有多个{}信息,每个{}代表一个用户的评论信息
    print(type(b[0])) #列表[]里的每一个元素又是一个字典类型的数据
#下面遍历列表元素,取出每一个列表元素中字典里的特定信息:content、nick、date
    print(type(b))
    elem_list=[]
    for elem in b:
        user=elem["user"]['nick']
        date=elem['date']
        xh=elem['auction']["sku"]
        money=elem["bidPriceMoney"]['amount']
        comt=elem['content']
        elem_list.append(user)
        elem_list.append(date)
        elem_list.append(xh)
        elem_list.append(money)
        elem_list.append(comt)
        
    return elem_list
        
        
    #print(b['date'])
    #table=pd.DataFrame(b,columns=["user"['nick'],'date','auction'["sku"],"bidPriceMoney"['amount'],'content'])
    #table=pd.DataFrame(b,columns=["user",'date'])
    #table.to_excel("E:\\mytable.xlsx")


#单独写一页的评论
row=0 #行
def write(information):
    path="E:\\informa.xls"
    global row #行
    column=0 #列
    count=0
    file=xlwt.Workbook()
    sheet1=file.add_sheet('1')
    t=len(information)
    if(t==0):
        return
    print(information)
    print(" 一共有",5,'列 ',t/5,'行')
    
    for j in range(t):
        sheet1.write(row,column,information[j])
        count=count+1 #计数器
        column=column+1 # 
        if(count%5==0):
            row=row+1
            column=0
    file.save(path)
    print('successful')
       



def writeAll(num):
    first="https://rate.taobao.com/feedRateList.htm?auctionNumId=556129616183&userNumId=143813255&currentPageNum="
    path="E:\\informa.xls"
    column=0 #列
    count=0
    file=xlwt.Workbook()
    sheet1=file.add_sheet('1')

    elem_list=[]
    elem_list.append("user")
    elem_list.append("date")
    elem_list.append("型号")
    elem_list.append("money")
    elem_list.append("评论")
    
    for index in range(len(elem_list)):
        sheet1.write(0,index,elem_list[index])
    row=1


 
    for n in range(1,num+1):
        try:
            url=first+str(n)+"&pageSize=20"
            print(url)
            infor=getJson(url)
            t=len(infor)
            if(t==0):
                return
            for j in range(t):
                sheet1.write(row,column,infor[j])
                count=count+1 #计数器
                column=column+1 # 
                if(count%5==0):
                    row=row+1
                    column=0
            file.save(path)
            
        except:
            print("has error")
            continue     
    print(str(n)+"-------------页写入成功了,")


def main():
    url0="https://item.taobao.com/item.htm?spm=a230r.1.14.20.6e20434b4CzHZ3&id=556129616183&ns=1&abbucket=9#detail"
    html=get_html(url0)
    #print(html)
    
    url1="https://rate.taobao.com/feedRateList.htm?auctionNumId=556129616183&userNumId=143813255&currentPageNum=1&pageSize=20"
    html1=get_html(url1)
    #print(html1)
    writeAll(30)
    

遇到了一个坑,就是写excel时候单独写一页,后在写,会覆盖。最后直接总体写

image.png

参考文章如下
Python爬虫 获得淘宝商品评论
Python爬取淘宝商品详情页数据
通过Python抓取天猫评论数据
Python xlrd、xlwt 用法说明

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,561评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,218评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,162评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,470评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,550评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,806评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,951评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,712评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,166评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,510评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,643评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,306评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,930评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,745评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,983评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,351评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,509评论 2 348

推荐阅读更多精彩内容

  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,211评论 4 16
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,906评论 2 89
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,969评论 3 119
  • 前记:闲暇之余,翻起以前的文章,突然看到了与林兄的对句,心情久久不能平静,想起那会刚入简书不久,就结识了林兄,并与...
    公子江沐阅读 1,105评论 12 18
  • 1 近期,对局长推荐的一本书和一篇文章非常感兴趣。书的名字叫《如何说孩...
    月白风清张燕阅读 343评论 1 8