未分类

抓取某一条微博的评论信息[移动端]

1.打开任意一条微博的页面(手机端m.weibo.cn),这里按下F12打开开发者工具(这里使用的是Firefox),在页面内下拉时会产生请求,请求链接有规律

2.这里的请求链接中的id跟网页的那条微博id一致

3.对任意一条请求进行分析,请求返回的内容为json格式的数据,

4.只对该条微博的评论进行抓取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# -*- coding: utf-8 -*-

import requests
import re
import time

headers = {'Host': 'm.weibo.cn',
'Referer': 'https://m.weibo.cn/status/4227588807322638',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0'}

# 会以当前微博id命名
file_path = 'C:/Users/xxx/Desktop/weibo_' + headers['Referer'].split("/")[-1] + '.txt'


def crawl():
url = 'https://m.weibo.cn/api/comments/show?id=4227588807322638&page='
page = 0
while True:

html = requests.get(url + str(page), headers=headers)
print(url + str(page))
page += 1
json_response = html.json()

ok = json_response['ok'] # 获取返回状态,0表示获取失败或已没有数据,1表示获取成功
if ok == 0: # 如果请求失败,就break
break
data = json_response['data']['data']
for i in range(0, len(data)):
# ''.join()表示将列表组合成字符串,re.findall()在这里会返回一个列表,里面包含着一个个的汉字
text_chinese = ''.join(re.findall('[\u4e00-\u9fa5]', data[i]['text'])) # '[\u4e00-\u9fa5]'表示取汉字,取出所有的汉字,标点符号什么的全部扔掉
print(text_chinese)
# 以追加方式打开,将数据写入文件
with open(file_path, 'a', encoding='utf-8') as fp:
fp.write(text_chinese+'\n')
time.sleep(1)




if __name__ == '__main__':
crawl()

抓取结果:

分享到