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