刚开始学习python爬虫,参考代码:https://github.com/lijaha/web-spider/blob/master/Get_ZhiHu_question.py

 相关教程http://www.cnblogs.com/xin-xin/p/4297852.html

首先要把网页的信息爬取下来,再接着分析。。。。

代码如下:(爬取https://www.zhihu.com/question/24728633的代码保存为html.txt)

#_*_ coding: utf-8 _*_import urllib
import urllib2
import reurl = 'https://www.zhihu.com/question/24728633'
request = urllib2.Request(url)
respones = urllib2.urlopen(request)
html = respones.read()
file = open("html.txt","w+")
file.write(html)
print html

接着要对网页进行分析,,,,,,

1.提取帖子问题

html代码也就是下面的部分

<h2 class="zm-item-title zm-editable-content">大数据听着很牛,实际上也很牛吗?</h2>

于是正则表达式是

pattern = re.compile('<h2 class="zm-item-title.*?>(.*?)</h2>',re.S)

2.提取问题描述

html代码:

<div id="zh-question-detail" class="zm-item-rich-text" data-resourceid="2073494" data-action="/question/detail"><div class="zm-editable-content">就是收集很多用户数据,用机器进行处理嘛,干嘛整天吵得这么high。传统行业的数据,收集和分析慢,互联网时代特别是移动互联网时代,数据收集和分析都变得更快更智能,仅此而已吧。</div>

正则表达式:

pattern = re.compile('<div id="zh-question-detail.*?>.*?<div class="zm-editable.*?>(.*?)</div>.*?</div>',re.S)

仅有<div class="zm-editable.*?>不能区别出问题描述与回答的差别。

3.提取回答

html代码

<div class="zm-item-rich-text js-collapse-body" data-resourceid="2073494" data-action="/answer/content" data-author-name="Xiaoyu Ma" data-entry-url="/question/24728633/answer/28768001"><div class="zh-summary summary clearfix" style="display:none;">简单说,一顿饭吃一碗,是正常人;一顿饭能吃300碗呢。不就是吃饭嘛。是嘛。。是吗。。。小规模的数据分析,会有很大噪音。比如你不能因为看到1个人买了黄瓜又买了KY就说两者有什么关联,但是如果几百万个用户都显示了这样的关联,那就能说明一些问题(?)…<a href="/question/24728633/answer/28768001" class="toggle-expand">显示全部</a></div><div class="zm-editable-content clearfix">
简单说,一顿饭吃一碗,是正常人;一顿饭能吃300碗呢。不就是吃饭嘛。是嘛。。是吗。。。<br><br>小规模的数据分析,会有很大噪音。比如你不能因为看到1个人买了黄瓜又买了KY就说两者有什么关联,但是如果几百万个用户都显示了这样的关联,那就能说明一些问题(?)了。可是数据量一旦上了规模,传统的系统就没办法很好的处理了。<br>比如说你的电商网站每天有几十G的用户点击数据,你希望知道定了鲜花的用户是否也会购买避孕套,然后让决定是否给杜蕾斯做推荐。你决定分析上个季度的用户数据来作决策,不过这些数据结构松散,没有索引,你家的Oracle把磁盘转的吱吱响,转了两天终于给出结果说根据这个季度的历史浏览统计,我们发现鲜花和避孕套有很大的正相关性,因此这个关联推荐是有效的。你回头跟老板商量,他披头对你一通骂,2货,情人节是昨天!<br>阿里亚马逊ebay这些,成千上万种货物,每天成TB的甚至PB的数据量,要对大量不同的货品种类作分析和推荐,近实时地更新给用户看;推特和Facebook这些,根据用户发布的信息和行为模式,快速地分析整合数据给出精确广告投放是这些公司生存的根本。<br><br>等移动互联网或者物联网更普及,数据量只会更大,结构更随意,分析更困难。能从中找到有意思的信息,用传统手段就更难了。</div>

正则表达式:

pattern = re.compile('<div class="zm-item-rich-text.*?>.*?</div>.*?<div class="zm-editable-content.*?>(.*?)</div>',re.S)

代码:

# _*_ coding:utf-8 _*_import urllib
import urllib2
import reclass Tool:RemoveImg = re.compile('<img.*?>| {7}|')#匹配图片标签RemoveAddr = re.compile('<a.*?>|</a>')#匹配链接标签ReplaceLine = re.compile('<tr>|<div>|</div></p>')#匹配换行符的标签ReplaceTD = re.compile('<td>') #匹配制表符ReplacePara = re.compile('<p.*?>')#匹配段落开头ReplaceBR = re.compile('<br><br>|<br>')#匹配换行和双换行RemoveTag = re.compile('<.*?>')#匹配其余的标签def replace(self,x):x = re.sub(self.RemoveImg,"",x)#删除图片x = re.sub(self.RemoveAddr,"",x)#删除链接x = re.sub(self.ReplaceLine,"\n",x)#替换换行符x = re.sub(self.ReplaceTD,"\t",x)#将制表符替换x = re.sub(self.ReplacePara,"\n  ",x)#段落开头替换x = re.sub(self.ReplaceBR,"\n",x)x = re.sub(self.RemoveTag,"",x)#删除其余标签return x.strip()
class zhihu:def __init__(self,url):self.url = urlself.tool = Tool()self.file=None#获取网页代码def gethtml(self):url = self.urlrequest = urllib2.Request(url)respones = urllib2.urlopen(request)html = respones.read()return html#获取帖子标题def gettitle(self,html):pattern = re.compile('<h2 class="zm-item-title.*?>(.*?)</h2>',re.S)title = re.search(pattern,html)if title:return title.group(1).strip()else:return None#获取题目描述def getquestion(self,html):pattern = re.compile('<div id="zh-question-detail.*?>.*?<div class="zm-editable.*?>(.*?)</div>.*?</div>',re.S)detail = re.search(pattern,html)if detail:return detail.group(1).strip()else:return None#获取回答def getanswer(self,html):pattern = re.compile('<div class="zm-item-rich-text.*?>.*?</div>.*?<div class="zm-editable-content.*?>(.*?)</div>',re.S)items = re.findall(pattern,html)contents = []i=0for item in items:content = "\n"+self.tool.replace(item)+"\n"contents.append(content)# print itemi+=1return contents#获取赞同数def getvote(self,html):pattern = re.compile('<div class="zm-votebar.*?>.*?<button class="up.*?>.*?<span class="count.*?>(.*?)</span>',re.S)items=re.findall(pattern,html)votes=[]for item in items:item = "\n"+self.tool.replace(item)+"\n"votes.append(item)return votesdef filename(self,title):if title:self.file=open(title+".txt","w+")else:print "文件创建出错!"def writefile(self,question,detail,votes):if detail:statement="\n"+"本次的问题的描述为:"+"\n"+self.tool.replace(detail)+"\n"self.file.write(statement)# print statementelse:print "写入问题描述出错!"if question:i=1j=0for que in question:label = "\n"+"第"+str(i)+"个回答:"+"\n"+"本回答的点赞数为:"+str(votes[j])+"\n"self.file.write(label)self.file.write(que)i+=1j+=1else:print "写入回答错误!"def start(self):html = self.gethtml()print "已获得源代码,正在处理......"title = self.gettitle(html)print "本次获取的问题是:"+titledetail = self.getquestion(html)question = self.getanswer(html)votes = self.getvote(html)# print votesprint "正在创建存储文件......"self.filename(title)print "文件创建完成,文件名为:"+title+".txt"self.writefile(question,detail,votes)
print "欢迎使用知乎回答抓取,请输入知乎的帖子编号:"
url= 'https://www.zhihu.com/question/'+raw_input("https://www.zhihu.com/question/")question = zhihu(url)
question.start()

python爬虫实战之爬取知乎帖子相关推荐

  1. Python 网络爬虫实战:爬取知乎回答中的全部图片

    平时逛知乎的时候,经常能看到很多很棒的图片,精美的壁纸,搞笑的表情包,有趣的截图等等,总有想全部保存下来的冲动. 于是在一个小老弟的拜托之下,我把之前的知乎爬虫改造了一下,改装成了一个可以下载知乎回答 ...

  2. 携程ajax,Python爬虫实战之爬取携程评论

    一.分析数据源 这里的数据源是指html网页?还是Aajx异步.对于爬虫初学者来说,可能不知道怎么判断,这里辰哥也手把手过一遍. 提示:以下操作均不需要登录(当然登录也可以) 咱们先在浏览器里面搜索携 ...

  3. Python爬虫实战之爬取糗事百科段子

    Python爬虫实战之爬取糗事百科段子 完整代码地址:Python爬虫实战之爬取糗事百科段子 程序代码详解: Spider1-qiushibaike.py:爬取糗事百科的8小时最新页的段子.包含的信息 ...

  4. Python爬虫实战之爬取百度贴吧帖子

    Python爬虫实战之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的 ...

  5. Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(下)

    在Python爬虫实战(1) | 爬取豆瓣网排名前250的电影(上)中,我们最后爬出来的结果不是很完美,这对于"精益求精.追求完美的"程序猿来说怎么能够甘心 所以,今天,用pyth ...

  6. python抓取文献关键信息,python爬虫——使用selenium爬取知网文献相关信息

    python爬虫--使用selenium爬取知网文献相关信息 写在前面: 本文章限于交流讨论,请不要使用文章的代码去攻击别人的服务器 如侵权联系作者删除 文中的错误已经修改过来了,谢谢各位爬友指出错误 ...

  7. Python爬虫实战之爬取网站全部图片(一)

    Python爬虫实战之爬取网站全部图片(二) Python爬虫实战之通过ajax获得图片地址实现全站图片下载(三) 一.获得图片地址 和 图片名称 1.进入网址之后 按F12  打开开发人员工具点击e ...

  8. Python爬虫实战:爬取解放日报新闻文章

    上一篇<Python 网络爬虫实战:爬取人民日报新闻文章>发布之后,确实帮到了不少朋友. 前几天,我好哥们问我:我想爬另一个日报新闻网站,网页结构几乎跟人民日报几乎一模一样,但是我用你的那 ...

  9. Python爬虫实战之 爬取全国理工类大学数量+数据可视化

    上次爬取高考分数线这部分收了个尾,今天咱们来全面爬取全国各省有多少所理工类大学,并简单实现一个数据可视化.话不多说,咱们开始吧. 第一步,拿到url地址 第二步,获取高校数据 第三步,地图可视化 第四 ...

最新文章

  1. 卷积神经网络学习笔记与心得(4)池化
  2. python之模块base64
  3. testng xml 示例
  4. 统计子串出现次数 STL map
  5. mysql dump 查看器_mysql备份之mysqldump工具
  6. 【1】MySQL的四种事务隔离级别
  7. 如何升级Linux内核(RHEL/Fedora/CentOS升级内核 Debian/Ubuntu升级内核)
  8. MsChart控件在VC++中的使用(VS2013+MFC+对话框)
  9. navicat produsts注册机出现Generate First a serial
  10. 你不可不知的铠装光缆常识
  11. MyBatis核心流程三大阶段之初始化阶段
  12. Activity获得焦点----onWindowFocusChanged
  13. win10c盘android,Win10系统C盘哪些文件可以删除?C盘无用文件都在哪?
  14. 细数黑帽seo七宗罪
  15. CSDN去广告,超清爽界面
  16. 计算机网络代表第几次革命,互联网:人类生产力的第三次革命
  17. 使用jquery完成抽奖图片滚动的效果
  18. 突发!意外!华芯通公司将于4月30日关闭
  19. 分享151个PHP源码,总有一款适合您
  20. python中class什么意思_python-classmethod在此代码中做什么?

热门文章

  1. EXCEL函数篇 跨工作表统计数据
  2. 用itchat库爬取你所有微信好友的头像,并合成一张大图
  3. JS学习之求带参函数求任意两个数和
  4. 联盟链开发 区块链联盟链开发
  5. Javaweb在线拍卖管理系统买家卖家mysql
  6. hive连接报错:Unauthorized connection for super-user: root from IP 192.168.216.128:14:13
  7. 微信小程序入门篇(二)
  8. mysql多实例部署
  9. 提升沟通效率,增强企业执行力-中小企业融合通信解决方案
  10. 未来影响爬架行业的4大技术趋势