知乎子话题爬虫

1.从知乎话题入手,避免登录

从话题入手,避免知乎登录,比如我们需要的是“心理学”话题数据,只要输入网址
https://www.zhihu.com/topic/19551432/top-answers,就能进入,阅读话题,而不需要登录知乎。

2.话题界面研究

进入话题,看到下图所示界面。我们需要爬取的是,“心理学”话题的所有多层子话题、所有精华内容的题目、详细内容、以及所有标签
心理学话题界面
注意,页面只展示了部分子话题,需要全部,还需登录。
在这里插入图片描述
在Chrome浏览器中,在想了解的页面或段落上右键,点击“检查”,使用开发者工具,可以了解页面结构。
在这里插入图片描述
我们首先想要爬取展示的所有子话题,所以,要了解子话题的网页地址在哪,以及名称在哪。这里选中元素——点击右键——copy——Xpath,可以直接使用xpath来找到页面元素,准则为“先抓大,后抓小,寻找循环点”。
在这里插入图片描述
也可以自己构造xpath语句。
通过分析可知,所有的a(子话题)都在
在这里插入图片描述在这里插入图片描述
网址都在herf中,名称都在div中
在这里插入图片描述

3.正式爬虫获取子话题

def topic_select(url):
    topics=DataFrame(list(topic.find()))['key']   #mongodb数据库的存储内容,可以不使用
    driver = webdriver.PhantomJS()
    driver.get(url)    #url就是https://www.zhihu.com/topic/19551432/top-answers
    #//*[@id="root"]/div/main/div/div[2]/div/div/div/div[2]/div
    #//*[@id="root"]/div/main/div/div[2]/div/div/div/div[2]/div/div[2]/div[2]/a[1]
    infos = driver.find_elements_by_xpath('//*[@class="Card-section"]/div[2]/div[2]/a')
    for info in infos:
        url_c=info.get_attribute('href')   #子话题网址
        key=info.find_element_by_xpath('div/div/div/span').text    #子话题名称
        #topic.update({'key':key},{'$set':{"url":url}})
        if key not in str(topics):    #防止重复
            topic.insert_one({'key':key,'url':url})
            try:    
                topic_select(url_c)   #循环,获取所有层次的子话题
            except:
                pass
    driver.quit()

未完待续

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值