开启左侧

抓取单博主的一切微博及其评论

[复制链接]
在线会员 Mement^范儿 发表于 2023-1-20 18:59:08 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
那是个简朴又庞大的爬虫。抓与逻辑很简朴,但是任务实现会略微烦琐。但是只要思路分明,仍是很简朴的。


工具-路易威登微专
  1. 网址:http://m.weibo.cn/u/1836003984
  2. 白色部门是微专账号的id
复造代码
抓与单专主的统统微专及其批评-1.jpg

爬与思路

一、咱们先写一个微专的统统批评,瞅网址纪律是甚么模样,有无一点儿奇特的参数,那些参数要到那里获得?
二、顺次类拉,发明爬统统微专批评的微专批评的纪律,瞅瞅有无奇特的参数,那些参数要到那里才气获得?

道的长处云里雾里的,那里附上三个url模板。
  1. https://m.weibo.cn/api/co妹妹ents/show?id={id}&page={page}
  2. https://m.weibo.cn/api/container/getIndex?containerid={oid}&type=uid&value={uid}&page={page}
  3. https://m.weibo.cn/api/container/getIndex?type=uid&value={usr_id}
复造代码
第一个url模板代表的是某条微专的id,翻开那个url会前去该微专某页的批评。
第两个url模板代表的是微专用户所收微专的列表,翻开该url,前去的是某页的微专列表。
第三个url模板代表的实际上是微专用户主页。
会见第一个url需要id,但是要会见了第两个url才气得到id
会见第两个url需要oid、uid,可是oid、uid需要会见了第三个url才气得到。

思路很简朴,这咱们便此睁开。

1、微专批评

抓包是一种好德,翻瞅路易威登一个微专批评,翻开开辟者东西,截至抓包准备。


抓与单专主的统统微专及其批评-2.jpg

抓与单专主的统统微专及其批评-3.jpg
佳了,抓包阐发,找到咱们屏幕中瞅到的数据了。那末圆框中圈中的网址即是批评数据对于应的网址。
  1. http://m.weibo.cn/api/co妹妹ents/show?id=4103033291539613&page=4
复造代码
网址枢纽参数,微专id战页码

抓与单专主的统统微专及其批评-4.jpg
上面白框中圈中的是第四页批评的数据。

data:第四页的数据

最年夜的圆框,是微专中某条批评的相干数据,如创立时间,批评的id,喜好数(面赞数)、公布微专的网站(是脚机端仍是网页端)、批评文原、收批评的用户相干疑息(用户id、昵称等)

max:最年夜页数
total_num:微专批评数


佳了,间接附上爬与某微专批评那部门的爬虫剧本截图

抓与单专主的统统微专及其批评-5.jpg
  1. def get_co妹妹ents(wb_id):
  2.     Data = []
  3.     url = 'https://m.weibo.cn/api/co妹妹ents/show?id={id}'.format(id=wb_id)
  4.     page_url = 'https://m.weibo.cn/api/co妹妹ents/show?id={id}&page={page}'
  5.     Resp = requests.get(url, headers=headers, cookies=Cookies)
  6.     page_max_num = Resp.json()['max']
  7.     for i in range(1, page_max_num, 1):
  8.         p_url = page_url.format(id=wb_id, page=i)
  9.         resp = requests.get(p_url, cookies=Cookies, headers=headers)
  10.         resp_data = resp.json()
  11.         data = resp_data.get('data')
  12.         for d in data:
  13.             review_id = d['id']
  14.             like_counts = d['like_counts']
  15.             source = d['source']
  16.             username = d['user']['screen_name']
  17.             image = d['user']['profile_image_url']
  18.             verified = d['user']['verified']
  19.             verified_type = d['user']['verified_type']
  20.             profile_url = d['user']['profile_url']
  21.             co妹妹ent = d['text']
  22.         time.sleep(1)
复造代码
咱们念主动爬与路易威登公布的统统微专,必需批质获得微专id,才气下效爬与路易威登统统数据。


以是现在,成就去了,如何批质得到微专id??
2、批质获得微专id

回到主页

抓与单专主的统统微专及其批评-6.jpg
按F12,准备抓包,面打最下圆的“检察他的局部微专”。咱们不断的背下圆转动,相称于背网站恳求了六次,抓包如图。那是尔翻开的第四页的统统微专对于应的网址。

抓与单专主的统统微专及其批评-7.jpg
翻开第四页的网址对于应的数据

抓与单专主的统统微专及其批评-8.jpg
咱们获得了上图,那皆是咱们念要的数据。
page:目前页码
total:微专列表的页里数

cards:目前微专列表对于应的数据(露有多个微专数据)

白色圆框中的蓝色圆框:浩瀚微专id的一个。

现在咱们能够写一个对于获得微专id的爬虫,间接附上代码

抓与单专主的统统微专及其批评-9.jpg
  1. def mblog_list(uid, oid):
  2.     Mblog_list = []
  3.     base_url = 'https://m.weibo.cn/api/container/getIndex?containerid={oid}&type=uid&value={uid}'
  4.     page_url = 'https://m.weibo.cn/api/container/getIndex?containerid={oid}&type=uid&value={uid}&page={page}'
  5.     url = base_url.format(oid=oid, uid=uid)
  6.     resp = requests.get(url, headers=headers, cookies=Cookies)
  7.     resp.encoding = 'gbk'
  8.     response = resp.json()
  9.     total = response['cardlistInfo']['total']
  10.     page_num = int(int(total) / 10) + 1
  11.     for i in range(1, page_num + 1, 1):
  12.         p_url = page_url.format(oid=oid, uid=uid, page=i)
  13.         page_resp = requests.get(p_url, headers=headers, cookies=Cookies)
  14.         page_data = page_resp.json()
  15.         cards = page_data['cards']
  16.         for card in cards:
  17.             mblog = card['mblog']
  18.             created_at = mblog['created_at']
  19.             id = mblog['id']
  20.             text = mblog['text']
  21.             reposts_count = mblog['reposts_count']
  22.             co妹妹ents_count = mblog['co妹妹ents_count']
  23.             attitudes_count = mblog['attitudes_count']
  24.             mblog_data = {'created_at': created_at, 'id': id, 'text': text, 'reposts_count': reposts_count,
  25.                               'co妹妹ents_count': co妹妹ents_count, 'attitudes_count': attitudes_count}
  26.             Mblog_list.append(mblog_data)
  27.             print(' ' * 10, mblog_data)
  28.         time.sleep(1)
  29.     return Mblog_list
复造代码
现在成就去了,uid,oid如何获得呢?


3、获得uid、oid

从头回到主页

抓与单专主的统统微专及其批评-10.jpg
革新,呈现那个网址
  1. http://m.weibo.cn/api/container/getIndex?type=uid&value=1836003984&containerid=1005051836003984
复造代码
抓与单专主的统统微专及其批评-11.jpg
面打Preview,睁开每一个名目,查找uid、fid、oid

抓与单专主的统统微专及其批评-12.jpg

抓与单专主的统统微专及其批评-13.jpg
佳了,现在uid、oid有了,咱们特地写获得那二个参数的小剧本,代码间接上

抓与单专主的统统微专及其批评-14.jpg
  1. def usr_info(usr_id):
  2.     url = 'https://m.weibo.cn/api/container/getIndex?type=uid&value={usr_id}'.format(usr_id=usr_id)
  3.     resp = requests.get(url, headers=headers, cookies=Cookies)
  4.     jsondata = resp.json()
  5.     uid = jsondata.get('userInfo').get('toolbar_menus')[0].get('params').get('uid')
  6.     fid = jsondata.get('userInfo').get('toolbar_menus')[1].get('actionlog').get('fid')
  7.     oid = jsondata.get('userInfo').get('toolbar_menus')[2].get('params').get('menu_list')[0].get('actionlog').get('oid')
  8.     cardid = jsondata.get('userInfo').get('toolbar_menus')[1].get('actionlog').get('cardid')
  9.     containerid = jsondata.get('tabsInfo').get('tabs')[0].get('containerid')
  10.     Info = {'uid': uid, 'fid': fid,
  11.             'cardid': cardid, 'containerid': containerid, 'oid': oid}
  12.     print(Info)
  13.     return Info
复造代码
获得残破代码,请存眷
公家号:年夜邓戴您玩Python



更多实质
文天职析
python竟然有情感??果然吗??  
文天职析之收集干系
华文分词汇-jieba库常识年夜齐天然语言处置库之snowNLP用gensim库干文底细似性阐发鉴于同现发明人物干系的python完毕
用python计较二文档类似度数据阐发
酷炫的matplotlib文天职析之收集干系  
pandas库读与csv文献用词汇云图解读“于悲案”奇异的python
初识Python的GUI编程Python完毕笔墨转语音功用怜喷鼻惜玉,尔用python辅佐办公室文秘
顺天的质化生意阐发库-tushare     
启扒皮自己微疑的秘密
8止代码完毕微疑谈天机械人
使用Python登录QQ邮箱收收QQ邮件爬虫
爬虫真战望频博辑【望频】脚把脚学您抓美男~
当爬虫遭受考证码,如何办【望频】于悲案之网平易近的定见(1)?【望频】有了selenium,小利剑也能够自豪的道:“来TMD的抓包、cookie”
【望频】快去get新妙技--抓包+cookie,爬微专再也不是梦
【望频学程】用python批质抓与简书籍用户疑息
爬豆瓣影戏名的小案例(附望频操纵)
爬豆瓣影戏名的小案例2(附望频操纵)用Python抓与baidu舆图里的店名,地点战联系方法

精彩评论9

avatar
在线会员 u6ji33 发表于 2023-1-20 18:59:56 | 显示全部楼层
想请教一下题主:通常什么时候可以直接从Elements里面抓tag,什么时候要抓包然后用request做解析?
回复

使用道具 举报

avatar
在线会员 Z2A 发表于 2023-1-20 19:00:34 | 显示全部楼层
先看请求返回的是什么格式数据,如果是html 就用beautifulsoup ,如果是json 就用json 和字典
回复

使用道具 举报

avatar
在线会员 qJcMs5 发表于 2023-1-20 19:00:43 | 显示全部楼层
total不是微博页面数,而是总微博数量,total除以10然后向上取整才是微博页面数。
回复

使用道具 举报

avatar
在线会员 e6fNY0ENR 发表于 2023-1-20 19:01:10 | 显示全部楼层
然后账号被封了。。。
回复

使用道具 举报

avatar
在线会员 u6ji33 发表于 2023-1-20 19:01:50 | 显示全部楼层
请教题主:第一个url最多返回100页数据,有其他办法获取一条微博的所有评论吗
回复

使用道具 举报

avatar
在线会员 K4xCnwUt 发表于 2023-1-20 19:02:25 | 显示全部楼层
请问你解决这个问题了吗
回复

使用道具 举报

avatar
在线会员 7s4v 发表于 2023-1-20 19:03:16 | 显示全部楼层
请问你解决这个问题了吗?
回复

使用道具 举报

avatar
在线会员 2I7hqC 发表于 2023-1-20 19:03:22 | 显示全部楼层
不登入就好了
回复

使用道具 举报

avatar
在线会员 S2viR 发表于 2023-1-20 19:04:14 | 显示全部楼层
woc关注了怎么拿源码也不说
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 qq_login

本版积分规则

发布主题
阅读排行更多+
用专业创造成效
400-778-7781
周一至周五 9:00-18:00
意见反馈:server@mailiao.group
紧急联系:181-67184787
ftqrcode

扫一扫关注我们

Powered by 职贝云数A新零售门户 X3.5© 2004-2025 职贝云数 Inc.( 蜀ICP备2024104722号 )