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

Ajax使用,爬取微博正文,点赞,评论数。

程序员文章站 2022-03-02 19:39:01
...

本人声明,该文章仅为学习所用,未做任何其他用途。

各位看官老爷们大家好,这一次我们来聊聊使用Ajax爬取微博评论数,正文,点赞数。

首先我们想想思路。

一、最开始的,也是我们用的最多和必要的,模拟浏览器爬取页面。这一点想必不用多说了。

headers = {
    'Host': 'm.weibo.cn',
    'Referer': 'https://m.weibo.cn/u/2830678474',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest',
}

二、请求之后就是找规律的,和上次一样,这次就不放图了,经观察发现page值增加1

 

三、提取如下。

item = item.get('mblog', {})
                weibo = {}
                weibo['id'] = item.get('id')
                weibo['text'] = pq(item.get('text')).text()
                weibo['attitudes'] = item.get('attitudes_count')
                weibo['comments'] = item.get('comments_count')
                weibo['reposts'] = item.get('reposts_count')
                yield weibo

四、请求代码如下,成功失败返回值。

base_url = 'https://m.weibo.cn/api/container/getIndex?'
headers = {
    'Host': 'm.weibo.cn',
    'Referer': 'https://m.weibo.cn/u/2830678474',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest',
}
client = MongoClient()
db = client['weibo']
collection = db['weibo']
max_page = 10


def get_page(page):
    params = {
        'type': 'uid',
        'value': '2830678474',
        'containerid': '1076032830678474',
        'page': page
    }
    url = base_url + urlencode(params)
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            return response.json(), page
    except requests.ConnectionError as e:
        print('Error', e.args)

五、主函数,for循环遍历想循环的次数,也就是想爬取的页面数 ,这里我们设置成10.

if __name__ == '__main__':
    for page in range(1, max_page + 1):
        json = get_page(page)
        results = parse_page(*json)
        for result in results:
            print(result)

如上所示。

完整代码如下:

import requests
from urllib.parse import urlencode
from pyquery import PyQuery as pq
from pymongo import MongoClient

base_url = 'https://m.weibo.cn/api/container/getIndex?'
headers = {
    'Host': 'm.weibo.cn',
    'Referer': 'https://m.weibo.cn/u/2830678474',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest',
}
client = MongoClient()
db = client['weibo']
collection = db['weibo']
max_page = 10


def get_page(page):
    params = {
        'type': 'uid',
        'value': '2830678474',
        'containerid': '1076032830678474',
        'page': page
    }
    url = base_url + urlencode(params)
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            return response.json(), page
    except requests.ConnectionError as e:
        print('Error', e.args)


def parse_page(json, page: int):
    if json:
        items = json.get('data').get('cards')
        for index, item in enumerate(items):
            if page == 1 and index == 1:
                continue
            else:
                item = item.get('mblog', {})
                weibo = {}
                weibo['id'] = item.get('id')
                weibo['text'] = pq(item.get('text')).text()
                weibo['attitudes'] = item.get('attitudes_count')
                weibo['comments'] = item.get('comments_count')
                weibo['reposts'] = item.get('reposts_count')
                yield weibo



if __name__ == '__main__':
    for page in range(1, max_page + 1):
        json = get_page(page)
        results = parse_page(*json)
        for result in results:
            print(result)

运行结果如下(ps:2019年7月19日23时):

E:\PY\venv\Scripts\python.exe E:/PY/Ajax.py
{'id': '4395852590201056', 'text': '哈哈哈哈哈哈哈哈哈哈哈哈', 'attitudes': 0, 'comments': 1, 'reposts': 0}
{'id': '4393921821587600', 'text': '老婆我爱你! 花絮慎点啊。', 'attitudes': 23, 'comments': 7, 'reposts': 1}
{'id': '4393850371867195', 'text': '执行力非常重要,做一个实干者。', 'attitudes': 4, 'comments': 0, 'reposts': 4}
{'id': '4393608914828988', 'text': '欧耶!!!!!@长泽牙妹\n济南', 'attitudes': 9, 'comments': 17, 'reposts': 0}
{'id': '4393563145925473', 'text': '叔叔要和我喝酒了。\n我好慌。 济南', 'attitudes': 13, 'comments': 20, 'reposts': 0}
{'id': '4393542569418003', 'text': '济南·济南西火车站', 'attitudes': 4, 'comments': 3, 'reposts': 0}
{'id': '4393534339190817', 'text': '快到了,快到了。\n感觉我的心脏在跳动。 德州·土桥村', 'attitudes': 6, 'comments': 8, 'reposts': 0}
{'id': '4393512038508966', 'text': '这个不错', 'attitudes': 4, 'comments': 1, 'reposts': 7}
{'id': '4393494594270054', 'text': '[加油]', 'attitudes': 3, 'comments': 1, 'reposts': 14}
{'id': '4393494317414100', 'text': '至关重要的一天,好紧张。\n小崔冲鸭!', 'attitudes': 8, 'comments': 5, 'reposts': 0}
{'id': '4393369499839135', 'text': '', 'attitudes': 1, 'comments': 3, 'reposts': 0}
{'id': '4392654118546216', 'text': '有些人就那么闲,有些人就那么忙。我总感觉时间不够用,为什么时间不能由一个人分给另一个人呢? 南极洲', 'attitudes': 6, 'comments': 5, 'reposts': 0}
{'id': '4392270675492220', 'text': '我老婆一个月瘦了八斤,快来围观我老婆的减肥秘籍!', 'attitudes': 2, 'comments': 2, 'reposts': 0}
{'id': '4392222500256063', 'text': '', 'attitudes': 3, 'comments': 0, 'reposts': 2}
{'id': '4391006243841457', 'text': '这年头表情包都能这样赚钱了!', 'attitudes': 13, 'comments': 2, 'reposts': 0}
{'id': '4390095707120866', 'text': "//@TURBODONG90507://@长泽牙妹:@崔庆才丨静觅 ????//@魔神弹豆子:what's your problem? 关键时刻李彦宏也知道中文搜索不靠谱。。", 'attitudes': 3, 'comments': 0, 'reposts': 0}
{'id': '4389902202380102', 'text': '????', 'attitudes': 1, 'comments': 0, 'reposts': 0}
{'id': '4389895348812529', 'text': '//@52nlp://@PKUCATer: //@科普君XueShu雪树:令人唏嘘//@浪里赤条小粗林:我的天啊……因为不想科研造假所以以死明志……', 'attitudes': 2, 'comments': 0, 'reposts': 6}
{'id': '4389893557746201', 'text': '回复@故梦怀旧://@故梦怀旧:被打服了,打成小迷弟了', 'attitudes': 1, 'comments': 0, 'reposts': 0}
{'id': '4389593736224777', 'text': '[加油]', 'attitudes': 1, 'comments': 0, 'reposts': 0}
{'id': '4389593417293668', 'text': '勇士库里克莱一哥还是很好的,经理教练格林都是些什么玩意...最后一哥还被交易了...真服 //@LeonLuo:挺好的 养好脚伤 回来打爆勇士', 'attitudes': 0, 'comments': 1, 'reposts': 1}
{'id': '4389592855488478', 'text': '格林一生黑!//@丽卷毛:格林吧,就是个大傻X,本事不大,脾气大……', 'attitudes': 0, 'comments': 0, 'reposts': 0}
{'id': '4389558529296223', 'text': '这作息有点病态...\n继续调整![加油] 北京 · 中关村', 'attitudes': 3, 'comments': 0, 'reposts': 0}
{'id': '4389138205679141', 'text': '俺一直是阿杜粉,以后就是篮网粉了!', 'attitudes': 7, 'comments': 1, 'reposts': 0}
{'id': '4388662080858927', 'text': '//@JUNYI定制_:在哪里都有哨子的男人//@番茄炒西红柿不放盐:中国唯一一个防住哈登的人', 'attitudes': 2, 'comments': 0, 'reposts': 1}
{'id': '4388660269017778', 'text': '西安第一天,吃遍整个回民街,我老婆太会找吃的了,吃到肚肚鼓鼓的!\n有几个图拍歪了,但为了 live 不修了! 西安', 'attitudes': 7, 'comments': 7, 'reposts': 0}
{'id': '4388303945657295', 'text': '老婆以后家里的碗我全包了!@长泽牙妹', 'attitudes': 5, 'comments': 0, 'reposts': 0}
{'id': '4387867369267085', 'text': '哎盗版太多了,我录制的视频现在也是盗版满天飞,我都放弃了...这也是我的书不出电子版的原因...', 'attitudes': 6, 'comments': 13, 'reposts': 2}
{'id': '4387781021057108', 'text': '@闲鱼', 'attitudes': 3, 'comments': 0, 'reposts': 0}
{'id': '4387558945418425', 'text': '//@掘金技术社区:掘金诚实的 Slogan 是「有三分之一的用户上掘金就是为了上班摸鱼」', 'attitudes': 4, 'comments': 0, 'reposts': 5}
{'id': '4387536493517959', 'text': '我老婆明天就破一千粉了!@长泽牙妹', 'attitudes': 2, 'comments': 9, 'reposts': 0}
{'id': '4387424408539777', 'text': '怎么肥四,我老婆最近七天涨了三百个粉,而我只有六十个。\n明明都是我的粉丝来着,但是都脱粉了去粉我老婆了。\n怎么会这样呢? 北京', 'attitudes': 5, 'comments': 9, 'reposts': 1}
{'id': '4386828281036725', 'text': '我老婆又连载啦!话说配图能不能给我选个帅一点的!', 'attitudes': 8, 'comments': 4, 'reposts': 0}
{'id': '4386484838552925', 'text': '我们做的事可能百分之八十都是没用的,我做的这些到最后又有什么意义呢?\n不知道,可还是要做,可还是很累。\n慢慢学会权衡吧。', 'attitudes': 14, 'comments': 5, 'reposts': 4}
{'id': '4386143246153954', 'text': '', 'attitudes': 1, 'comments': 1, 'reposts': 0}
{'id': '4385755625776012', 'text': '', 'attitudes': 2, 'comments': 0, 'reposts': 0}
{'id': '4384960695341388', 'text': '感觉 16G 的 MacBook Pro 已经满足不了我的撸代码速度了。\n一片开发必备软件开多了就卡出翔了。\n好的那我要不要买 iMac 64G 呢?\n不买!\n为什么。\n留着钱给我老婆买好吃的还有好看的衣服服。', 'attitudes': 19, 'comments': 12, 'reposts': 0}
{'id': '4384857473793201', 'text': '老婆这都给我写好了!我可要加油啊!', 'attitudes': 17, 'comments': 3, 'reposts': 4}
{'id': '4384641807008634', 'text': '不知道是不是因为早起的缘故,六点就起了,现在感觉有点头昏脑涨。\n下班休养生息了。\n难道我还是不适合早起?适合当一个夜猫子?', 'attitudes': 2, 'comments': 2, 'reposts': 0}
{'id': '4384323530325456', 'text': '//@苏生不惑:转发微博', 'attitudes': 2, 'comments': 0, 'reposts': 2}
{'id': '4383920340166077', 'text': '今天来理发,一进来放东西。\n:就住这附近吧?\n我一想我确实住这附近啊,但我说是的话就肯定推销我办卡了。\n:没,住的还挺远的。\n他又看我提了一些吃的喝的。\n:那你这咋还提了这么多东西啊?\n:难得出来一趟,多买了点。\n他脸一黑,我们俩呵呵笑了起来。', 'attitudes': 10, 'comments': 3, 'reposts': 0}
{'id': '4383902707553489', 'text': '卧槽我老婆也太厉害了,找到这么好吃的店!!!\n吹爆骨气鼓气羊棒骨!!!!太好吃了!!!!!! 北京·骨气鼓气秘制羊棒骨', 'attitudes': 6, 'comments': 3, 'reposts': 0}
{'id': '4383621236623125', 'text': '说出了我的心声,替阿杜打抱不平,如果勇士没有 5 年顶薪签下我杜,我勇士一生黑!!!', 'attitudes': 2, 'comments': 0, 'reposts': 1}
{'id': '4383620976133278', 'text': '从杜兰特事件,我看到了金州勇士这个队伍从管理层到教练到球员,最卑劣,最下流的一面。还记得g3克雷汤普森因伤缺战时科尔的说法吗?“如果我让克莱带伤出战,他因此受伤,我会后悔一辈子”,两场比赛之后勇士面临1比3绝境时,科尔的话变成了“希望杜兰特能够出战g5g6”。勇士更衣室爆出部分球员不相信 ...全文', 'attitudes': 3, 'comments': 11, 'reposts': 2}
{'id': '4383620565337891', 'text': '从杜兰特事件我们看到了什么? - 回答作者: 天空之城 网页链接 (想看更多?下载 @知乎 App:知乎 )', 'attitudes': 0, 'comments': 1, 'reposts': 0}
{'id': '4383477744654152', 'text': '你们都说我是炫妻狂魔,可是我不得不成为炫妻狂魔!', 'attitudes': 14, 'comments': 8, 'reposts': 1}
{'id': '4383475954350153', 'text': '哈哈哈哈哈哈看看谁的嘴大! 崔庆才丨静觅的秒拍视频', 'attitudes': 8, 'comments': 1, 'reposts': 0}
{'id': '4382124452668633', 'text': '从 KD 进入联盟就一直支持和关注 KD,转眼十多年了... 我这人,没什么偶像,没有特别喜欢的明星,除了 KD。加油啊,会好起来的,God Bless You!', 'attitudes': 5, 'comments': 0, 'reposts': 0}
{'id': '4382118929479375', 'text': '好的转发微博 //@长泽牙妹:我不明面上骂她了 但我想骂她的时候就转发这条微博', 'attitudes': 1, 'comments': 2, 'reposts': 0}
{'id': '4381935092628668', 'text': '我杜啊啊啊啊啊啊啊...\n以后再也不要强行复出了...\n总冠军我们不要了...\n#杜兰特再次受伤#', 'attitudes': 4, 'comments': 8, 'reposts': 1}
{'id': '4381278226748890', 'text': '拉倒吧,我杜伤一阵,就这么飘了?', 'attitudes': 2, 'comments': 1, 'reposts': 0}
{'id': '4381270190531046', 'text': '我又和老婆包粽子啦,大家看看哪两个是我包的呢?', 'attitudes': 6, 'comments': 6, 'reposts': 0}
{'id': '4381260488738253', 'text': '对了看了一圈发现我没有发粽子的微博,就转老婆的了 自己动手,风衣祖师!', 'attitudes': 2, 'comments': 2, 'reposts': 0}
{'id': '4381257968197754', 'text': '#粽子节快乐# 老婆做的香河肉饼,还有这次我拌的黄瓜猪肝。', 'attitudes': 4, 'comments': 5, 'reposts': 0}
{'id': '4381040640403676', 'text': '我发表了头条文章:《崔庆才的恋爱日记》 崔庆才的恋爱日记', 'attitudes': 29, 'comments': 35, 'reposts': 2}
{'id': '4381004007345582', 'text': '#高考结束# 距离我高考结束已经七年了...', 'attitudes': 3, 'comments': 5, 'reposts': 0}
{'id': '4380922164117755', 'text': '说每人都要准备一道菜,好的。\n图一:我老婆炖的鸡公煲\n图二:彬哥炒的地三鲜\n图三:我洗的杨梅\n没毛病', 'attitudes': 4, 'comments': 5, 'reposts': 0}
{'id': '4380541400682924', 'text': '//@鱼小球__:看最后一张,小姐姐像从漫画里走出来的美人儿', 'attitudes': 9, 'comments': 0, 'reposts': 0}
{'id': '4380477760705954', 'text': '祝大家端午节 天天笑哈哈!', 'attitudes': 24, 'comments': 11, 'reposts': 1}
{'id': '4380132846626604', 'text': '今天拼车上班,下了大暴雨。\n车里还有一位乘客疯狂打电话怒吼,后来听了听发现是产品经理吼程序员。 北京', 'attitudes': 8, 'comments': 4, 'reposts': 0}
{'id': '4379585107964870', 'text': 'Python 面向对象编程最佳实践。这可能是 Python 面向对象编程的最佳实践', 'attitudes': 23, 'comments': 0, 'reposts': 16}
{'id': '4379370120478270', 'text': '', 'attitudes': 3, 'comments': 1, 'reposts': 1}
{'id': '4379249320339142', 'text': '真的觉得,有一个好的领导太重要了,真的特别感谢领导的理解和关心!\n小时候妈妈跟我说过,人生有三幸,上学的时候有个好的老师,工作后有个好的上司,结婚后有个好的老婆。\n现在想想,真的感觉自己还是很幸运的。\n好好工作,好好生活,感恩! 北京', 'attitudes': 27, 'comments': 7, 'reposts': 2}
{'id': '4379151726915929', 'text': '谢天谢地,终于没事了!', 'attitudes': 3, 'comments': 5, 'reposts': 0}
{'id': '4378815520610316', 'text': '历经四个精致布景,两天两夜不眠不休的吐血剪辑之后,2019 年年度科幻悬疑励志爱情剧本——《小摸仙的故事》正式点映! 崔庆才丨静觅的微博视频', 'attitudes': 18, 'comments': 9, 'reposts': 1}
{'id': '4378432202842663', 'text': '本来以为我做的排骨已经很好吃了,但吃到我老婆做的排骨,我跪了。\n真是历史新高的好吃啊!现在还在回味。', 'attitudes': 20, 'comments': 1, 'reposts': 0}
{'id': '4378328138109315', 'text': '这鞋这么容易撞的吗?\n不过我的是假的。 北京·奥体中心', 'attitudes': 4, 'comments': 4, 'reposts': 0}
{'id': '4378323360520805', 'text': '马上我就可以吃到啦!一会上图!', 'attitudes': 4, 'comments': 6, 'reposts': 0}
{'id': '4378142934049938', 'text': '我老婆真牛逼啊!//@长泽牙妹:我说错了 机票一张涨了两千五,我俩加起来省了五千什么叫旺夫命!!!', 'attitudes': 9, 'comments': 1, 'reposts': 0}
{'id': '4378058956179867', 'text': '今天和产品经理们讨论产品的时候,产品经理说了一句:这个我们这样做的话相比市面上的产品就优势不大了。\n其实我想说的是,首先我们的确是有自己的优势点的,而且是技术上的独有优势。做一个产品,先不要想我们做出来优势大不大,要先做到和别人产品一样的水平,然后再在这个基础上进一步拔高,这才更 ...全文', 'attitudes': 19, 'comments': 8, 'reposts': 2}
{'id': '4376175218272062', 'text': '???? //@慵懒的小猫咪笨笨:马', 'attitudes': 7, 'comments': 4, 'reposts': 7}
{'id': '4376174899610230', 'text': '恭喜,不过我勇可不好打哦', 'attitudes': 4, 'comments': 1, 'reposts': 0}
{'id': '4375232657609918', 'text': '我错了', 'attitudes': 3, 'comments': 1, 'reposts': 0}
{'id': '4374986288192060', 'text': '遇到紧急情况,在公司和同事一起调 bug 直到现在,领导开车送我回的家。凌晨两点时候真的特别困,又因为卡 bug 而特别无助,当时想问自己,我这是在干什么?我这么做有什么意义呢?\n后来,bug 终于解完了,坐车的时候我换位思考了下。领导现在大我七岁,现在有车有房有爱的人,每天做的工作又可以体现 ...全文', 'attitudes': 55, 'comments': 8, 'reposts': 4}
{'id': '4374440756584533', 'text': '啊啊啊啊啊,我老婆做的肉饼太好吃了,找回了童年马师傅火烧的感觉!!!', 'attitudes': 13, 'comments': 0, 'reposts': 0}
{'id': '4373621868522947', 'text': '今天我给老婆做饭啦,西红柿鸡蛋面!\n不过不怎么好吃,我会继续努力的。', 'attitudes': 11, 'comments': 4, 'reposts': 0}
{'id': '4373405467836997', 'text': '30多号一共排号十几分钟就好啦,好吃!!! 北京·奥林匹克森林公园', 'attitudes': 4, 'comments': 2, 'reposts': 0}
{'id': '4373397515520061', 'text': '今天晚上和老婆出来吃海底捞,来到了国奥村店,但是看到门店并不是特别亮,咋黑灯瞎火的呢?听说是新开的一个店。\n当时我俩就觉得这个是不是假的店呀,还在看看这个招牌 LOGO,对的呀没错啊。\n然后正当我们将信将疑的时候,我们走到门口瞬间就过来了一个人,热情的迎接我们,这时候我们坚信,这肯定是 ...全文', 'attitudes': 4, 'comments': 3, 'reposts': 0}
{'id': '4373290815877368', 'text': '波神要去杭州阿里了,好好干,未来成为千万富翁别忘了我。\nP.S. 图左优质单身程序员一枚,精通 PHP、JavaScript、Python、Go、Java,有意向的妹子或老板欢迎勾搭。', 'attitudes': 21, 'comments': 7, 'reposts': 0}
{'id': '4373263750155703', 'text': '', 'attitudes': 1, 'comments': 0, 'reposts': 0}
{'id': '4372855053384821', 'text': '我老婆拿着一个袋子,袋子里只放着一把 ????。\n老婆:你拿拿,重重。\n我接过来,惊了。\n我:重...重吗?\n老婆:嗯?不重吗?\n我:重重重重重。\n老婆:嗯?重吗?\n我:不重不重不重不重。\n老婆:嗯?不重吗?\n我:啊? 还行吧。\n你说应该说重呢还 ...全文', 'attitudes': 6, 'comments': 8, 'reposts': 1}
{'id': '4372581945499645', 'text': '错误不可怕,可怕的是认识不到,更可怕的是认识到了还各种理由。\n加油继续修炼,我要变得更好啊,不论是在工作还是生活。', 'attitudes': 16, 'comments': 1, 'reposts': 0}
{'id': '4372342060773272', 'text': '接触人多了发现,人和人的差别还是很大的,靠谱和不靠谱,一些小事能分得清清楚楚。\n现在我在擦屁股。\n不整好觉得整个人都不舒服。', 'attitudes': 12, 'comments': 1, 'reposts': 0}
{'id': '4371612687761747', 'text': '下班了,其实我累的时候我会思考,我在做的事情意义有多大,我的方向对不对,有什么需要调整的地方。\n其实工作,照理来说,单论快速完成的话,我可以快速完成,自己没有什么压力。\n但是自己总感觉这样不可取的,可能我这个人太强迫症了,我现在把工作的项目当成自己创业的项目来做,我想把每个项目每个 ...全文', 'attitudes': 43, 'comments': 7, 'reposts': 0}
{'id': '4371606497040790', 'text': '今天可谓是效率极低了...', 'attitudes': 3, 'comments': 1, 'reposts': 0}
{'id': '4371487580446391', 'text': '正式入职两个月了,第三次参加封闭开发,加油! 北京·微软亚太研发集团总部', 'attitudes': 27, 'comments': 6, 'reposts': 0}
{'id': '4369791164515208', 'text': '我为啥没有', 'attitudes': 1, 'comments': 1, 'reposts': 0}
{'id': '4369472914078310', 'text': '搞了半天服务器一直访问不了,最后发现是域名解析的地址解析错了。', 'attitudes': 7, 'comments': 2, 'reposts': 0}

进程已结束,退出代码 0

 

相关标签: 爬虫