疾风先生 2018-12-03
鄙人程序猿一头,一般情况下不关注明星事件。
但此事非彼事,婚姻问题是个大问题。但是鄙人能力有限,当不了伴娘、喂不饱红娘,只能就是通过此事教朋友们一些编程的小案例,供大家分享学习~
标题我们说的很明确了,用Python来爬取马老板的微博动态,其实很简单,我们就分几步来说。
简单的几步,走完即可搞定。
注:代码不方便在文章里排版,所以部分用的图片。有需要的可以直接私信我~
操作系统:Kali Linux(windows也可以)
编程语言:Python V3.6
用到的模块:urllib、json
代理地址:西刺的免费代理
第一步,打开微博主页,然后在搜索框里搜“马蓉”:
我们可以看到排名第一的是“金耳朵兔子”的微博,粉丝还比较多(反正比我的多)应该就是了。然后我们需要获取她的ID,所以我们点进去:
通常ID都是在地址栏里显示如?id=1234,但是点击去之后我们发现,她的主页并没有显示ID,怎么办呢?
那我们就试试m版(手机版)看看能不能找到:
在她的个人主页:按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代理就行:
从上面随便选一个然后我们创建一个proxy_addr的变量来存放我们的代理IP:
proxy_addr="60.191.134.164:9999"
做完上述工作后我们就需要开始正式的写代码了:
上面的代码是定义一个use_proxy()函数,用来打开我们需要的页面,并且我们伪装了浏览器的header信息,企图告诉weibo我们是正常访问,并获取返回的数据。
上面的代码是为了获取微博主页的containerid,一会爬取微博内容时需要这个id。
然后我们需要一个接口,来获取大V帐号的基本信息,这里我们给一个地址,你可以拿到浏览器试一下:
https://m.weibo.cn/api/container/getIndex?type=uid&value='+大Vid号
你会发现,浏览器返回了乱糟糟的一片完全看不懂,没关系,这是Unicode编码的,你可以把用户名比如里面类似于:"\u91d1\u8033\u6735\u5154\u5b50"这样的字符在站长之家那转下码:
结果很明显,确实是我们要爬取的webo名称,然后我们将获取到大V的基本信息打印出来:
上面的代码就是通过上面的链接返回来的数据,这些数据存储着大V的基本信息,下面我归类一下:
name:微博昵称
profile_url:微博主页地址
profile_image_url:微博头像地址
verified:是否认证
description:微博说明
guanzhu:关注人数
fensi:粉丝数
gender:性别
urank:微博等级
以上跟代码里一一对应,就不过多解释了。
上面我们不难看出,我们的数据来源还是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()函数获取博文,并保存到本地。
简单易用,这里我做测试就爬了10条Ctrl+C停止了,然后在根目录下生成了TXT文件,存放爬取的数据,怎么样,赶紧试试吧~