Python实战—爬取“金耳朵兔子”微博” 看马蓉最近的动态

疾风先生 2018-12-03

鄙人程序猿一头,一般情况下不关注明星事件。

但此事非彼事,婚姻问题是个大问题。但是鄙人能力有限,当不了伴娘、喂不饱红娘,只能就是通过此事教朋友们一些编程的小案例,供大家分享学习~

标题我们说的很明确了,用Python来爬取马老板的微博动态,其实很简单,我们就分几步来说。

步骤:

  1. 搜索马老板的微博
  2. 找到马老板的微博ID(每个博主都有一个唯一的ID跟身份证一样)
  3. 设置代理(防Ban)
  4. 编写Python脚本请求
  5. 处理清洗数据

简单的几步,走完即可搞定。

注:代码不方便在文章里排版,所以部分用的图片。有需要的可以直接私信我~

环境拓扑:

操作系统:Kali Linux(windows也可以)

编程语言:Python V3.6

用到的模块:urllib、json

代理地址:西刺的免费代理

工程实施:

第一步,打开微博主页,然后在搜索框里搜“马蓉”:

Python实战—爬取“金耳朵兔子”微博” 看马蓉最近的动态

我们可以看到排名第一的是“金耳朵兔子”的微博,粉丝还比较多(反正比我的多)应该就是了。然后我们需要获取她的ID,所以我们点进去:

Python实战—爬取“金耳朵兔子”微博” 看马蓉最近的动态

通常ID都是在地址栏里显示如?id=1234,但是点击去之后我们发现,她的主页并没有显示ID,怎么办呢?

那我们就试试m版(手机版)看看能不能找到:

Python实战—爬取“金耳朵兔子”微博” 看马蓉最近的动态

在她的个人主页:按F12调出浏览器自带的调试工具,然后点一下那个像手机的符号,然后再刷新一下页面,你会发现奇迹发生了,电脑版变的跟手机上访问微博一样了。

这时候浏览器的地址栏会发生改变,上图的数字就是老马的ID号,你需要把它记录下来。

有了这些我们就得开始写代码了。

代码实施:

首先我们需要声明编码格式为utf8,然后导入我们需要的模块:

# -*- coding: utf-8 -*-

import urllib

import urllib.request

import json

注:你会发现urllib导入了两次,因为python3.X有时候不会将子模块自动导入进去,所以改成import url.request就OK了,当然你只导入一次就OK。

然后我们为了后期方便爬取其它大V的微博,我们先定义一个id变量来存储我们上面记录的ID值,以后想爬谁,直接改下ID即可:

id='1828817187'

然后我们需要设置一下代理参数,防止被机器Gank掉,这里我们去西刺随便弄一个IP代理就行:

Python实战—爬取“金耳朵兔子”微博” 看马蓉最近的动态

从上面随便选一个然后我们创建一个proxy_addr的变量来存放我们的代理IP:

proxy_addr="60.191.134.164:9999"

做完上述工作后我们就需要开始正式的写代码了:

Python实战—爬取“金耳朵兔子”微博” 看马蓉最近的动态

上面的代码是定义一个use_proxy()函数,用来打开我们需要的页面,并且我们伪装了浏览器的header信息,企图告诉weibo我们是正常访问,并获取返回的数据。

Python实战—爬取“金耳朵兔子”微博” 看马蓉最近的动态

上面的代码是为了获取微博主页的containerid,一会爬取微博内容时需要这个id。

然后我们需要一个接口,来获取大V帐号的基本信息,这里我们给一个地址,你可以拿到浏览器试一下:

https://m.weibo.cn/api/container/getIndex?type=uid&value='+大Vid号

Python实战—爬取“金耳朵兔子”微博” 看马蓉最近的动态

你会发现,浏览器返回了乱糟糟的一片完全看不懂,没关系,这是Unicode编码的,你可以把用户名比如里面类似于:"\u91d1\u8033\u6735\u5154\u5b50"这样的字符在站长之家那转下码:

Python实战—爬取“金耳朵兔子”微博” 看马蓉最近的动态

结果很明显,确实是我们要爬取的webo名称,然后我们将获取到大V的基本信息打印出来:

Python实战—爬取“金耳朵兔子”微博” 看马蓉最近的动态

上面的代码就是通过上面的链接返回来的数据,这些数据存储着大V的基本信息,下面我归类一下:

name:微博昵称

profile_url:微博主页地址

profile_image_url:微博头像地址

verified:是否认证

description:微博说明

guanzhu:关注人数

fensi:粉丝数

gender:性别

urank:微博等级

以上跟代码里一一对应,就不过多解释了。

Python实战—爬取“金耳朵兔子”微博” 看马蓉最近的动态

上面我们不难看出,我们的数据来源还是weibo的API,我们只需要把返回的数据清洗出来,然后保存到本地TXT文档即可,同样的我们还是把一些变量的存放类型列出来:

scheme:微博地址

created_at:发布时间created_at

text:微博内容text

attitudes_count:点赞数

comments_count:评论数

reposts_count:转发数

好到现在基本差不多了,然后我们设置一下函数运行入口就完事了:

if __name__=="__main__":

file=id+".txt"

get_userInfo(id)

get_weibo(id,file)

file变量用来设置爬取下来的数据保存的路径名称,然后跳入我们定义的get_userInfo()函数中获取大V的基本信息,然后进入get_weibo()函数获取博文,并保存到本地。

测试:

Python实战—爬取“金耳朵兔子”微博” 看马蓉最近的动态

简单易用,这里我做测试就爬了10条Ctrl+C停止了,然后在根目录下生成了TXT文件,存放爬取的数据,怎么样,赶紧试试吧~