python爬取新浪微博评论 - Go语言中文社区

python爬取新浪微博评论


简介

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

工具

python 3.5

requests库

re库


步骤

1. 登陆保存cookie

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



2. 找翻页规律

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

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

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



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标签的文本,如图所示:


可以利用正则表达式去除文本中的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

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/Caarolin/article/details/80379967
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 17:56:22
  • 阅读 ( 1538 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢