Python数据爬取实例--爬取某宝评论

一、前言

淘宝的反爬比较严格,且淘宝协议好像不允许爬取它的评论,我查了一下好像也不建议直接用自己的淘宝号去爬取(好像有封号风险),我在测试的时候,可能是太频繁了淘宝账号被强制退了并提醒了用户协议。话不多说,我们直接来看一下思路和代码。

二、实例

1、思路

因为淘宝反爬比较严重,所以该代码需要登录淘宝账号模仿人为浏览复制评论,且需要提供较为详细的URL,还要提供cookie等。

2、过程

明确自己所要找的商品评论,进入相应的商品中,我以小米手机为例。
我这里进入了小米旗舰店的米10的评论区中。

image.png

这个时候,打开开发者模式(按f12)
image.png

第一步点击图中的放大镜,如果4中的搜索框有内容,则按一下步骤2的那个禁止符号清除搜索框中的内容,要是原本就没有内容就跳过第二步直接点击3中的具体评论。
注:这里一定要先进入开发者模式再去点击评论,如果是先点击具体评论在打开开发者模式复制黏贴,会搜索不到内容的,也就找不到对应的URL等参数了!!!
image.png

选择一条评论复制,然后黏贴到4中的搜索框去,点一下5,或者按一下回车键,出现以下内容。
image.png

点击画红线的地方。


image.png

出现上面的页面点到headers去


image.png

这里我们看到了页面的URL,我们往下拉还可以看见cookie,referer,user-agent,要将这四个找出来分别黏贴在下面的代码中。注意上图画红线的地方,在下面会进行特别的说明。
3、代码
import pandas as pd
import requests
import re
import time
data_list = []
#爬取的页数为1到19页
for i in range(1,20,1):
    print("正在爬取第" + str(i) + "页")
    #构建访问的网址,这个网址可有讲究了
    first = 'https://rate.tmall.com/list_detail_rate.htm?itemId=611224893062&spuId=1526565904&sellerId=1714128138&order=3&currentPage='
    last = '&append=0&content=1&tagId=20101023&posi=1&picture=0&groupId=&ua=098%23E1hvwQvbvPhvUvCkvvvvvjiPnL5ptjEvnLqU1jljPmP9tjtPPLsp1jnmnLs9QjnhRphvChCvvvmCvpviflKcvCqw7Di4cMc5MPC46HdPzg9umWTMsd%2BL4OU2yqeWkeHXvK8WFfKjvpvhphhvv8wCvvBvpvpZRphvChCvvvvPvpvhvv2MMQhCvvXvovvvvvvEvpCWpGZjv8WpwHQDNr3l5dUfb161D764d5lPwymQD40wjovfBdmxdX3Qbc6OfakKDzEjaDuxfXkOjoCABYoO%2Bul1pB61D70Oe169PDrr1UyCvvXmp99he1AivpvUphvhsf0xXDTtvpvIphvvvvvvphCvpCphvvCvIyCvjvUvvhBGphvwv9vvBhEvpCQmvvChp9%3D%3D&itemPropertyId=&itemPropertyIndex=&userPropertyId=&userPropertyIndex=&rateQuery=&location=&needFold=0&_ksTS=1595499293797_3730&callback=jsonp3731'
    url = first + str(i) + last
    #访问的头文件,还带这个cookie
    headers ={
        # 用的哪个浏览器
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
        # 从哪个页面发出的数据申请,每个网站可能略有不同
        'referer': 'https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w15914064-15567552165.16.55e448feb3oh69&id=611224893062&scene=taobao_shop&sku_properties=10004:7169121965;5919063:6536025;12304035:946237073',
        # 哪个用户想要看数据,是游客还是注册用户,建议使用登录后的cookie
        'cookie':'cna=4WV4F30//QACAXjl/xer2+AZ; _m_h5_tk=a79ba70f915d9ba3ac924993f793e2d9_1595438320858; _m_h5_tk_enc=dcaba3d7058acdf78f1333d3c2d09fb7; sm4=440500; lid=yzfzf8342; enc=GtTHaCYoIyS1Mrx%2FljjVSyXnBQUpSdD49%2BI27a1U08Cm%2FHNNeNt82Sa7RZnWqxEUozAuCF19ISBHDVpQK%2Frgvw%3D%3D; sgcookie=ExKWIC%2FrOlfUjMlWR8Gz1; t=f3bcc8d7f1f91e3e0f43a493d3fedaf5; uc3=lg2=UIHiLt3xD8xYTw%3D%3D&vt3=F8dBxGyhBGoK%2F%2BpK6CI%3D&nk2=GhEd8Ku88aZW&id2=UNQ2me8UbNu12g%3D%3D; tracknick=yzfzf8342; uc4=nk4=0%40GJ2QH2OyEy7usffj2261IhUpjU0%3D&id4=0%40UgP9omVfbD01hXa5NKpMgzuMLbj7; lgc=yzfzf8342; _tb_token_=3417a870bd554; cookie2=15bebf99545ebefea6966d68d22d9fa0; l=eBSgfFqlONScLUA8BO5alurza77tUFOXDVVzaNbMiIncC6bFh8pXgb-QK7-e2QtRR8XcGJSw4kkZIset6er4JyMfoTB7K9cdvdH2Cef..; isg=BKmpm2Ac0sEUB-509iyZubs6uFUDdp2oFB45U0uDcgGUEvkkxMdaeBNE1LYktzXg'
    }
    #尝试获取数据(这里的数据应该是从json里面获取的)
    try:
        data = requests.get(url,headers = headers).text
        time.sleep(10)#设置睡眠时间,模拟人的浏览
        result = re.findall('rateContent":"(.*?)"fromMall"',data)
        data_list.extend(result)
    except:
        print("本页爬取失败")
df = pd.DataFrame()
df["评论"] = data_list
df.to_excel("评论_汇总1.xlsx")

cookie,referer,user-agent这三个直接找到复制黏贴就好了,但是URL我们需要分为两部分,分隔的地方就在上面图中画红线处。将其分为first和last黏贴进去。
为什么要这这里分隔呢?
我们要明白,我们爬取的是多页评论,而在淘宝中评论页面是局部页面,currentPage这个参数指的是当前页,我们可以看见上面截图中它的值为1,因为我在第一页评论中,可以注意到代码中在first后面的”currentPage=”没有具体的值,它的值在下面代码url = first + str(i) + last,我用str(i)赋值了。
【注:上面用到了requests库来获取页面信息,requests库的使用可以参考这篇文章。还利用了正则化表达式来提取评论,大家如果将爬取的最初始结果data输出会看到一堆乱七八糟的符号文字等,仔细看会发现评论都是在"rateContent"和"fromMall"之间,所以用正则表达式将评论从爬取的内容中提取出来。】
最后得到的结果如下图:

爬取结果.png

三、制作词云

词云的制作,比较简单,一些解释我已经备注在代码中了,所以直接看代码就好。

import jieba
import pandas as pd
from wordcloud import WordCloud

#读取文件,如果是xlsx则用utf-8编码,若是CSV文件则用gbk编码
data = pd.read_excel('评论_汇总.xlsx',encoding='utf-8')

text = ''
for i in range(len(data)):
    text += data['评论'][i]
word = jieba.cut(text,cut_all=True)    #加了cut_all为全模式有多余的切分 

#jieba库分词后的结果为迭代器,所以用join()方式打开,也可以用循环。
word_space_list = ' '.join(word)

#添加停用词,停用词少可以直接写一个字典,多的话可以写在txt文件中读取,我采用的是txt文件

with open('stopword.txt',encoding='utf-8') as f:
    s=f.read()
'''
#切片方法1
exclude=[]
exclude=s.split() #将字符串切片

'''
#切片方法2
exclude=jieba.cut(s,cut_all=True)
exclude=' '.join(exclude)
#print(exclude)

#生成词云
wc = WordCloud(font_path='simhei.ttf',#设置字体
               background_color='white',#背景颜色
               width=1000,#宽度
               height=600,#高度
               max_words=100,#最大显示字数
               stopwords=exclude#设置停用词
               ).generate(word_space_list)

wc.to_file('词云2.png')

当然这只是最简单的词云,Wordcloud中的许多参数我都是使用默认,只规定了几个比较常见的参数,大家如果有需求可以自己设定。
上面的代码中有两种对停用词的切片方法,如果你的停用词是一些词组则用第一种比较好,如果是句子用第二种切片比较好。


词云2.png

这就是运行后的结果。

参考:https://blog.csdn.net/z463544804/article/details/106797987?utm_source=app
https://blog.csdn.net/qq_46614154/article/details/105682101?utm_source=app
https://www.runoob.com/regexp/regexp-syntax.html
https://www.cnblogs.com/wangyinghao/p/10712328.html
https://www.cnblogs.com/liyanyinng/p/10958791.html
https://blog.csdn.net/YJG7D314/article/details/102787844

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