一步一步带你做一个淘宝评论采集器并打包发布成exe程序

  • A+
所属分类:Python笔记

导读:

最近需要一个小工具发现吾爱破解论坛有,但是下不了啊,我没有账号,申请账号要掏钱滴,当然技术大牛可以免费申请,我这种坐能撸代码,站能喷大海的“技术大牛”当然得申请了,于是就有了下面这篇文章。

做一个淘宝/天猫评论信息采集器并打包成exe程序

需要哪些步骤?

1.写一个python爬虫,抓取淘宝/天猫的评论信息
2.写一个简单的GUI界面
3.打包发布成exe

需要哪些储备知识?

1.简单的python知识
2.简单的爬虫知识,不会也没关系,只要按照步骤就能撸出来
3.简单的python gui知识,不会更没关系,只要几行代码就可以了。
4.简单的命令操作,不会还没关系,几行命令搞定。

如果你有简单的python知识(安装、运行有什么的),跟着我的步骤,so easy!

难点透析:

关键难点是页面分析,找出请求目标的url。
淘宝/天猫的评论区是独立加载的,新手很难找到是哪个文件,所以通常有新手请求宝贝地址解析之后发现并没有自己需要的内容。

这个工具有什么用?

懂得人自需要~不懂的人也没啥用

开始操作

1.分析目标页面,找出目标url(这里我写的是一种通用的分析方法,可以套用任何网站,请仔细阅读)

我们在淘宝上随便找一个宝贝,以华为这个手机为例:
https://detail.tmall.com/item.htm?spm=a230r.1.14.12.59b76305LvIKBw&id=560087790541&ns=1&abbucket=5&sku_properties=10004:827902415;5919063:6536025

一步一步带你做一个淘宝评论采集器并打包发布成exe程序

这是一个天猫地址,可以看到有很多条的评论信息,这就是我们的目标。
随便复制一句半句的评价,然后刷新这个页面(先不要点评价信息),调出你浏览器的F12(360浏览器,QQ浏览器,Chrome,Firefox什么的都无所谓,国产的核心都是chrome),搜索刚才复制的评价会发现没有结果,由此推断出目标内容不是和主页面同时加载的。

一步一步带你做一个淘宝评论采集器并打包发布成exe程序

这时候点击累计评价,再搜索刚才复制的评价内容,发现有结果,可以确认评论信息是在这个时候加载进来的。
一步一步带你做一个淘宝评论采集器并打包发布成exe程序

下面就是要找出加载信息的url了
点击工具栏的Network,勾选Disable cache,再点前边的clear清空下边加载的内容。
一步一步带你做一个淘宝评论采集器并打包发布成exe程序

F5刷新界面,这个时候会默认的加载商品详情页面,为了方便查看,再次点击清空clear,
然后点击界面上的累计评价,这个时候关于累计评价的所有资源就都会加载出来了。
一般加载内容有两种方式,直接html或者ajax加载。首先我们猜测评论信息可能是通过ajax加载进来的,点击XHR,发现内容是空的。。。
一步一步带你做一个淘宝评论采集器并打包发布成exe程序

猜测错误,那就肯定是Html直接加载进来的了。我们在filter里输入htm来过滤显示所有的html页面
一步一步带你做一个淘宝评论采集器并打包发布成exe程序

可以看到一共有4个页面,这个时候该怎么办呢,该使出大法宝了,像我这种资深coder一眼就才出来是第二个list_detail_rate开头的url加载的评论信息了,点击去去,然后点右边的Response,查看内容,哈哈,果然是评论信息,验证了我的想法!

我是怎么猜出来的?因为我的英文学的好呀!!

你不会猜怎么办,那也很简答,已经剩4个url了,一个个看看也费不了几秒钟。

既然已经确定了,那我们要单独看一下了,右键复制这个url或者直接open in new tab都可以,
一步一步带你做一个淘宝评论采集器并打包发布成exe程序
干的漂亮,果真是我们需要的。把这个url默默的记下:
https://rate.tmall.com/list_detail_rate.htm?itemId=560087790541&spuId=889298324&sellerId=268451883&order=3&currentPage=1&append=0&content=1&tagId=&posi=&picture=&ua=098%23E1hvhQvZvxGvUpCkvvvvvjiPPLdhzj1bP2cyljnEPmPhAjYWPFqOtj3RPsSZAjlRRLyCvvpvvvvv9phvHnQwYDTVzYswMRKa7%2FG2zVqwoliIdphvmpvUW9bGMvLxnT6Cvvyv2hZm%2Bfhh6XVrvpvEvvFZ939OCmeNdphvmpvUb98J59ova46CvvyvCbmmf76hJEejvpvhvvpvv2yCvvpvvvvv2QhvCvvvMMGCvpvVvmvvvhCvmphvLvFTj9vjRreYiXhpVVQEfwsZaXgTf98xKXzBnCODN%2BshaNoAdcnVaNF6AC46NB3rsWBl51r6LWFI1W9wVcHa0f0DyBvOJ1kHsX7vVB0tvpvIvvvvWbYvTGhvvvnUphvvGQvvv63vpCCIvvv2ohCv2W%2BvvvnUphvWoIyCvvOUvvVvaZ4ivpvUvvmv%2Bhngf1T5vpvhvvmv9u6CvCvwVEumhBhhobRnrsw6Zf5BdphvhCQvqv8A%2B9BOgU0znsBBKaVrvpvEvv97vuoyCvypdphvmpvUx98xDppB39%3D%3D&isg=AjMz5uw7bYV4oiFR01WI7Ekz1zedwMdMBHn97OXRZNKC5FKGbTrLeg026gvv&needFold=0&_ksTS=1516177807125_1067&callback=jsonp1068

2.开始coding了
首先假设你已经会一些简单的python知识(就是不用我再从安装环境开始讲了),再假设你有一个IDE,pycharm或者pydev eclipse都行,如果你没有IDE,一个记事本也行,通常新手都觉得大神都是一个编辑器走天下的。。。其实大神都是能自动化绝对不多敲一个字母。。。

上一步我们已经知道目标url了,这一步我们只要抓取下来就可以了。
这里我们用的python 的requests库,一个比较好用的爬虫库,封装了一些http请求,你可以直接拿来用。
通用的简单安装方法,pip install requests

__author__ = 'devtao'

import  requests


comment_url = 'https://rate.tmall.com/list_detail_rate.htm?itemId=560087790541&spuId=889298324&sellerId=268451883&order=3&currentPage=1&append=0&content=1&tagId=&posi=&picture=&ua=098%23E1hvhQvZvxGvUpCkvvvvvjiPPLdhzj1bP2cyljnEPmPhAjYWPFqOtj3RPsSZAjlRRLyCvvpvvvvv9phvHnQwYDTVzYswMRKa7%2FG2zVqwoliIdphvmpvUW9bGMvLxnT6Cvvyv2hZm%2Bfhh6XVrvpvEvvFZ939OCmeNdphvmpvUb98J59ova46CvvyvCbmmf76hJEejvpvhvvpvv2yCvvpvvvvv2QhvCvvvMMGCvpvVvmvvvhCvmphvLvFTj9vjRreYiXhpVVQEfwsZaXgTf98xKXzBnCODN%2BshaNoAdcnVaNF6AC46NB3rsWBl51r6LWFI1W9wVcHa0f0DyBvOJ1kHsX7vVB0tvpvIvvvvWbYvTGhvvvnUphvvGQvvv63vpCCIvvv2ohCv2W%2BvvvnUphvWoIyCvvOUvvVvaZ4ivpvUvvmv%2Bhngf1T5vpvhvvmv9u6CvCvwVEumhBhhobRnrsw6Zf5BdphvhCQvqv8A%2B9BOgU0znsBBKaVrvpvEvv97vuoyCvypdphvmpvUx98xDppB39%3D%3D&isg=AjMz5uw7bYV4oiFR01WI7Ekz1zedwMdMBHn97OXRZNKC5FKGbTrLeg026gvv&needFold=0&_ksTS=1516177807125_1067&callback=jsonp1068'

resp = requests.get(comment_url)

print(resp.text)

只有一行关键代码,soeasy,只要一个request.get方法,把目标url传进去就可了,看看控制台是不是有返回的评价信息了。
一步一步带你做一个淘宝评论采集器并打包发布成exe程序

下面我们要做的就是过滤清洗了,只留下我们需要的内容,经过观察你会发现这个返回结果很像json格式,对,通常这种数据都是json格式会写给一个回调的js。
网上随便找个json格式工具看看
一步一步带你做一个淘宝评论采集器并打包发布成exe程序
果真是json啊,哈哈!但是好像多出了前边的jsonp1068(这个字符串,还有最后的)
去掉就可以了,下面我们改进一下代码

resp = requests.get(comment_url)
tmp_resp = re.findall('\(.*\)',resp.text)[0][1:-1] #去掉开头的json1068(和最后的)
comments = json.loads(tmp_resp)
print(comments)

一步一步带你做一个淘宝评论采集器并打包发布成exe程序
这个输出结果就是一个标准的json了
通过观察我们发现买家所有的评论信息都在节点rateDetail.rateList.rateContent和rateDetail.rateList.appendContent中,取出来就可以了。

rateDetail = comments.get('rateDetail')
rateList = rateDetail['rateList']
for rate in rateList:
    rateContent = rate.get('rateContent')
    print(rateContent+'\r\n')

    try:
        appendComment = rate.get('appendComment').get('content')
        print(appendComment+'\r\n')
    except:
        pass

一步一步带你做一个淘宝评论采集器并打包发布成exe程序

ok,看到了吧,控制台的输出已经是所有的评论了,就是这么简单。
下面我们要干什么呢?当然是进一步完善了,我们现在还没有图片而且只是抓取了第一页的评论。
观察上边的json字符串,
一步一步带你做一个淘宝评论采集器并打包发布成exe程序
突破地址是不是很亮眼,取出来下载下来就可以了。
我们先写一个下载图片的函数

def downloadImageFile(imgUrl,default_path):
    '''

    :param imgUrl:
    :return:
    '''
    local_filename = imgUrl.split('/')[-1]
    #print ("Download Image File=", local_filename)
    r = requests.get(imgUrl, stream=True) # here we need to set stream = True parameter
    with open(default_path+local_filename, 'wb') as f:
        for chunk in r.iter_content(chunk_size=1024):
            if chunk: # filter out keep-alive new chunks
                f.write(chunk)
                f.flush()
        f.close()
    return local_filename

然后再修改我们的代码,解析评论里的图片url地址并且请求下载localimagepath存储图片路径。

  pics = rate.get('pics')
    for pic in pics:
        downloadImageFile('http:'+pic,LocalImagePath)

再运行,图片也有了,还差一个抓取所有页面的改动了,还是观察那个json,有一个Lastpage节点,经过比较发现这个数据就是记录的一共有多少页评论,这就简单了,取出来就行了。取出来之后将url中currentpage字段替换掉,就是每个页面的评论信息了,这时候你会发现搞一个递归函数会更方便一些,对不对,下面我们就要进行较大规模的改动了,将我们的抓取改为递归的。

__author__ = 'devtao'
import  requests
import json
from bs4 import  BeautifulSoup
from spider_tools.user_agent import GET_USER_AGENT
from spider_tools.down_pics import downloadImageFile
import re
import DBHelper
import fetch_rate_from_taobao.config as Config
db = DBHelper.LightMysql(Config.dbconfig)
import time
import tkinter as tk

rate_ajax_url = 'https://rate.tmall.com/list_detail_rate.htm'

LocalImagePath = 'D:/taobao_images/'
fileLocation = 'D:/taobao_images/comments.txt'

to_db = False



def fectch_the_comments(currentpage,baobei_url):


    item_id = re.findall('id=(\d+)',baobei_url)[0]



    params = {
    'itemId':item_id,
    'spuId':607814301,
    'sellerId':2340846053,
    'order':3,
    'currentPage':currentpage,
    'append':0,
    'content':1,
    'tagId':'',
    'posi':'',
    'picture':'',
    'ua':'098#E1hvhpvnvP6vUvCkvvvvvjiPPL596jlURLdv0jD2PmPysjrWPscUljtWPLsv1jDRRphvChCvvvmCvpvZzCQBcqLNznswAmxfqlPGOY1d7eurvpvEph88HHUvpmnzdphvhhaj+1BvvhvZgIVYKLuAbDujvpvhphhvvvGCvvpvvPMMmphvLhEL+vmFDVQEVAdwaXTAVAil8bkirqpKCeEvibmAdcOdNB3r1EKKfvxYLW2ZeXr+VkYVyOvO5onmWl4vtC6tExhlBqev+ulQbc6XSO0EvpvVpyUUCEu4uphvmhCvCUjzPtyVKphv8hCvvv2MMqd8phvw8pvvpNrvpC3mvvChcyCvVhUvvhR1phvOp9vvpqhCvpvVph9vvvvvRphvChCvvvm5vpvhphvhHv==',
    'isg':'AikpBHWmVwEMImiF785tZKCdONWD9h0oZa1SQ8se0pBMkkikE0Sa-VPAIDl4',
    'needFold':0,
    '_ksTS':'1515846585699_1197',
    'callback':'jsonp1198'

    }



    resp = requests.get(rate_ajax_url,params=params)

    tmp_resp = re.findall('\(.*\)',resp.text)[0][1:-1]
    print(tmp_resp)
    comments = json.loads(tmp_resp)

    rateDetail = comments.get('rateDetail')
    lastPage = rateDetail.get('paginator').get('lastPage')

    rateList = rateDetail['rateList']
    for rate in rateList:
        rateContent = rate.get('rateContent')


        with open(fileLocation, 'a') as f:
            f.write(rateContent+'\r\n')




        try:
            appendComment = rate.get('appendComment').get('content')


             with open(fileLocation, 'a') as f:
                  f.write(rateContent+'\r\n')


        except:
            pass

        pics = rate.get('pics')
        for pic in pics:
           # print(pic)
            downloadImageFile('http:'+pic,LocalImagePath)


    if currentpage <= int(lastPage):
        print('currentPage:',currentpage)

        time.sleep(60)
        fectch_the_comments(currentpage+1,baobei_url,text)






if __name__ == '__main__':
    currentpage  = 1
    baobei_url = 'https://rate.tmall.com/list_detail_rate.htm?itemId=560087790541&spuId=889298324&sellerId=268451883&order=3&currentPage=1&append=0&content=1&tagId=&posi=&picture=&ua=098%23E1hvhQvZvxGvUpCkvvvvvjiPPLdhzj1bP2cyljnEPmPhAjYWPFqOtj3RPsSZAjlRRLyCvvpvvvvv9phvHnQwYDTVzYswMRKa7%2FG2zVqwoliIdphvmpvUW9bGMvLxnT6Cvvyv2hZm%2Bfhh6XVrvpvEvvFZ939OCmeNdphvmpvUb98J59ova46CvvyvCbmmf76hJEejvpvhvvpvv2yCvvpvvvvv2QhvCvvvMMGCvpvVvmvvvhCvmphvLvFTj9vjRreYiXhpVVQEfwsZaXgTf98xKXzBnCODN%2BshaNoAdcnVaNF6AC46NB3rsWBl51r6LWFI1W9wVcHa0f0DyBvOJ1kHsX7vVB0tvpvIvvvvWbYvTGhvvvnUphvvGQvvv63vpCCIvvv2ohCv2W%2BvvvnUphvWoIyCvvOUvvVvaZ4ivpvUvvmv%2Bhngf1T5vpvhvvmv9u6CvCvwVEumhBhhobRnrsw6Zf5BdphvhCQvqv8A%2B9BOgU0znsBBKaVrvpvEvv97vuoyCvypdphvmpvUx98xDppB39%3D%3D&isg=AjMz5uw7bYV4oiFR01WI7Ekz1zedwMdMBHn97OXRZNKC5FKGbTrLeg026gvv&needFold=0&_ksTS=1516177807125_1067&callback=jsonp1068'


    fectch_the_comments(currentpage,baobei_url)

好了,这就是到目前为止我们做的一个淘宝天猫爬虫小助手了,可以抓取指定宝贝的所有评论信息和图片了。但是没有界面,只有会conding的你用,别人不能用,所以我们要打包成exe文件给别人用,不知不觉写了两个多小时,发现再写下去画界面,然后打包什么的貌似帖子就太长了,先这样吧,等审核通过了有机会了再接着写,希望管理员给个机会。

最后发给客户的是这样滴,如果有机会进论坛,这个我也会共享给大家的。
一步一步带你做一个淘宝评论采集器并打包发布成exe程序

pyinstaller -F -w --icon=favicon.ico start.py

  • 我的私人微信
  • 一名退役攻城狮,爱好编程和赚钱!
  • weinxin
  • 大T课堂公众号
  • 专注8小时之外个人提升!
  • weinxin
大T老师

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: