专栏首页BestSDK10行代码,Python实现爬取淘宝/天猫评论

10行代码,Python实现爬取淘宝/天猫评论

要做数据分析首先得有数据才行。对于我等平民来说,最廉价的获取数据的方法,应该是用爬虫在网络上爬取数据了。本文记录一下笔者爬取天猫某商品的全过程,淘宝上面的店铺也是类似的做法,不赘述。主要是分析页面以及用Python实现简单方便的抓取。

笔者使用的工具如下

Python 3——极其方便的编程语言。选择3.x的版本是因为3.x对中文处理更加友好。 Pandas——Python的一个附加库,用于数据整理。 IE 11——分析页面请求过程(其他类似的流量监控工具亦可)。 剩下的还有requests,re,这些都是Python自带的库。

实例页面(美的某热水器):http://detail.tmall.com/item.htm?id=41464129793

评论在哪里?

要抓取评论数据,首先得找到评论究竟在哪里。打开上述网址,然后查看源代码,发现里面并没有评论内容!那么,评论数据究竟在哪里呢?原来天猫使用了ajax加密,它会从另外的页面中读取评论数据。

这时候IE 11就发挥作用了(当然你也可以使用其他的流量监控工具),使用前,先打开上述网址,待页面打开后,清除一下IE 11的缓存、历史文件等,然后按F12,会出现如下界面

这时候点击绿色的三角形按钮,启动网络流量捕获(或者直接按F5),然后点击天猫页面中的“累计评价”:

出现如下结果

在URL下面出现很多网址,而评论数据正隐藏在其中!我们主要留意类型为“text/html”或者“application/json”的网址,经过测试发现,天猫的评论在下面这个网址之中

http://rate.tmall.com/list_detail_rate.htm?itemId=41464129793&spuId=296980116&sellerId=1652490016&order=3&currentPage=1&append=0&content=1&tagId=&posi=&picture=&ua=166UW5TcyMNYQwiAiwVQX1EeUR5RH5Cd0xiNGI%3D%7CUm5Ockt1SHxBe0B0SXNOdCI%3D%7CU2xMHDJxPk82UjVOI1h2VngRd1snQSJEI107F2gFfgRlAmRKakQYeR9zFGoQPmg%2B%7CVGhXd1llXGJfa1ZsV2NeZFljVGlLdUt2TXFOc0tyT3pHe0Z6QHlXAQ%3D%3D%7CVWldfS0SMgo3FysUNBonHyMdNwI4HStHNkVrPWs%3D%7CVmhIGCIWNgsrFykQJAQ6DzQAIBwiGSICOAM2FioULxQ0DjEEUgQ%3D%7CV25OHjAePgA0DCwQKRYsDDgHPAdRBw%3D%3D%7CWGFBET8RMQ04ACAcJR0iAjYDNwtdCw%3D%3D%7CWWBAED5%2BKmIZcBZ6MUwxSmREfUl2VmpSbVR0SHVLcU4YTg%3D%3D%7CWmFBET9aIgwsECoKNxcrFysSL3kv%7CW2BAED5bIw0tESQEOBgkGCEfI3Uj%7CXGVFFTsVNQw2AiIeJxMoCDQIMwg9az0%3D%7CXWZGFjhdJQsrECgINhYqFiwRL3kv%7CXmdHFzkXNws3DS0RLxciAj4BPAY%2BaD4%3D%7CX2ZGFjgWNgo1ASEdIxsjAz8ANQE1YzU%3D%7CQHtbCyVAOBY2Aj4eIwM%2FAToONGI0%7CQXhYCCYIKBMqFzcLMwY%2FHyMdKRItey0%3D%7CQntbCyULKxQgGDgEPQg8HCAZIxoveS8%3D%7CQ3paCiQKKhYoFDQIMggwEC8SJh8idCI%3D%7CRH1dDSMNLRIrFTUJMw82FikWKxUueC4%3D%7CRX5eDiAOLhItEzMOLhIuFy4VKH4o%7CRn5eDiAOLn5GeEdnW2VeYjQUKQknCSkQKRIrFyN1Iw%3D%3D%7CR35Dfl5jQ3xcYFllRXtDeVlgQHxBYVV1QGBfZUV6QWFZeUZ%2FX2FBfl5hXX1AYEF9XXxDY0J8XGBbe0IU&isg=B2E8ACFC7C2F2CB185668041148A7DAA&_ksTS=1430908138129_1993&callback=jsonp1994

是不是感觉长到晕了?不要紧,只需要稍加分析,就发现可以精简为以下部分

http://rate.tmall.com/list_detail_rate.htm?itemId= 41464129793&sellerId=1652490016&currentPage= 1

我们发现天猫还是很慷慨的,评论页面的地址是很有规律的(像京东就完全没规律了,随机生成。),其中itemId是商品id,sellerid是卖家id,currentPage是页面号。

怎么爬取?

费了一番周折,终于找到评论在哪里了,接下来是爬取,怎么爬取呢?首先分析一下页面规律。

我们发现页面数据是很规范的,事实上,它是一种被称为JSON的轻量级数据交换格式(大家可以搜索JSON),但它又不是通常的JSON,事实上,页面中的方括号[]里边的内容,才是一个正确的JSON规范文本。

下面开始我们的爬取,我使用Python中的requests库进行抓取,在Python中依次输入:

importrequests asrqurl ='http://rate.tmall.com/list_detail_rate.htm?
itemId=41464129793&sellerId=1652490016¤tPage=1'myweb =rq .get (url )

现在该页面的内容已经保存在myweb变量中了,我们可以用myweb.text查看文本内容。

接下来就是只保留方括号里边的部分,这需要用到正则表达式了,涉及到的模块有re。

importremyjson =re .findall ('"rateList":([.*?]),"tags"',
myweb .text )[0]

呃,这句代码什么意思?懂Python的读者大概都能读懂它,不懂的话,请先阅读一下相关的正则表达式的教程。上面的意思是,在文本中查找下面标签

"rateList": [...],"tags"

找到后保留方括号及方括号里边的内容。为什么不直接以方括号为标签呢,而要多加几个字符?这是为了防止用户评论中出现方括号而导致抓取出错。

现在抓取到了myjson,这是一个标准的JSON文本了,怎么读取JSON?也简单,直接用Pandas吧。这是Python中强大的数据分析工具,用它可以直接读取JSON。当然,如果仅仅是为了读取JSON,完全没必要用它,但是我们还要考虑把同一个商品的每个评论页的数据都合并成一个表,并进行预处理等,这时候Pandas就非常方便了。

importpandas aspdmytable =pd .read_json (myjson )

现在mytable就是一个规范的Pandas的DataFrame了:

如果有两个表mytable1和mytable2需要合并,则只要

pd .concat ([mytable1 ,mytable2 ],ignore_index =True)

等等。更多的操作请参考Pandas的教程。

最后,要把评论保存为txt或者Excel(由于存在中文编码问题,保存为txt可能出错,因此不妨保存为Excel,Pandas也能够读取Excel文件)

mytable .to_csv ('mytable.txt')mytable .to_excel ('mytable.xls')一点点结论

让我们看看一共用了几行代码?

importrequests asrq importre importpandas aspdurl='http://rate.tmall.com/list_detail_rate.htm?itemId=41464
129793&sellerId=1652490016¤tPage=1'
myweb =rq .get (url )myjson =re .findall ('"rateList":([.*?]),"ta
gs"',myweb .text )[0]
mytable =pd .read_json (myjson )mytable .to_csv ('mytable.txt')
mytable .to_excel ('mytable.xls')

九行!十行不到,我们就完成了一个简单的爬虫程序,并且能够爬取到天猫上的数据了!是不是跃跃欲试了?

当然,这只是一个简单的示例文件。要想实用,还要加入一些功能,比如找出评论共有多少页,逐页读取评论。另外,批量获取商品id也是要实现的。这些要靠大家自由发挥了,都不是困难的问题,本文只希望起到抛砖引玉的作用,为需要爬取数据的读者提供一个最简单的指引。

其中最困难的问题,应该是大量采集之后,有可能被天猫本身的系统发现,然后要你输入验证码才能继续访问的情况,这就复杂得多了,解决的方案有使用代理、使用更大的采集时间间隔或者直接OCR系统识别验证码等等。

本文分享自微信公众号 - BestSDK(bestsdk)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-09-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 70分产品经理——数据驱动产品之路

    上周同一做奢侈品电商的大哥聊天,他希望能够找到一个有女性视角的产品经理来改造现有产品,从女性的角度来优化产品体验,提升销售额。 由此,引发我的观点: 一个化腐...

    BestSDK
  • DeepCoder已经开始“偷”写代码,程序员的末日真的来了?

    人工智能系统正在变得越来越聪明,它们不仅能下围棋、炒股票,现在还学会了写代码。由微软和剑桥大学研究员一同开发的人工智能系统DeepCoder,完成了...

    BestSDK
  • 史无前例!Python将被加入高考科目

    Python 将被纳入高考科目 2017年初消息: 浙江省信息技术新教材,即将在2017级(2017年9月入学)高中新生中开始使用。 据了解,与目前的选考(可以...

    BestSDK
  • 爬取淘宝/天猫评论数据的过程

    要做数据分析首先得有数据才行。对于我等平民来说,最廉价的获取数据的方法,应该是用爬虫在网络上爬取数据了。本文记录一下笔者爬取天猫某商品的全过程,淘宝上面的店铺...

    机器学习AI算法工程
  • 高斯消去法解方程组及Python实现

    Python 是一种高级计算机程序设计语言。对于初学者和完成普通任务, Python 语言是非常简单易用的。 对于方程组Ax=b,增广矩阵为[A b]。第一次消...

    fem178
  • 【MyBatis-4】MyBatis批量insert、update、delete数据

    在日常开发中,批量操作数据库数据是常见场景,比如批量插入、批量修改、批量删除数据。MyBatis为批量操作数据提供了非常便利的方案。

    云深i不知处
  • 成都.NET开源社区庆祝Visual Studio 20岁生日趴体

    3月11日,由成都.NET开源社区朱永光发起,微软成都提供办公室,举办的“成都.NET技术线下交流活动”圆满成功。 这是成都.NET圈子2017年的第一次聚会,...

    角落的白板报
  • 用人的语言·为人设计

    Julie Zhuo,Facebook产品设计总监。毕业于斯坦福大学。是一位乐于分享,喜欢文字、美食、人文的产品设计师。

    mixlab
  • 【翻译】无需安装Python,就可以在.NET里调用Python库

    原文地址:https://henon.wordpress.com/2019/06/05/using-python-libraries-in-net-withou...

    solenovex
  • 9、互联网产品用户体验的要素

    理解产品用户体验的 – 五大要素别 – 五大元素包含的内容 – 五大要素包含内容的实际应用 1、学习用户体验要素的重要性 第十五课,我们用了六页PPT来讲用户体...

    陈树义

扫码关注云+社区

领取腾讯云代金券