python爬虫实例,一小时上手爬取淘宝评论(附代码)
程序员文章站
2022-06-30 17:39:43
前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 1 明确目的 通过访问天猫的网站,先搜索对应的商品,然后爬取它的评论数据。可以作为设计前期的市场调研的数据,帮助很大。 2 爬取评论并储存 (首先要进行登录,获取cookie ......
前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
1 明确目的
通过访问天猫的网站,先搜索对应的商品,然后爬取它的评论数据。可以作为设计前期的市场调研的数据,帮助很大。
2 爬取评论并储存
(首先要进行登录,获取cookie)搜索你想收集的信息的评价,然后点开对应的产品图片。找到对应的评价的位置。
找到对应的位置之后就可以进行数据的爬取了,但是在爬取的过程中发现始终无法获取对应的数据。判断可能是因为没有添加cookie导致的,但是在添加了cookie之后发现依旧无法解决问题。
最后,发现应该是显示的数据是通过json解析之后显示在网页上的,因此需要多一些步骤来获取真正的爬取链接。
首先在network中,清除掉以往的数据信息,然后将页面进行刷新,复制其中的一条信息,进行搜索。在4中获得链接,并在5中获取到链接。
找到文件里面的访问url、cookie、referer、agent,将其复制在程序里。
大功告成,现在就可以进行数据的爬取了。
import pandas as pd import requests import re import time data_list = [] for i in range(1,20,1): print("正在爬取第" + str(i) + "页") #构建访问的网址,这个网址可有讲究了 first = 'https://rate.tmall.com/list_detail_rate.htm?itemid=596452219968&spuid=1240258038&sellerid=1579115485&order=3¤tpage=1' last = '&append=0&content=1&tagid=&posi=&picture=&groupid=&ua=098%23e1hvb9vnvpgvuvckvvvvvjipn25pqjlhpfsv0jthpmpy6jipr2mwajnjrlf9gjlerphvcvvvphmjvpvhvucvp8wcvvpvvhhhmphvlvuiukuaqcawe1o0747bhcka%2bohodovfjleanhjekbmadxiauexretgcnkxb5ah6hd8ram56d40odiudnrblhd8rec69d70fd3j18heivpvuvvccwub0wv0evpvvvpcmpj2vkphv8vvvphwvvvvvvvcmqvvvv4pvvhzlvvmcvvvvbbwvvvjwvvchhqvvvxqcvpvvvucvpvvv2qhvcvvvmmgtvpvhvvcvp86cvchh9p2s3qvvc0odj6khkovqrohcvclwmbra3rmwznsjwxs5gn1uzvr4486cvvyv9mqs7qvvm4p%3d&needfold=0&_ksts=1585406932472_453&callback=jsonp454' url = first + str(i) + last #访问的头文件,还带这个cookie headers ={ # 用的哪个浏览器 'user-agent': 'mozilla/5.0 (macintosh; intel mac os x 10_15_4) applewebkit/537.36 (khtml, like gecko) chrome/80.0.3987.149 safari/537.36', # 从哪个页面发出的数据申请,每个网站可能略有不同 'referer': 'https://detail.tmall.com/item.htm?spm=a220m.1000858.1000725.1.464b6bbfqwjmpt&id=596452219968&skuid=4313616443848&areaid=340700&user_id=1579115485&cat_id=2&is_b=1&rn=2aaf4f3d019121cb4b9c1816fe2eb360', # 哪个用户想要看数据,是游客还是注册用户,建议使用登录后的cookie 'cookie':'tk_trace=1; cna=bpoff17g1wkcasshm8zume/z; dnk=%5cu6211%5cu624b%5cu673a%5cu9762%5cu5305; uc1=tag=10&cookie16=uihilt3xcs3ym2h4ekhs9lpeow%3d%3d&cookie14=uotup2hg22vkgq%3d%3d&cookie15=urm48syiivrska%3d%3d&cookie21=wqg3dmc9fb5mpliqo9kr&lng=zh_cn&existshop=false&pas=0; uc3=nk2=ruteseapxfibaw%3d%3d&vt3=f8dbxd9vfofx6tf0niu%3d&lg2=utassssmoij0bq%3d%3d&id2=uu20soblt5yjsa%3d%3d; tracknick=%5cu6211%5cu624b%5cu673a%5cu9762%5cu5305; lid=%e6%88%91%e6%89%8b%e6%9c%ba%e9%9d%a2%e5%8c%85; _l_g_=ug%3d%3d; uc4=nk4=0%40r7rcjknwplz3%2fwyncmllicp5es7j&id4=0%40u2%2fz9frgferuiibdthlaqnteryyw; unb=2565225077; lgc=%5cu6211%5cu624b%5cu673a%5cu9762%5cu5305; cookie1=vyvfqs3fk3q1ama82%2bacjr%2b92r264tdi3q1c5wquxxw%3d; login=true; cookie17=uu20soblt5yjsa%3d%3d; cookie2=1cf0a583503c0e1120b70f4ef312f5c5; _nk_=%5cu6211%5cu624b%5cu673a%5cu9762%5cu5305; sgcookie=eilyrhs60a8pxosqmcpey; sg=%e5%8c%857f; t=0f46f0f89d1ad6a09a42a2e03e34c8ad; csg=af40d9de; _tb_token_=7e358e863e33f; enc=m7o0wanabkvr3u2e%2b%2fvwjirhdoivog54ay5f614n4hbpuxkxuzzucop8wqjk%2fohrvnzechjxzrihnyjdniqhxw%3d%3d; l=dboq8bwlqb9fa9pwbofwvsubxgbogiob8spzcqtkticpoq1wbijpwz43uhtecngvh6jwr3laefr4bmsxcnv0x6ana6fy_1dmn; isg=bkojn8dx-fvsplxbytrwzshrmufnmdfabnkix9ub34jafmi2xwivkt1cduqati_s' } #尝试获取数据(这里的数据应该是从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("评论_汇总.xlsx")
由于天猫会有比较强的反爬机制,因此需要设置睡眠时间,链接也要更新。
以上就是爬取的部分评价,可以通过可视化工具提取关键词并绘制出词云。
3 词云图的制作
首先将原来的数据保存为csv的格式
# df = pd.dataframe() # df["review"] = data_list # df.to_excel("评论_汇总.xlsx") df = pd.dataframe() df["review"] = data_list df.to_csv("coms.csv",mode="a+",header=none,index=none,encoding="utf-8")
之后利用这些数据进行词云的绘制
# @功能:读取csv文件,然后进行绘制词云图 # @日期:2020-04-22 import re from wordcloud import wordcloud import matplotlib.pyplot as plt import pandas as pd import jieba import np from pil import image # 读取原始数据 raw_comments = pd.read_csv('com.csv');raw_comments.head() # 导入停用词表,这里的stopword是可以自己更改上传的 with open('stopword.txt') as s: stopwords = set([line.replace('\n', ' ') for line in s]) # 传入apply的预处理函数,完成中文提取、分词以及多余空格剔除 def preprocessing(c): c = [word for word in jieba.cut(' '.join(re.findall('[\u4e00-\u9fa5]+', c))) if word != ' ' and word not in stopwords] return ' '.join(c) # 将所有语料按空格拼接为一整段文字 comments = ' '.join(raw_comments['评论'].apply(preprocessing));comments[:500] # ---------生产词云---------- usa_mask = np.array(image.open('flower.png')) #image_colors = imagecolorgenerator(usa_mask) #读取图片本身颜色,但是这一句有错误 #从文本中生成词云图 wordcloud = wordcloud(background_color='white', # 背景色为白色 height=400, # 高度设置为400 width=800, # 宽度设置为800 scale=1, # 长宽拉伸程度设置为20 prefer_horizontal=0.2, # 调整水平显示倾向程度为0.2 max_words=500, # 设置最大显示字数为500 relative_scaling=0.3, # 设置字体大小与词频的关联程度为0.3 max_font_size=50,# 缩小最大字体为50 font_path='msyh.ttf',#设置字体为微软雅黑 mask=usa_mask#添加蒙版 ).generate_from_text(comments) plt.figure(figsize=[8, 4]) plt.imshow(wordcloud #.recolor(color_func=image_colors),alpha=1 ) plt.axis('off') #保存到本地 plt.savefig('图6.jpg', dpi=600, bbox_inches='tight', quality=95) plt.show()
最后生产的图片:
(猜猜这个图片像什么)
如果你处于想学python或者正在学习python,python的教程不少了吧,但是是最新的吗?说不定你学了可能是两年前人家就学过的内容,在这小编分享一波2020最新的python教程。获取方式,私信小编 “ 资料 ”,即可免费获取哦!