python使用代理+多线程爬取速卖通评论(一)

废话少说

很庆幸暑假入了python的坑,也很庆幸选择学习爬虫,因为用python真的可以用很少的代码完成很多有趣的事情,爬虫便是其中之一。断断续续学爬虫有几个月了,现在我早已不满足于最开始单进程,单IP,爬豆瓣,糗事百科这种纯静态请求的页面,爬取这种动态请求数据的其实更有意思。因为我自己感觉做爬虫有俩个地方很爽,一个就是成功分析出了目标网站请求数据的策略,另一个地方就是成功爬到数据的时候,看着数据一条条刷刷刷的保存到本地的时候是真的爽。
学习爬虫,一定要尝试爬一爬电商平台的数据,一定要尝试逐步提高自己的爬取数据量,要不你还以为所有的网站那么容易爬呢!今天,我就来爬一爬速卖通(阿里的跨境电商平台)的用户评论。

正文

环境准备

python 环境
request库 用于发送http/https请求,接收响应
BeautifulSoup库 用于解析网页
上述环境只是因为博主习惯了而已,不是爬虫最核心的东西,搞清楚数据是怎么请求的,可以选用不同的语言和库去实现。

分析评论数据请求策略

分析请求就是看看我们目标数据是从哪个http请求请求过来的。在速卖通我们随便打开一个产品页,如下图


feedback肯定就是评论的意思,我们点击评论,并右键进入开发者工具
image.png

从谷歌开发者工具Elements选项我们可以看出评论在类.buyer-feedback这个dt元素里。
尝试1:我们从浏览器复制链接,然后用requests向该链接发出get请求
image.png

咦,评论明明在这个页面,为什么请求成功却取不到这些评论数据。
这就是动态请求数据与静态请求的区别,静态请求数据一般都是服务器端渲染好的了,你请求到的时候已经填充了数据,而动态请求是,客户端通过发送ajax请求,将数据请求到前端,然后由前端来渲染的,即用js把数据插入html页面中的,所以真正的数据是通过另一个请求得到的,所以现在的问题就是要找到这个请求评论数据的地址。
重新刷新页面,右键开发者工具 进入network选项,如下图
image.png

可以发现,现在已经有了160多个请求,所以在点击feedback之前一定要先clear掉现在所有的请求,否则你一点feedback,会出现更多请求,就不好判断是哪个请求请求得到了评论数据
clear掉之后,点击feedback,会看到你在点了feedback之后出现的请求,所以评论数据的请求地址一定在这些请求当中

image.png

这时候你基本有俩个选择,如果请求数不多的话,点击每一个请求,看看是不是;如果请求还是比较多,你可以利用谷歌开发者工具上边的请求过滤器,默认是显示全部类型的请求,因为你要找的是评论数据,那么肯定不是图片,css,media,Font等类型,最有可能的是XHR,JS,Doc
XHR即通过ajax异步请求的数据,JS即js文件,这个也是有可能的,Doc即html文档
image.png

然后我们分别点击XHR,JS,Doc,一个个试(这个没好办法,只能一个个试,但是你经验越丰富,你试出来的时间越短,比如你从请求链接里的某个英文单词,就大概可以猜出)最终在XHR,JS里都没有发现,那么按照排除法,只能在DOC里边的请求了,doc下只有俩个请求,其中一个请求中还有productEvaluation等字眼,直接告诉我,没问题,就是它了。
image.png

选择preview或者response,往下拉一拉,很快就发现了评论数据,果然不出我所料,正常人在这个时候是有点爽的。
然后,我们来看看请求信息,选择Headers
image.png

然后,我们模仿该请求来进行第二次尝试
尝试2:我们直接从浏览器复制请求头,连cookie一起复制
image.png

requests.get(url,headers=headers) 带header请求发送get请求

可以发现,我们已经正确取到了评论数据,正常人这个时候应该感觉更爽才对。
既然评论的请求地址搞清楚了,那么接下来考虑的是增大数据量爬取,看看会不会遇到什么问题,因为评论有很多页,所以我们很自然的想到可以考虑按页数爬取全部的数据,但是就在我打算写代码的时候,我才突然发现我不知道怎么写!为什么,因为我突然发现刚才这个请求里没有任何有关页数的信息!
不过,没关系,这个办法很好解决,因为页面上是有分页按钮的,所以我们点击第二页,看看第二页数据是怎么请求来的
还是按照之前的办法,先clear掉之前的请求,然后点击第二页,观察有哪些新的请求出现,这个过程和之前类似,我们很快就找到这个第二页数据的请求地址

image.png

这个请求是POST请求,然后我分析提交的数据,发现里边有一个key是page,值是2,那么这个page肯定是用来控制分页,所以其实这个接口才是真正的数据请求接口,可以根据不同的产品ID,卖家ID,页数等信息获取评论数据。到底是不是,我们继续测试,同样复制请求头,和请求数据,cookie也要正确复制,否则得不到数据
尝试3
image.png

requests.post(url,headers=headers,data=data) 可以带请求头和数据发出请求

可以发现,成功获取到了数据,至此,我找到了数据请求地址,但是接下来还有一个最复杂的问题。
我随便换一个产品ID,甚至让它为空,会发现请求到的数据还是原来的数据,如下图


image.png

我们继续观察post的数据


image.png

会注意到有一个_csrf_token:xz4r263hT4WbCYfPCtSbq3 这个值,我猜肯定这个值是根据产品ID等信息变化的,也就是只有这个token对了,才可以拿到数据。(别问我为什么可以猜到,直觉)
我们改一下这个token值

数据立刻就请求不到了!!!
搞了这么多,如果不能正确获取token,前边的分析都意义不大,总不能每次换一个产品,就手动去浏览器里手动复制token吧。
那么这个token是怎么来的呢?
经过我一天的摸索(这个我真心没什么技巧,有的是服务器端生成的,有的是通过js执行脚本生成的),我终于发现了端倪。
还记不记得我们第一次尝试,即第一页的评论是通过GET请求得到的,其实那个页面除了请求第一页评论外,还拿到了这个token值,如图


image.png

md,藏的可真深呐!!!

结论

所以最终请求策略就是
先根据productid,ownerMemberid,companyId构造一个url,如下

url1=https://feedback.aliexpress.com/display/productEvaluation.htm?productId=32466567934&ownerMemberId=223275770&companyId=232994171&memberType=seller&startValidDate=&i18n=true

向这个url发送get请求,取到token值,同时保存cookie
然后带着这个cookie,以及token和其它数据向

url2=https://feedback.aliexpress.com/display/productEvaluation.htm

post数据,就ok了

 基于python requests库的 伪代码
  session=requests.Session() #用session是为了保存cookie
  res=session.get(url1,header=header)
  # 获取token
  token=get_token(res)
  data={
    ...
    '_csrf_token':token
  }
  comment=session.post(url2,headers=headers,data=data)
  # 解析评论数据
  data_list=parseComment(comment)
  # 保存评论数据
  store_data(data_list)

最后

到此,我们基本已经搞清楚了速卖通评论的请求策略,在下一篇文章中,我们开始采用代理IP以及多线程来编写最终代码。

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

推荐阅读更多精彩内容