资讯专栏INFORMATION COLUMN

用python爬取知识星球

tinylcy / 3386人阅读

摘要:所以就试着用爬取了知识星球的内容。这个过程又学习了一些新的知识,已经在代码中以批注的形式写出。只不过在网页中用到了的转化,这部分是新学习的知识。

去年我们做过一个叫「学长问答」的社群活动,里面沉淀了大量有价值的互动信息,后来因为各种原因终止了。今天和涂腾聊起来,觉得这些信息就这么沉寂了太浪费。所以就试着用python爬取了知识星球的内容。

这个过程又学习了一些新的知识,已经在代码中以批注的形式写出。但还有一个没有解决的问题,就是一个提问底下可以跟好几个评论,我暂时还不能在输出结果里将「一个提问+n个评论」以整体的形式给出,而只能把评论的信息以一个字典的形式展现,这算是没有爬取的太彻底。将来再看看有没有新的解决方法。

import requests
import json
import urllib
import csv


#头信息。网站只提供扫码登陆的方式,没有账号密码。我以为应该比较麻烦,但在header信息里找到了Authorization信息之后,直接可以保持登陆状态了。
# 令一个标志是直接在浏览器里访问内页网址的话,浏览器的报错是“{"succeeded":false,"code":401,"info":"","resp_data":{}}”,这个很像原来node.js的数据中心没有登陆的报错,而数据中心的模拟登陆也是通过在header中添加Authorization来实现的。
headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36",
    "Referer": "https://wx.zsxq.com/dweb/",
    "Authorization": "51EC09CA-6BCC-8847-4419-FA04A2FC9E00"
}

#打开并写入csv文件

f = open("/Users/damo/Desktop/wendatuan.csv", "w+")
writer = csv.writer(f)
writer.writerow(["created_time","ask_name","ask_content","comment"])

#定义爬取信息的函数主体

def get_info(url):

    res = requests.get(url,headers = headers)
    json_data = json.loads(res.text)
    datas = json_data["resp_data"]["topics"]

    for data in datas:
        if "talk" in data.keys(): # 判断json中是否包含 talk 这个键
            ask_name = data["talk"]["owner"]["name"]
            ask_content = data["talk"]["text"]
        else:
            ask_name = ""
            ask_content = ""

        if "show_comments" in data.keys():
            comment = data["show_comments"]

        else:
            comment = ""
        created_time = data["create_time"]
        writer.writerow([created_time,ask_name,ask_content,comment])

    # 截止到前面的代码,已经可以实现一个页面的爬取。下面的代码内容主要任务是实现“如何自动实现多页面爬取”
    # 多页面的爬取是通过Network中Query String Parameters来实现的:这里提供两个参数,观察之后发现count是固定值,而end_time和网址最后的时间是一样的。
    # 只不过在网页中用到了 urlencode的转化,这部分是新学习的知识。
    # 在这个爬虫案例中,网页构造的核心逻辑是“上一组最后一个数据的创建时间刚好是下一组数据访问网址中的一个参数”,以此来构造循环抓取的网址

    end_time = datas[19]["create_time"]
    url_encode = urllib.parse.quote(end_time) # urlencode,将网址中的文本转化
    next_url = "https://api.zsxq.com/v1.10/groups/518282858584/topics?count=20&end_time="+url_encode # 通过观察构造下一组数据的网址
    get_info(next_url) # 这里比较巧,直接在函数内部再次调用函数,从而实现不断的自循环

if __name__ == "__main__":
    url = "https://api.zsxq.com/v1.10/groups/518282858584/topics?count=20"
    get_info(url)


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44965.html

相关文章

  • 学习Python想放弃,因为你没有培养自己的兴趣!

    摘要:为啥你天天刷抖音一点都不烦,因为你觉得视频好看你有兴趣啊。比如我们说你玩是不是要开始搭建一个自己的网站,是不是可以自己写一个小的脚本来自动发消息给你的女朋友等等,通过这样的小例子来慢慢的培养自己的学习的兴趣。学习,切勿贪快贪多。 大家好,我是菜鸟哥! 周末啦,跟大家聊一下我们粉丝团的情况...

    ideaa 评论0 收藏0
  • 面试:Semaphore(信号量)的成长之路

    摘要:最寒冷,面试跳槽不能等马上就月份了,所谓的金三银四招聘季。在中有两种模式,分别是线程池和信号量,说到这里大家明白了吧,信号量的作用。感兴趣的同学可以去了解下,讲了线程,线程池,锁,,等内容。 2019最寒冷,面试跳槽不能等 马上就3月份了,所谓的金三银四招聘季。2019年也许是互联网最冷清的一年,很多知名的大型互联网公司都裁员过冬。当然也有一些公司还在持续招人的,比如阿里就宣称不裁员,...

    Lorry_Lu 评论0 收藏0
  • 【小白+python+selenium库+图片爬取+反爬+资料】超详细新手实现(01)webdriv

    摘要:且本小白也亲身经历了整个从小白到爬虫初入门的过程,因此就斗胆在上开一个栏目,以我的图片爬虫全实现过程为例,以期用更简单清晰详尽的方式来帮助更多小白应对更大多数的爬虫实际问题。 前言: 一个月前,博主在学过python(一年前)、会一点网络(能按F12)的情况下,凭着热血和兴趣,开始了pyth...

    Half 评论0 收藏0
  • 学习python12小时后,告诉你,学python真没你想的那么难!

    摘要:列入全国计算机二级取代,部分城市试点,引入高中。建议通过视频学习,这样不但节省时间,而且效果很好。能否回忆起那个陡峭的学习曲线问题越多,学的越快。出报告每完成一个项目,总结报告,必不可少。结构化学习,才是你我需要真正培养的能力。 编程就如同你学习开车,即使,你可以一口气,说出一辆车的全部零部件,以及内燃机进气、压缩、做功和排气过程,但你就是不去练如何开车,怎么上路。你确定,你敢开吗?你...

    Kaede 评论0 收藏0
  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0

发表评论

0条评论

tinylcy

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<