视频选集

0

    爬一下知识星球

    • 视频介绍
    • 视频选集
    • 交流讨论
      释放双眼,带上耳机,听听看~!
      00:00
      00:00

      只做一下记录,将爬取下来的内容全都写成了markdown文件

      首先登录网页版, wx.zsxq.com

      网上很多文章爬知识星球都是说有个 Authorization 来进行的认证,但不知道是改版了还是怎么,我在写爬虫的时候发现认证依然是 cookie, 其中有一个 zsxq_access_token

      首先是 https://api.zsxq.com/v1.10/groups/xxxx/topics?count=20

      这个xxxx就是知识星球的id,也就是随便点击一个圈子后,url中 https://wx.zsxq.com/dweb/#/index/xxxxxx 这个 xxx 的部分,其他大概没有什么好说的,主要就是api里怎么取下一页的内容,他没有页标的参数,而是使用 end_time 这个参数来进行分页的

      首先访问这个api后会返回一串很大的json

      1202cce5709c9f

      其中 create_time 就是用来进行分页的 end_time 参数的值,并且其中的 : 和 + 必须得url编码

      把topics中的一个主题内容展开来看看其中需要关注的内容有什么

      12f2254df0e2c0

      create_time 当然如果这不是本页最后一条就没啥意义了

      show_comments 该主题对应的评论数据,返回的是一个列表,其中需要取的值就是 owner.name(评论者name,text (评论内容,其中有可能存在一个键值为 repliee,这个是对某人的评论进行了回复,同样其中是有name和text的键值

      talk,主题内容了,取其中的 owner 就是主题作者,text 就是主题内容,但是这里有几个坑点

      首先是text中的标签,目前遇到的有三种,一个是标签,就像这样的

      1fec5ef0cd6022

      一个是很常见的超链接,知识星球返回来的数据中,对标签都做了处理,全都变成了 <e type="xx"> 这种形式

      超链接转换后是 <e type="web" href="xxx" title="xxx">

      标签转换后是 <e type="hashtag" hid="xx" title="xxx">

      最后一个就是 @ 功能

      标签长这样 <e type="mention" uid="xxx" title="@xxx">

      目前遇到的主题中还没有出现其他的标签。

      所以需要对这种的进行一下处理

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      def handle_link(text):
      result = re.findall(r'<e [^>]*>’, text)
      for i in result:
      html = PQ(i)
      if html.attr(‘type’) == ‘web’:
      template = ‘[%s](%s)’ % (urllib.parse.unquote(html.attr(‘title’)), urllib.parse.unquote(html.attr(‘href’)))
      elif html.attr(‘type’) == ‘hashtag’:
      template = ‘ `%s` ‘ % urllib.parse.unquote(html.attr(‘title’))
      elif html.attr(‘type’) == ‘mention’:
      template = urllib.parse.unquote(html.attr(‘title’))
      text = text.strip().replace(i, template)
      return text

      其次就是图片,这个没有什么好说的,就在 talk.images 中,返回的是一个列表,迭代一下取其中 large 类别的链接下载下来就好了

      10eec533522fc9

      最后是文件,返回的也是一个列表,只不过这个需要再请求一次新的api取下载地址

      151d0054fec372

      取到这个 file_id, 然后请求 https://api.zsxq.com/v1.10/files/xxx/download_url,把取到的 file_id 替换掉这个 xxx

      返回结果如下,其中的 download_url 就是文件的下载地址了

      1c0e395edfc9c2

      几个坑

      • 主题内容如果有代码片段,大概率是直接返回没有任何标签的字符串,所以没法进行格式化和高亮的操作,识别不出来
      • 某些主题可能存在没有正文的情况,也就是说talk中可能是没有text这个键的
      • 评论中的表情如果不是emoji,就是 [xx],这个感觉没啥影响,所以就放着了

      最后爬下来的一个效果

      122e14100fee5c
      声明:本站只作网络安全交流之用。严禁发布低俗、违法、涉及政治的内容。如若本站内容侵犯了原著者的合法权益,可联系我们[181-1319-3168]进行及时处理。
      0 条回复 A文章作者 M管理员
      欢迎您,新朋友,感谢参与互动!
        暂无讨论,说说你的看法吧
      个人中心
      购物车
      优惠劵
      今日签到
      私信列表
      搜索