仅为练手之作,代码十分粗糙,只是进行一个思路的总结,勿喷,接受指点
- 爬取微博电脑版的难度很大(不要问,问就不会),我们退而求其次选择手机版微博
手机版微博网址 - 在这里我们选择湖南省博物馆进行爬取
- 在chrome或者新edge(赛高!!!)中找到湖南省博物馆主页打开
-
在检查模式中我们不断下拉观察network中xhr的变化
第一个
第二个
-
我们发现在页面动态加载的过程中 sice_id的变化标志着页面的变化,那么sice_id的规律在哪呢?
example
我们发现sice_id在上一个中cardlistInfo这个字典中有相关的数据
- 而在mblog中有我们想要的数据
example
程序实现
url太长现在不写了就
- 导入相关的库
import requests
import json
import pprint
import re
- 请求url,获取json数据
url = ''
while True:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) +'
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163+'
' Safari/537.36 Edg/80.0.361.111' }
req = requests.get(url, headers=headers).text
data = json.loads(req)
- 获取data下的cards, cardlistInfo
users = data['data']['cards']
since_id = data['data']['cardlistInfo']
#print(type(since_id))
- 我们可以知道sice_id是一个字典,获取其中的since_id
for k, v in since_id.items():
if k == 'since_id':
a = v
- 对url中的since_id进行变换
url = '......since_id='+str(a)
- 获取点赞,评论,转发,微博内容等,并以字典形式存储、打印
mblog = []
for user in users:
# pprint.pprint(user['mblog'])
mblog.append(user['mblog'])
dic = {}
for text in mblog:
#正则表达式去除无用标签
span = re.sub('<span(.*?)</span>', '', text['text'])
word = re.sub('<a(.*?)</a>', '', span)
information = re.sub('<br(.*?)<br />', '', word)
i = i+1
dic['序号: '] = i
dic['时间: '] = text['created_at']
dic['点赞: '] = text['attitudes_count']
dic['评论: '] = text['comments_count']
dic['转发: '] = text['reposts_count']
dic['内容: '] = information
for k, v in dic.items():
print(k, v)
整个程序需要完善的地方还有很多(比如while循环无跳出),在代码效率,数据存储,防反爬取等方面还有很多的不足,接受批评指正一起共同进步