欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python爬取新浪微博评论

程序员文章站 2023-12-22 13:49:40
...

简介

爬取微博m站评论。由于api限制只能爬取前100页,如果想要更全数据需爬pc端。

工具

python 3.5

requests库

re库


步骤

1. 登陆保存cookie

首先,打开m.weibo.cn. 输入用户名密码登陆之后,打开chrome开发者工具(Developer Tool),在Network里面找到m.weibo.cn这个地址,把cookie保存下来。

python爬取新浪微博评论


2. 找翻页规律

如图所示,利用开发者工具找到“show?id=...”,第一行的url就是要请求的地址。

多翻两页就会发现,“https://m.weibo.cn/api/comments/show?id=4073157046629802”这一串是不变的,只有后面的“page=”随翻页而变化。

我用的是.format()指令来实现url变化。

python爬取新浪微博评论


3. 写代码

上面两步完成后,接下来就可以写爬虫了。

(1)设置headers

为了不让网站发现我们是爬虫,需要设置user-agent和cookie,代码如下:

headers = {'Cookies':'Your cookie',
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'}
# 在requests中加入headers
j = requests.get(url, headers=headers).json()

(2)利用正则表达式提取评论文本

获取response之后,我们发现提取出了带有html标签的文本,如图所示:

python爬取新浪微博评论

可以利用正则表达式去除文本中的html标签:

tags = re.compile('</?\w+[^>]*>')
tags.sub('', data['text'])

(3)完整代码
# -*- coding:utf-8 -*-

import requests
import re
import time
import pandas as pd

# 把id替换成你想爬的地址id
urls = 'https://m.weibo.cn/api/comments/show?id=4073157046629802&page={}'

headers = {'Cookies':'Your cookies',
          'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'}

# 找到html标签
tags = re.compile('</?\w+[^>]*>')

# 设置提取评论function
def get_comment(url):
    j = requests.get(url, headers=headers).json()
    comment_data = j['data']['data']
    for data in comment_data:
        try:
            comment = tags.sub('', data['text']) # 去掉html标签
            reply = tags.sub('', data['reply_text'])
            weibo_id = data['id']
            reply_id = data['reply_id']

            comments.append(comment)
            comments.append(reply)
            ids.append(weibo_id)
            ids.append(reply_id)

        except KeyError:
            pass


comments, ids = [], []
for i in range(1, 101):
    url = urls.format(str(i))
    get_comment(url)
    time.sleep(1) # 防止爬得太快被封

# 这里我用pandas写入csv文件,需要设置encoding,不然会出现乱码
df = pd.DataFrame({'ID': ids, '评论': comments})
df = df.drop_duplicates()
df.to_csv('观察者网.csv', index=False, encoding='gb18030')

这样100页就爬完了,去除掉重复的大概有700条评论。

后续可以用python读取csv文件进行词频统计等。


reference

https://blog.csdn.net/change_things/article/details/79260274

上一篇:

下一篇: