人生苦短,用Python爬取微博大V

本文介绍了如何使用Python爬虫抓取微博大V的微博信息和评论。首先获取Cookie,然后搜索指定大V,通过分析接口获取UID和containerid,实现分页抓取微博内容。同时,提供了搜索特定微博和获取评论的功能,以提高爬取效率。
摘要由CSDN通过智能技术生成

这里的微博爬虫,我主要实现的是输入你关心的某个大 V 的微博名称,以及某条微博的相关内容片段,即可自动爬取相关该大 V 一段时间内发布的微博信息和对应微博的评论信息。

Cookie 获取

与上面的 Boss 直聘网站类似,爬取微博也需要获取响应的 cookie。

用浏览器打开微博页面,拷贝出对应的 Cookie,保存到本地。

微博搜索

既然是某位大 V,这里就肯定涉及到了搜索的事情,我们可以先来尝试下微博自带的搜索,地址如下:

s.weibo.com/user?q=林志玲

同样是先放到 Postman 里请求下,看看能不能直接访问:

是可以的,这就省去了我们很多的麻烦。下面就是来分析并解析响应消息,拿到对我们有用的数据。
经过观察可知,这个接口返回的数据中,有一个 UID 信息,是每个微博用户的唯一 ID,我们可以拿过来留作后面使用。

至于要如何定位到这个 UID,我也已经在图中做了标注,相信你只要简单分析下就能明白。

在学习过程中有什么不懂得可以加我的
python学习交流扣扣qun,784758214
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容

def get_uid(name):
    try:
        url = 'https://s.weibo.com/user?q=%s' % name
        res = requests.get(url).text
        content = BeautifulSoup(res, 'html.parser')
        user = content.find('div', attrs={'class': 'card card-user-b s-pg16 s-brt1'})
        user_info = user.find('div', attrs={'class': 'info'}).find('div')
        href_list = user_info.find_all('a')
        if len(href_list) == 3:
            title = href_list[1].get('title')
            if title == '微博个人认证':
                uid = href_list[2].get('uid')
                return uid
            elif title == '微博会员':
                uid = href_list[2].get('uid')
                return uid
        else:
            print("There are something wrong")
            return False
    except:
        raise

还是通过 BeautifulSoup 来定位获取元素,最后返回 UID 信息。

M 站的利用

M 站一般是指手机网页端的页面,也就是为了适配 mobile 移动端而制作的页面。一般的网站都是在原网址前面加“m.”来作为自己 M 站的地址,比如:m.baidu.com 就是百度的 M 站。
我们来打开微博的 M 站,再进入到林志玲的微博页面看看 Network 中的请求,有没有什么惊喜呢?
我们首先发现了这样一个 URL:

https://m.weibo.cn/api/container/getIndex?uid=1312412824&luicode=10000011&lfid=100103type%3D1%26q%3D%E6%9E%97%E5%BF%97%E7%8E%B2&containerid=1005051312412824

接着继续拖动网页,发现 Network 中又有类似的 URL:

https://m.weibo.cn/api/container/getIndex?uid=1312412824&luicode=10000011&lfid=100103type%3D1%26q%3D%E6%9E%97%E5%BF%97%E7%8E%B2&containerid=1076031312412824

URL 类似,但是第一个返回的数据是用户信息,而第二个返回的则是用户的微博信息,显然第二个 URL 是我们需要的。同样道理,把第二个 URL 放到 Postman 中,看看哪些参数是可以省略的。

最后我们发现,只要传入正确的 containerid 信息,就能够返回对应的微博信息,可是 containerid 信息又从哪里来呢?我们刚刚获得了一个 UID 信息,现在来尝试下能不能通过这个 UID 来获取到 containerid 信息。

这里就又需要一些经验了,我可以不停的尝试给接
口“m.weibo.cn/api/container/getIndex”添加不同的参数,看看它会返回些什么信息,比如常见的参数名称 type、id、value、name 等。最终,在我不懈的努力下,发现 type 和 value 的组合是成功的,可以拿到对应的 containerid 信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值