写了一个简单的Python爬取指定用户微博的内容和图片,目前比较简陋,之前有在github上参考别人写的爬虫,发现现在微博好像使用的是Ajax的方式来渲染数据,这也太方便了,直接请求接口,然后解析数据不就能得到我们想要的数据了吗????
ok,开始操作
首先,我们进入微博,打开检查,观察数据,这里我用的方法比较蠢,是一个个看返回内容是什么。。。等后面学习到了更高深的技术了在和大家分享吧,
经过手动查看,发现mymblog接口是获取内容的接口,然后操作,我们使用请求数据的第三方库是requests,先将请求头和获取内容的地址还有获取信息的地址定义好
def __init__(self):
self.headers = {
'cookie': '',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36',
'referer': 'https://weibo.com/u/3214393887'
}
self.user_info_url = 'https://weibo.com/ajax/profile/info?uid=3214393887'
self.content_url = 'https://weibo.com/ajax/statuses/mymblog?uid=5541182601&page={}&feature=0'
self.session = requests.session()
self.user = User()
self.contents = []
这里的请求头可以在浏览器中cv,不再赘述,
这里是我保存微博内容的对象,
class Weibo:
def __init__(self):
self.id = ''
self.user_id = ''
self.screen_name = ''
self.content = ''
self.article_url = ''
self.original_pictures = []
self.retweet_pictures = None
self.original = None
self.video_url = ''
self.publish_place = ''
self.publish_time = ''
self.publish_tool = ''
self.up_num = 0
self.retweet_num = 0
self.comment_num = 0
def __str__(self):
"""打印一条微博"""
result = self.content + '\n'
result += u'微博发布位置:%s\n' % self.publish_place
result += u'发布时间:%s\n' % self.publish_time
result += u'发布工具:%s\n' % self.publish_tool
result += u'点赞数:%d\n' % self.up_num
result += u'转发数:%d\n' % self.retweet_num
result += u'评论数:%d\n' % self.comment_num
# result += u'url:https://weibo.cn/comment/%s\n' % self.id
return result
解析数据的接口没啥好讲的,就是对症下药。。。
def get_data(self, since_id,page):
contentInfo = self.session.get(url=(self.content_url + '&since_id=' + since_id).format(page), headers=self.headers).content.decode()
resultDict = json.loads(contentInfo)
dataDict = resultDict['data']
dataList = dataDict['list']
index = 0
for data in dataList:
index += 1
wb = Weibo()
wb.id = dat