爬虫 知乎回答



import requests
from lxml import html

# 这个东西可以把 html 文本转为 text 文本
from html2text import html2text


class 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 r


class 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_count


def 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])



# 一个 回答节点 的内容
"""
<div class="zm-item" id="mi-1457350196">
    <h2><a class="question_link" href="/question/39906815/answer/89652546" data-id="8170090">
AlphaGo 能战胜李世石吗?
</a></h2>
    <div tabindex="-1" class="zm-item-answer " itemscope itemtype="http://schema.org/Answer" data-aid="31296760" data-atoken="89652546" data-collapsed="0" data-created="1457350196" data-deleted="0" data-isowner="0" data-helpful="1" data-copyable="1">
        <link itemprop="url" href="/question/39906815/answer/89652546">
        <meta itemprop="answer-id" content="31296760">
        <meta itemprop="answer-url-token" content="89652546">
        <a class="zg-anchor-hidden" name="answer-31296760"></a>

        <div class="zm-item-vote">
            <a class="zm-item-vote-count js-expand js-vote-count" href="javascript:;" data-bind-votecount>8846</a>
        </div>

        <div class="zm-votebar">
            <button class="up ">
<i class="icon vote-arrow"></i>
<span class="count">8846</span>
<span class="label sr-only">赞同</span>
</button>
            <button class="down ">
<i class="icon vote-arrow"></i>
<span class="label sr-only">反对</span>
</button>
        </div>


        <div class="answer-head">

            <div class="zm-item-answer-author-info">

                <a class="zm-item-link-avatar avatar-link" href="/people/kaifulee" target="_blank" data-tip="p$t$kaifulee">![](https://pic1.zhimg.com/c104d6f24_s.jpg)</a>


                <a class="author-link" data-tip="p$t$kaifulee" target="_blank" href="/people/kaifulee">李开复</a>


                <span title="创新工场CEO" class="bio">,创新工场CEO</span>

            </div>

            <div class="zm-item-vote-info" data-votecount="8846">


                <span class="answer-tag">
<span class="text">收录于 </span>


                <span class="text">编辑推荐</span>



                </span>


                <span class="zg-bull text">•</span><span class="voters text"><a href="#" class="more text"><span class="js-voteCount">8846</span> 人赞同</a>
                </span>


            </div>
        </div>
        <div class="zm-item-rich-text expandable js-collapse-body" data-resourceid="8170090" data-action="/answer/content" data-author-name="李开复" data-entry-url="/question/39906815/answer/89652546">

            <textarea hidden class="content">先直接回答这个问题,下面再分析AlphaGo和人工智能的未来。我认为AlphaGo这次的比赛打败李世乭比较悬,但是1-2年之内必然完胜人类。<br><ol><li><b>按照两者的Elo(围棋等级分),可以算出去年年底的AlphaGo打败李世乭的概率相当低。</b>如何算出的呢?AlphaGo去年年底的顶级分布式版本的Elo是3168(见下面第一张图),而李世乭的Elo大约是3532(全球围棋手Elo: <a href="//link.zhihu.com/?target=http%3A//www.goratings.org/" class=" wrap external" target="_blank" rel="nofollow noreferrer">Go Ratings<i class="icon-external"></i></a> ,见下面第二张图)。<br>![](https://pic1.zhimg.com/f2894ef94ec70c27792ef9ccd3d05520_b.png)![](https://pic3.zhimg.com/bef51010f1adc9909bf7f5e3ef3d6ef6_b.png)<br>按照这两个等级分的两个棋手对弈,李世乭每盘的胜算为89%([站外图片上传中……(4)],公式见:<a href="//link.zhihu.com/?target=https%3A//www.reddit.com/r/chess/comments/2y6ezm/how_to_guide_converting_elo_differences_to/" class=" wrap external" target="_blank" rel="nofollow noreferrer">How to Guide: Converting Elo Differences To Winning Probabilities : chess<i class="icon-external"></i></a>)。如果对弈一盘,AlphaGo尚有11%的获胜的可能性,而整个比赛五盘胜出三盘或更多,AlphaGo就只有1.1%的可能性了。(当然,这是几个月前的AlphaGo,也许今天已经超越了:见下面第三点)。<br></li><li><b>AlphaGo不是打败了欧洲冠军吗?有些</b>人认为AlphaGo去年底击败了欧洲冠军樊麾,所以挑战(前)世界冠军应有希望。但是,樊麾只是职业二段(Elo 3000左右),而李世乭是职业九段(ELO 3532)。这两位的差别是巨大的,完全不能混为一谈。就比如说一个人乒乓球打败了非洲冠军,并不代表他就可以成功挑战中国冠军。<br></li><li><b>AlphaGo有可能在这几个月突飞猛进,进而击败李世乭吗?</b>AlphaGo的负责人说:”外界不知道我们这几个月进步了非常多“。(来自:<a href="//link.zhihu.com/?target=http%3A//www.geekwire.com/2016/alphago-lee-sedol-whos-underdog-in-google-ai-million-go-match/" class=" wrap external" target="_blank" rel="nofollow noreferrer">Odds favor machine over human in big Go showdown<i class="icon-external"></i></a> )。这点确实有可能。AlphaGo进步的方法有两个:(1)增加硬件:我们从Nature的文章可以看到:从1202个CPU到1920个CPU,AlphaGo的ELO只增加了28,而且线性地增加CPU,不会看到线性的ELO成长。若要达到364 ELO积分的提升,需要的CPU将达到天文数字(有篇文章估计至少要10万个CPU:<a href="//link.zhihu.com/?target=http%3A//www.milesbrundage.com/blog-posts/alphago-and-ai-progress" class=" wrap external" target="_blank" rel="nofollow noreferrer">AlphaGo and AI Progress<i class="icon-external"></i></a>)。当然,谷歌有钱有机器,但是纯粹加机器将会碰到并行计算互相协调的瓶颈(就是说假设有十万万台机器,它们的总计算能力很强,但是彼此的协调将成为瓶颈)。在几个月之内增加两个数量级的CPU并调节算法,降低瓶颈,应该不容易。(2)增加学习功能:AlphaGo有两种学习功能,第一种是根据高手棋谱的学习,第二种是自我对弈,自我学习。前者已经使用了16万次高手比赛,而后者也在巨大机组上训练了8天。这方面肯定会有进步,但是要超越世界冠军可能不容易。最后,换一种分析方式:如果从过去深蓝击败世界冠军的“成长过程”来看,深蓝大约1993年达到职业大师水平,4年后才在一场六盘的比赛中击败世界冠军(大约500Elo积分点的提升)。今天的AlphaGo应该和1993年的深蓝相似,刚进入职业大师水平。若要击败世界冠军,虽然未必需要4年的时间,但是几个月似乎不够。</li><li><b>还有什么以上未考虑的因素,导致AlphaGo获胜吗?</b>如果谷歌刻意未出全力和樊麾对抗,或者有其它学习或并行计算方面超越了Nature里面的描述,那AlphaGo完全有可能获胜。</li></ol>既然写了这么多,就对这个题目再发表一些看法:<br><ol><li><b>AlphaGo 是什么?</b>在今年一月的Nature (<a href="//link.zhihu.com/?target=http%3A//www.nature.com/nature/journal/v529/n7587/full/nature16961.html" class=" external" target="_blank" rel="nofollow noreferrer"><span class="invisible">http://www.</span><span class="visible">nature.com/nature/journ</span><span class="invisible">al/v529/n7587/full/nature16961.html</span><span class="ellipsis"></span><i class="icon-external"></i></a> )有AlphaGo的详细介绍,AlphaGo是一套为了围棋优化的设计周密的深度学习引擎,使用了神经网路加上MCTS (Monte Carlo tree search),并且用上了巨大的谷歌云计算资源,结合CPU+GPU,加上从高手棋谱和自我学习的功能。这套系统比以前的围棋系统提高了接近1000分的Elo,从业余5段提升到可以击败职业2段的水平,超越了前人对围棋领域的预测,更达到了人工智能领域的重大里程碑。</li><li><b>AlphaGo 是科学的创新突破吗?</b>AlphaGo是一套设计精密的卓越工程,也达到了历史性的业界里程碑,不过Nature文章中并没有新的“发明”,AlphaGo的特点在于:不同机器学习技术的整合(例如:reinforcement learning, deep neural network, policy+value network, MCTS的整合可谓创新)、棋谱学习和自我学习的整合、相对非常可扩张的architecture(让其充分利用谷歌的计算资源)、CPU+GPU并行发挥优势的整合。这套“工程”不但有世界顶级的机器学习技术,也有非常高效的代码,并且充分发挥了谷歌世界最宏伟的计算资源(不仅仅是比赛使用,训练AlphaGo时也同样关键)。<br>AlphaGo的跳跃式成长来自几个因素:1)15-20名世界顶级的计算机科学家和机器学习专家(这是围棋领域从未有的豪华团队:也许你觉得这不算什么,但是要考虑到这类专家的稀缺性),2)前面一点提到的技术、创新、整合和优化。3)全世界最浩大的谷歌后台计算平台,供给团队使用,4)整合CPU+GPU的计算能力。</li><li><b>AlphaGo是个通用的大脑,可以用在任何领域吗?</b>AlphaGo里面的深度学习、神经网络、MCTS,和AlphaGo的扩张能力计算能力都是通用的技术。AlphaGo的成功也验证了这些技术的可扩展性。但是,AlphaGo其实做了相当多的围棋领域的优化;除了上述的系统调整整合之外,里面甚至还有人工设定和调节的一些参数。AlphaGo的团队在Nature上也说:AlphaGo不是完全自我对弈end-to-end的学习(如之前同一个团队做Atari AI,用end-to-end,没有任何人工干预学习打电动游戏)。如果AlphaGo今天要进入一个新的应用领域,用AlphaGo的底层技术和AlphaGo的团队,应该可以更快更有效地开发出解决方案。这也就是AlphaGo真正优于深蓝的地方。但是上述的开发也要相当的时间,并且要世界上非常稀缺的深度计算科学家(现在年待遇行情已达250万美金)。所以,AlphaGo还不能算是一个通用技术平台,不是一个工程师可以经过调动API可以使用的,而且还距离比较远。</li><li><b>如果这次AlphaGo没有打败</b><b>李世乭,那还要多久呢?</b>IBM深蓝从进入大师级别到比赛击败世界冠军花了四年。AlphaGo应该会比深蓝更快提升自己,因为深蓝需要新版本的硬件,和针对Kasparov的人工调节优化,而AlphaGo是基于谷歌的硬件计算平台,和相对通用的深度学习算法。所以,几个月太短,4年太长,就预计1-2年之间吧。<br></li><li><b>从国际象棋到围棋,到底是不是巨大的突破呢?</b>肯定是的,在这篇文章里面(<a href="https://www.zhihu.com/question/21714457" class="internal">在国际象棋领域,电脑已经可以战胜人脑,那么围棋领域电脑还差多远? - 计算机</a> ),第一位回答者分析了围棋的复杂度为[站外图片上传中……(5)] 而国际象棋则只有[站外图片上传中……(6)] 。在1997年深蓝击败世界冠军时,大家都认为:深蓝使用的是人工调整的评估函数,而且是用特殊设计的硬件和”暴力“的搜索 (brute-force) 地征服了国际象棋级别的复杂度,但是围棋是不能靠穷举的,因为它的搜索太广(每步的选择有几百而非几十)也太深(一盘棋有几百步而非几十步)。而AlphaGo的发展让我们看到了,过去二十年的发展,机器学习+并行计算+海量数据是可以克服这些数字上的挑战的,至少足以超越最顶尖的人类。</li><li><b>AlphaGo 若打败了世界冠军,就意味着计算机超越人脑?或者可以思考了吗?我的回答:</b></li></ol><ul><li>在可以凭逻辑分析推算的问题上,机器即将远远把人类抛在后面。机器速度会越来越快,学习能力会越来越强,数据会越来越多。当年,大家讨论“国际象棋输给机器不算什么,围棋才是真正的智慧”只是我们人类维护自己尊严但是不实际的幻想!今天,我们该面对现实了!</li><li>在大数据+机器学习+大规模并行计算的时代,我们将看到无数的商机和产品,能够在预测、分析、推荐等方面,产生巨大的商业和用户价值。不过,这些解决方案和人类相比,其实没有什么意义,因为人差太远了(比如说:推荐引擎将能推荐你最可能会买的产品、想吃的菜,想认识的人;自动交易能得到更高的投资回报和风险比例。。。)。</li><li>在感知方面,人类也将会被机器超越。今天的语音识别,人脸识别,未来的自动驾驶,都是例子。</li><li>但是,以上都还是冷冰冰的技术,机器打败了世界冠军也没有感到高兴(甚至说不出为什么)。对于那些科幻片的粉丝们:机器人是否会人性化?这还是未知的。毕竟,在情感、喜怒哀乐、七情六欲、人文艺术、美和爱、价值观等方面,机器离人还差的很远,甚至连基础都没有。对人工智能的研究者,这是下一个挑战。对我们人类,在下个突破之前,我们还是多发展右脑吧!</li></ul>P.S. - 也许有人好奇,为什么这个话题我说了这么多,因为在1986年,我在读书时,曾经开发了一套黑白棋系统(复杂度[站外图片上传中……(7)]),击败了黑白棋的世界团体冠军,而当年的那套系统也有(非常粗浅的)自我学习的能力。有兴趣的网友可以在这里看到我当年的文章:<a href="//link.zhihu.com/?target=http%3A//www.sciencedirect.com/science/article/pii/0004370288900768" class=" wrap external" target="_blank" rel="nofollow noreferrer">A pattern classification approach to evaluation function learning<i class="icon-external"></i></a> ) 。</textarea>


            <div class="zh-summary summary clearfix">

                先直接回答这个问题,下面再分析AlphaGo和人工智能的未来。我认为AlphaGo这次的比赛打败李世乭比较悬,但是1-2年之内必然完胜人类。<b>按照两者的Elo(围棋等级分),可以算出去年年底的AlphaGo打败李世乭的概率相当低。</b>如何算出的呢?AlphaGo去年年底的顶级分…

                <a href="/question/39906815/answer/89652546" class="toggle-expand">显示全部</a>

            </div>



            <p class="visible-expanded"><a itemprop="url" class="answer-date-link meta-item" data-tip="s$t$发布于 2016-03-07" target="_blank" href="/question/39906815/answer/89652546">编辑于 2016-03-08</a></p>

        </div>
        <div class="zm-item-meta answer-actions clearfix js-contentActions">
            <div class="zm-meta-panel">

                <a data-follow="q:link" class="follow-link zg-follow meta-item" href="javascript:;" id="sfb-8170090"><i class="z-icon-follow"></i>关注问题</a>

                <a href="#" name="addcomment" class="meta-item toggle-comment js-toggleCommentBox">
                    <i class="z-icon-comment"></i>948 条评论</a>


                <a href="#" class="meta-item zu-autohide js-thank" data-thanked="false"><i class="z-icon-thank"></i>感谢</a>



                <a href="#" class="meta-item zu-autohide js-share"><i class="z-icon-share"></i>分享</a>

                <a href="#" class="meta-item zu-autohide js-collect"><i class="z-icon-collect"></i>收藏</a>





                <span class="zg-bull zu-autohide">•</span>

                <a href="#" class="meta-item zu-autohide js-noHelp">没有帮助</a>

                <span class="zg-bull zu-autohide">•</span>
                <a href="#" class="meta-item zu-autohide js-report">举报</a>




                <span class="zg-bull">•</span>

                <a href="/terms#sec-licence-1" target="_blank" class="meta-item copyright">作者保留权利</a>


                <button class="meta-item item-collapse js-collapse">
<i class="z-icon-fold"></i>收起
</button>
            </div>
        </div>
    </div>
</div>
"""


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容