python爬取某人所有微博_用python写网络爬虫爬取新浪微博评论

    本文详细介绍了如何利用python实现微博评论的爬取,可以爬取指定微博下的评论。基于的策略是找到微博评论接口,先登录微博,获取cookies,使用requests库发送请求,并且将数据存储到mysql中。

    首先微博的站点有四个,pc 端weibo.comweibo.cn 以及移动端 m.weibo.com(无法在电脑上浏览)、m.weibo.cn。在网上大致浏览了一下,普遍都认为移动端爬取比较容易,故选择移动端m.weibo.cn进行爬取。

    登陆m.weibo.cn之后,找到指定微博,例如榜姐的微博如下图。

854cd4ae065d8e2cafd7b0445539919f.png

    打开浏览器开发者模式,点击network,勾选XHR,刷新浏览器,发现出现下图中的一些请求。

f7e1b277aa04458dc3833ecb9358e0d6.png

点开红色方框中的链接,查看我们需要的信息,从可以找到请求链接,以及请求得到的数据,此页包含19条评论。

878eebe589f188f9d3182da24870e4cf.png

    此时我们继续下拉网页,会出现一系列包含我们所需数据的URL,如下图,

020bad52affee97bae47598926bb5609.png接下来我们就需要找出URL的构造规律然后发送请求获取数据了,将三个URL放在一起进行比较,如下图,第一个URL是固定不变的,往后每个URL中的max_id 后的一串字符会发生变化(URL中的id,mid都是一样的,其实就是每条微博的专属ID),也就是说我们如果知道max_id的生成方法即可构造被请求的URL。

720dcd0f8e0f486c0199c2c42871f735.png

打开第一个URL里面得到的数据,我们查看数据,发现里面有一个max_id,没错!第一个URL中获取到的数据max_id= 31526326254194240, 就是第二个URL中的max_id后的一串字符,使用这个max_id就可以构造下次请求的URL

b3ae400db5512cfe6fe7ee9f10b8ec02.png

关于获取cookie, 我们可以在浏览器开发者模式中,查看请求头,其中headers中有请求头,将cookie复制到代码中即可。

310f8259cdbd7b42b49a7ef9baa45429.png

    写代码之前我们先整理一下思路,通过第n次请求得到的max_id 用于构造第n+1次请求的URL,首先想到的就是递归函数,将函数返回值传入函数,形成递归。

    以下是获取数据的核心代码部分:

import requestsimport randomimport timeimport reimport jsonstart_url = 'https://m.weibo.cn/comments/hotflow?id=4490833493055699&mid=4490833493055699&max_id_type=0'  #首个urlnext_url = 'https://m.weibo.cn/comments/hotflow?id=4490833493055699&mid=4490833493055699&max_id={}&max_id_type=1'  #用于构造后面的url的模板continue_url = start_urlheaders = {'cookie': 'your cookie',  # 传入你自己的cookie'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',}count = 0def get_data(url):    for trytime in range(3):  # 允许超时次数为3次        try:            response = requests.get(url=url, headers= headers,timeout=5)            data = json.loads(response.text)            if response.status_code == 200:                break        except:            print('超时')    if trytime == 2:        #连续3次超时就退出递归        print('连续3次超时')        return         if data['ok'] == 0:    # 若没有获取到数据也进行退出        print("获取到的数据data['ok']=", 0)        return    elif data['ok'] == 1:   # 判断若能够获取到数据 则进行所需数据提取,并且构造下次请求的url,调用函数        max_id = data.get("data").get("max_id")        comments = data.get('data').get('data')        for item in comments:            ''' 获取内容creattime;floor——number;text;userid;screen——name;'''            global count            count+=1            create_time = item['created_at']            floor_number = item['floor_number']            text = ''.join(re.findall('[\u4e00-\u9fa5]',item['text']))    #item['text']            userid = item.get('user')['id']            screen_name = item.get('user')['screen_name']            print(count, create_time, userid, screen_name, floor_number, text)          global next_url        continue_url =  next_url.format(str(max_id))        print(continue_url)        time.sleep(random.random())        get_data(continue_url)     # 调用函数本身    return    if __name__ == "__main__":    get_data(continue_url)

执行上述代码,后台会打印出如下数据,分别是序号,评论时间,用户ID,用户昵称,楼层,评论内容。

432d823eede2a6aae575b8ef43d3defd.png

完整代码以及爬取完的所有数据示例见下面的链接。

https://github.com/Shengwei-Zhang/Python3Webspider/tree/master/weibocomments

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值