开启左侧

用户、话题、评论一扫而空,分享一个最强微博爬虫

[复制链接]
在线会员 LqvJp 发表于 2023-2-2 09:55:46 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
完毕的功用

微专历来是一个极佳的吃瓜圣天,为了获得微专上行止色色的数据,微专相干的爬虫也是屡见不鲜,因为不管是经营者仍是数据阐发从业者皆或者多或者少需要微专数据,尔的很多朋友也没有破例,颠末断持续绝的勤奋,尔完毕了一个可以是史上最强大的微专爬虫的编辑。
该爬虫的功用主要分为三部门,第一个主挨功用是爬与指定用户的统统微专(能够颠末冷键 Ctrl + P快速 翻开),那个用户能够根据昵称搜刮,能够挑选可否只抓与本创微专,以下图
用户、话题、批评一网打尽,分享一个最强微专爬虫-1.gif


爬与的微专实质保留正在 csv 文献中,表头包罗微专id、微专正文、图片url、公布职位、公布时间、公布东西战面赞数、批评数、转收数,此中图片url里面是统统微专图片的url以英文逗号距离拼交起去的。
用户、话题、批评一网打尽,分享一个最强微专爬虫-2.jpg


第两个主挨功用是爬与指定话题下的统统微专,以下图
用户、话题、批评一网打尽,分享一个最强微专爬虫-3.gif


微专保留的 csv 格局大抵战爬与用户微专格局类似。
第三个主挨功用即是爬与按照微专id爬与该微专下的统统批评概略,好比微专 id 为 IaYZIu0Ko 的统统批评为:
用户、话题、批评一网打尽,分享一个最强微专爬虫-4.jpg


除爬虫的营业逻辑,各人也能够鄙人里瞅到,有比较友好的操纵界里,便利各人操纵。
手艺门路

代码总计 1000 余止,没有关心手艺的同学能够间接跳到文终获得法式链交。
爬虫部门主要是 颠末 Chrome剖析 微专页里上的交心,获得交心参数,使用 requests 库模仿恳求,需要戴上 cookies ,尔那个爬虫的年夜头实际上是剖析部门,尔主要用了 lxml 库,需要剖析的工具十分多,好未几 csv 中的每个字段皆需要零丁的代码块去剖析。
爬虫完毕的三个功用:按用户爬与、按话题爬与、爬与微专统统批评,尔别离用了三个类去完毕,WeiboUserScrapy、WeiboTopicScrapy、WeiboCo妹妹entScrapy,三个类皆有一点儿能够复用的函数,可是为了削减类之间的耦开,和便利挨包,尔不复用,如许零丁一个类拿进去也能跑,削减了依靠。
再主要是界里模块的编辑,尔以前不竭用 wxPython 编辑界里,厥后深入进修了 pyqt5 那个库,以是那个爬虫的界里是用 pyqt5 去写的,那里主要用到了 ListView model-view模子、自界说旌旗灯号及槽函数战一点儿罕见组件的使用。
爬虫比力耗时,而界里又没有许可壅闭,以是必需接纳多线程手艺,使用自界说旌旗灯号动作爬行动物战界里类之间相同的桥梁,好比爬虫开端、完毕城市背界里类收回响应的旌旗灯号完毕界里的革新。
今朝有个没有完美之处即是,背景任务除退度框战挨印,不其余可望化检察的办法,并且各任务之间的调理不过简朴的先到先效劳,后绝尔会自界说调理器类,完毕各类停息、规复、劣先级处置等各类智能调理和初级的可望化界里。
中心代码解说

以 WeiboCo妹妹entScrapy 类为例,起首颠末邪则表示式获得批评总额,
  1. res = requests.get('https://weibo.cn/co妹妹ent/{}'.format(self.wid),headers=self.headers,verify=False)
  2. co妹妹entNum = re.findall("批评\[.*?\]",res.text)[0]
  3. co妹妹entNum = int(co妹妹entNum[3:len(co妹妹entNum)-1])
复造代码
而后按照批评总额分页
  1. pageNum = ceil(co妹妹entNum/10)
复造代码
交着二层轮回,中层遍历页数,内乱层遍历每页的批评,最初对于每个批评干剖析
  1. for page in range(pageNum):
  2.        
  3.         result = []
  4.     res = requests.get('https://weibo.cn/co妹妹ent/{}?page={}'.format(self.wid,page+1), headers=self.headers,verify=False)
  5.     html = etree.HTML(res.text.encode('utf-8'))
  6.     co妹妹ents = html.xpath("/html/body/div[starts-with(@id,'C')]")
  7.     print('第{}/{}页'.format(page+1,pageNum))
  8.     for i in range(len(co妹妹ents)):
  9.                 result.append(self.get_one_co妹妹ent_struct(co妹妹ents[i]))
  10.     if page==0:
  11.                 self.write_to_csv(result,isHeader=True)
  12.     else:
  13.                 self.write_to_csv(result,isHeader=False)
  14.         # 戚眠 1-5 秒,避免被启
  15.     sleep(randint(1,5))
复造代码
留神瞅内乱层轮回,瞅下来每页皆是 10 条批评,真则否则,好比第一页有热门批评,会超越 10 条,最初一页可以不 10 条,以是内乱层轮回不用 for i in range(10): 而是 for i in range(len(co妹妹ents)):。内乱层轮回借挪用了一个函数 get_one_co妹妹ent_struct(),其感化是按照 xpath失掉 的每条 co妹妹ent 元艳剖析获得咱们念要的数据,此中又递回挪用了多少个自界说剖析函数,好比剖析获得的时间是诸如“xxx分钟前"、“方才”,咱们需要退一步干字符串处置获得具体时间戳。
因为原爬虫皆是用 lxml 库接纳 xpath 剖析的,里面尔碰到了许很多多的合用本领,会正在后绝专客干具体睁开。
获得使用

为了便利各人使用,尔已经把法式挨包成 exe ,离开了 Python 情况运行,只要供正在微疑公家号背景复兴 微专爬虫 便可得到,共时因为交心变革,尔会按期升级法式,为避免得联可正在背景复兴 社群,参加微疑粉丝团,便可实时获得法式革新。
微疑公家号:月小火少
用户、话题、批评一网打尽,分享一个最强微专爬虫-5.jpg
您需要登录后才可以回帖 登录 | 立即注册 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号 )