- 首页 > 睿知 > it技术 > >
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 条评论感谢分享收藏?没有帮助?
举报?作者保留权利"""
推荐阅读