爬虫|爬虫 知乎回答

import requests from lxml import html# 这个东西可以把 html 文本转为 text 文本 from html2text import html2textclass Model(object): def __str__(self): class_name = self.__class__.__name__ properties = (u'{0} = ({1})'.format(k, v) for k, v in self.__dict__.items()) r = u'\n<{0}:\n{1}\n>'.format(class_name, u'\n'.join(properties)) return rclass ZHAnswer(Model): def __init__(self, path='', title='', date='', content='', vote_count=0): super(ZHAnswer, self).__init__() self.url = 'http://www.zhihu.com' + path self.path = path self.title = title self.date = date self.html = str(content) self.content = html2text(self.html) self.vote_count = vote_countdef answer_from_node(node): # 这些内容请参考文件末尾 回答节点的内容 # 注意, 因为这是一个节点, 所以我们用 .// 来查找节点内的数据 link = node.xpath('.//a[@class="answer-date-link meta-item"]') if len(link) > 0: link = link[0] path = link.attrib['href'] date = link.text title = node.xpath('.//a[@class="question_link"]/text()')[0] content = node.xpath('.//textarea[@class="content"]/text()')[0] vote_count = node.xpath('.//div[@class="zm-item-vote"]/a/text()')[0] # 得到所有数据后, 用 ZHAnswer 类来包装一下 a = ZHAnswer(path, title, date, content, vote_count) else: # 这是被和谐的答案,空数据 a = ZHAnswer() return a# url 是你想要爬的网站地址 # 以李开复的回答为例, 这里是第一页 url_likaifu = 'https://www.zhihu.com/people/kaifulee/answers?page=1'# 根据群文件中的「伪装登录爬虫总结」替换 cookie cookie = '' # 伪装是 chrome 浏览器 useragent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36' headers = { 'Cookie': cookie, 'User-Agent': useragent, }# 获取这个网页 r = requests.get(url_likaifu, headers=headers) # 解析成节点类型 root = html.fromstring(r.text)# 得到页面内的回答节点列表 items = root.xpath('//div[@class="zm-item"]') # 对于每个回答, 调用函数 answer_from_node 得到一个格式化后的回答 answers = [answer_from_node(item) for item in items]# 显示第 1 个回答 print(answers[0])# 一个 回答节点 的内容 """AlphaGo 能战胜李世石吗? 8846 ![](https://pic1.zhimg.com/c104d6f24_s.jpg)李开复,创新工场CEO收录于 编辑推荐?8846 人赞同先直接回答这个问题,下面再分析AlphaGo和人工智能的未来。我认为AlphaGo这次的比赛打败李世乭比较悬,但是1-2年之内必然完胜人类。按照两者的Elo(围棋等级分),可以算出去年年底的AlphaGo打败李世乭的概率相当低。如何算出的呢?AlphaGo去年年底的顶级分…显示全部【爬虫|爬虫 知乎回答】编辑于 2016-03-08
关注问题948 条评论感谢分享收藏?没有帮助? 举报?作者保留权利"""

    推荐阅读