申明:本篇文章仅做学习交流之用,任何人不得拷贝、剽窃代码用于非法用途,违者后果自负。
本文将不对一些基础概念进行解释,如不理解请自行百度。
注:本教程中,先放图,后放说明,假若看图没看明白,往下看图的解释和说明!
首先讲一下python上面涉及到网页获取的两个库:urllib和requests库。在urllib库里存在urllib.request方式,该方式里恳求页面时参数选择有常见的url,header等,比如:
request.Request的参数里可选method,因而选择post,get等技巧。
而requests库里则直接提供了post,get等方式,比如:
两者的主要区别是:
requests可以直接构造get,post恳求并发起,而urllib.request只能先构造get,post恳求,再发起。若果在获取恳求对象时,不须要过多参数传递,比如一些简单的爬虫构造,爬取一些网页资源,可直接选择urllib.request;假如须要包装发送的包进行交互操作等,使用requests库愈发灵活可靠。这儿笔者推荐使用前者进行涉及POST分包等操作的python爬虫设计,requests库模拟浏览器行为愈发出众。
回到题外话,怎么使用requests库实现微博的各类功能?
为简约起见,这儿将直接跳过一些入门部份,步入剖析环节。假如你对接出来的一些名词不够了解,请自行百度做好打算工作后再阅读,或找个牛人,不懂就问。
cookie,恳求头,检测元素,requestmethod
微博的网页端有两种,一种是直接百度"微博"导向的笔记本网页端微博,另一种是在可笔记本网页上浏览的手机网页版微博。假如你分不清这两句话,可以瞧瞧这两张图片的对比。
笔记本端网页版微博weibo.com
手机端网页版微博m.weibo.cn
它们的区别主要是前者是.cn结尾,后者.com结尾。且前者多了个m.的前缀。这个m就是mobile即联通端的意思。本文选择前者即联通端的网页版微博的地址进行操作。缘由为:前者对于爬虫等的防护比较薄弱,且python模拟时涉及到的操作比较简单。
注:以下的操作的前提是登陆个人帐号。缘由很简单:点赞,评论,转发等等,这种操作必须由帐号主体完成。
假如网页没有登陆帐号,不可能完成一个完整的点赞行为。并且不登陆就可以浏览一些热门微博,说明在不设置cookie的时侯可以爬取一部份微博内容。假如你能想到这一点,说明你有一定的代码天分。事实是确实可以爬到一部份结果,并且没有登录以后的内容丰富。另外,回到那些操作,点赞,评论,转发,删掉微博。点赞微博须要明晰点赞的微博是哪条(对应微博ID),那说明在post递交的数据里一定有对应微博ID的数组(每一条微博都有一个独一无二的ID确定自己)。假如你能想到这一点,这么你的代码天分++;微博点赞不只是点赞一种方法,还可以选择自己的心情(比如愤怒,大笑等),这在post递交的数据里也是可选的。假如你能想到这一点,这么你微博玩太多了。
接着发散一下思维,剖析一下评论操作。评论也须要对某条微博(回复评论的愈发复杂一点,而且方式大致雷同,本文不赘言)进行操作,并且评论具有文本内容(不考虑带图)。这么评论的post发送的data里应当有一个标记微博ID和记录评论内容的数组。假如你能想到这点,这么你没有哪些进步。假如你昨天没想到并且如今想到了,这么孺子可教也。
转发操作呢?转发操作除了须要标记转发的微博,并且转发的用户可以在转发的同时发表自己的见解,因而post递交的data的内容和评论比较接近,都是微博ID和文本两个。(实际上form-data里是三个,其中两个重复)
删掉微博不须要表明你的心态,由于你不可能在删掉微博的同时还进行哪些额外的操作,因而只须要指明删掉的是哪条微博就可以了。即微博ID。
好了,看了那么多,里面的剖析似乎没哪些用。由于在实际观测微博顾客端的操作之前,这都只是推测而已。真正的方式是使用检测元素里的network来查看浏览器行为。
即:
在网页任意位置右键->检测元素,找到network蓝筹股
假如你找不到network,或则你的页面是英文而你不会将其切换成中文,这么你可以先试试百度来学习一些更多的浏览器的检测元素功能的相关知识。起码对你而言,这个教程你不该往下进行了。
有一个按键是clear,假如你将键盘悬停它会显示自己的名子,可以清空检测的包,我建议点一下,之后进行操作,这样看上去比较干净俐落。上图就是清空以后的情况。
点赞微博
接出来我的操作是点赞了图中的微博,可以看出左侧检查到了一条post操作,名子叫create,假如你出现了好几条操作,首先瞧瞧自己是不是进成桌面版微博了,网址对不对,假如网址对了,这么这些操作可能是页面手动额外加载的内容,不用在乎。
这时侯我也加载了一堆乱七八糟的内容
statuscode200表明响应良好,requestmethod是POST也就是递交了数据,这是我们意料之中的内容,说明这一条对应的浏览器操作,只要用python模拟了,就可以实现点赞操作了。
responseheaders是服务器返回的内容,这儿可以先不看,只看自己给服务器发了哪些。
恳求头
requestheaders就是恳求头,也就是自己的浏览器给微博服务器递交data时的身分证。这儿面最重要的就是cookie,保存了个人帐号的信息,也就是只要你复制了这段cookie就等于登陆了自己的帐号(修改密码可能会改变cookie,我没有试过)这也是为何所有的教程都不会展示cookie,至于最后的XSRF-TOKEN,这是身分令牌,每过一段时间会更新一次。
那你可能会说,令牌更新了cookie不就变了吗?那不还是用不了。理论上确实是这样,所以一个cookie不能始终用下去。并且我可以更新这个令牌,因而让自己的cookie永久可用。至于怎样更新令牌,这儿我先埋个伏笔,本文不会泄漏天机。
发送的data
headers是个人身分证,而发送的data在哪呢?往下降可以找到formdata栏,这儿就是发送的数据,有的浏览器比如edge可能会放在payload里,都一样,只要标题是formdata表单数据就可以了。
这儿有一个ID,一个attitude,一个st。挨个剖析一下,ID就是微博的ID了,验证方式极为简单,点进微博详情,在地址栏可以找到这串数字。
地址栏的微博ID。地址栏常常藏着好多信息,比如个人主页会标有个人的ID
attitude即心态,heart就是喜欢。而这个st,看着方式是不是和刚刚提及的XSRF-TOKEN比较接近呢?似乎就是XSRF-TOKEN
为何不一样呢?当然应当是一样才对,两个对应才说明是“真用户”“真即时操作”,这儿的不一样,某种程度上藏着更新token的答案。(也就是说,点赞时token过期也是可以通过的)
_spr可能标记了屏幕规格,垃圾信息,直接忽视。
接出来构造代码。
有人可能会问点赞评论网站,这个headers应当放什么东西,浏览器的requestheaders好多。我的经验是,从cookie开始下边的尽量都放进去,有的删掉以后post递交仍然可以成功,有的就不行。并且缺乏的关键字多了以后,容易被微博服务器屏蔽。
可以看见我这儿没有放XSRF-TOKEN,不放对于点赞是否成功没有影响,你可以选择加上。并且这个内容会变化,所以你须要维护headers。而我将cookie独立设置也是易于更新维护。
接出来构造发送的表单数据data
接着该发送post恳求了。post恳求须要一个网址,不知你还记不记得,在恳求的时侯有一个URL,昨天没有提及:
注意红框上方的requestURL
在进行python模拟操作的时侯,通常操作的URL从来不是网页上显示的简单的链接,而是浏览器实际恳求的链接。就例如这儿在点赞的时侯并不是恳求与点赞微博相关的链接,而是一条固定的api的链接。这也是我们要恳求的链接。
代码栏输入result.之后按tab补全,你可以看见它可以显示的一些参数。你可以依次输出,瞧瞧都是哪些玩意儿,之后想一下有哪些好处。
输出结果比较乱,为unicode编码
假如你在输出结果里看见ok:1,那说明点赞同功了,不出意外在后面的数组能够找到自己的名子也就是框中的screen_name数组(假如是英语可以直接看见,倘若是英文则为unicode编码,复制后用unicode转英文即可查到)
打开手机端微博查看近来点赞,假如有那条目标微博,说明成功了。注:你可以选择一条早已点赞的微博发起点赞恳求,并不会取消,由于取消赞和点赞是两种不同的递交内容。并且如果那条早已点赞过的微博是一段时间之前操作的,当你运行程序以后,你会发觉微博显示:你刚才赞过那条微博(点赞时间更新)。
假如你想批量点赞如何办?把须要操作的微博ID放进TXT中,之后每次读一行处理。注意设置频度,由于程序运行的时侯速率是特别快的,过快会被微博服务器处理,你会发觉自己被403forbidden了。
点赞的部份到此结束了,评论、删除、转发点赞评论网站,大致类似,我将截图置于下方,你们看一看就懂。