抓取知乎今日最热和本月最热的前三个问题及每个问题的首个回答,保存至html文件,该html文件的文件名应该是20160228_zhihu_today_hot.html,也就是日期+zhihu_today_hot.html

代码如下:

 from selenium import webdriver
 from time import sleep
 import time

 class ZhiHu():

     def __init__(self):
         self.dr = webdriver.Chrome()
         self.dr.maximize_window()
         self.today_hot_list = self.get_today_hot()
         self.month_hot_list = self.get_month_hot()

     def get_today_hot(self):
         '''知乎今日最热问题前3个'''
         today_hot = []
         i = 0
         while i < 3:
             self.dr.get('https://www.zhihu.com/explore')
             sleep(3)
             question_title = self.dr.find_elements_by_css_selector('div.explore-feed.feed-item>h2>a.question_link')[i].text #获取问题
             question_answer_url = self.dr.find_elements_by_css_selector('div.explore-feed.feed-item>h2>a.question_link')[i].get_attribute('href') #获取问题回答的url
             self.dr.get(question_answer_url) #访问问题url
             sleep(5)
             question_answer_innerhtml = self.dr.find_element_by_css_selector('.zm-editable-content.clearfix').get_attribute('innerHTML') #获取首个回答的innerHTML
             today_hot.append((question_title, question_answer_innerhtml))
             i += 1
         return today_hot

     def write_today_data(self):
         file_date = time.strftime('%Y-%m-%d',time.localtime(time.time()))
         self.file = open(file_date+'_zhihu_today_hot'+'.html','wb')
         file_line = '**********************************************<br />' #<br \>为转行符
         for item in self.today_hot_list:
             self.file.write(file_line.encode('gbk'))
             self.file.write(('问题:'+item[0]+'<br />').encode('gbk'))
             self.file.write(('首个回答:'+item[1]+'<br />').encode('gbk'))
         self.file.close()

     def get_month_hot(self):
         '''知乎本月最热问题前3个'''
         month_hot = []
         i = 5  # 本月最热前已有5个含explore-feed feed-item的div标签,所以这里含explore-feed.feed-item的div标签及其定义的i从5开始
         while i < 8:
             self.dr.get('https://www.zhihu.com/explore#monthly-hot')
             sleep(3)
             question_title = self.dr.find_elements_by_css_selector('div.explore-feed.feed-item>h2>a.question_link')[i].text  # 获取问题
             question_answer_url = self.dr.find_elements_by_css_selector('div.explore-feed.feed-item>h2>a.question_link')[i].get_attribute('href')  # 获取问题回答的url
             self.dr.get(question_answer_url)  # 访问问题url
             sleep(5)
             question_answer_innerhtml = self.dr.find_element_by_css_selector('.zm-editable-content.clearfix').get_attribute('innerHTML')  # 获取首个回答的innerHTML
             month_hot.append((question_title, question_answer_innerhtml))
             i += 1
         return month_hot

     def write_month_data(self):
         file_date = time.strftime('%Y-%m-%d', time.localtime(time.time()))
         self.file = open(file_date + '_zhihu_mouth_hot' + '.html', 'wb')
         file_line = '--------------------------------------<br />'
         for item in self.month_hot_list:
             self.file.write(file_line.encode('gbk'))
             self.file.write(('问题:' + item[0] + '<br />').encode('gbk'))
             self.file.write(('首个回答:' + item[1] + '<br />').encode('gbk'))
         self.file.close()

     def quit(self):
         self.dr.quit()

 if __name__ == '__main__':
     zhihu = ZhiHu()
     zhihu.write_today_data()
     zhihu.write_month_data()
     zhihu.quit()

网页如下:

生成html如下:

嘻嘻,html的排版不是多好哈~

用python+selenium抓取知乎今日最热和本月最热的前三个问题及每个问题的首个回答并保存至html文件的更多相关文章

  1. python学习-抓取知乎图片

    #!/bin/usr/env python3 __author__ = 'nxz' """ 抓取知乎图片webdriver Chromedriver驱动需要安装,并指定d ...

  2. 用python+selenium抓取微博24小时热门话题的前15个并保存到txt中

    抓取微博24小时热门话题的前15个,抓取的内容请保存至txt文件中,需要抓取排行.话题和阅读数 #coding=utf-8 from selenium import webdriver import ...

  3. 用python+selenium抓取豆瓣读书中最受关注图书并按评分排序

    抓取豆瓣读书中的(http://book.douban.com/)最受关注图书,按照评分排序,并保存至txt文件中,需要抓取书籍的名称,作者,评分,体裁和一句话评 方法一: #coding=utf-8 ...

  4. 用python+selenium抓取豆瓣电影中的正在热映前12部电影并按评分排序

    抓取豆瓣电影(http://movie.douban.com/nowplaying/chengdu/)中的正在热映前12部电影,并按照评分排序,保存至txt文件 #coding=utf-8 from ...

  5. Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺

    更新 其实本文的初衷是为了获取淘宝的非匿名旺旺,在淘宝详情页的最下方有相关评论,含有非匿名旺旺号,快一年了淘宝都没有修复这个. 可就在今天,淘宝把所有的账号设置成了匿名显示,SO,获取非匿名旺旺号已经 ...

  6. selenium抓取动态网页数据

    1.selenium抓取动态网页数据基础介绍 1.1 什么是AJAX AJAX(Asynchronouse JavaScript And XML:异步JavaScript和XML)通过在后台与服务器进 ...

  7. python Web抓取(一)[没写完]

    需要的模块: python web抓取通过: webbrowser:是python自带的,打开浏览器获取指定页面 requests:从因特网上下载文件和网页 Beautiful Soup:解析HTML ...

  8. selenium抓取视频

    今天闲着没事,用selenium抓取视频保存到本地,只爬取了第一页,只要小于等于5分钟的视频... 为什么不用requests,没有为什么,就因为有些网站正则和xpath都提取不出来想要的东西,要么就 ...

  9. Python数据抓取技术与实战 pdf

    Python数据抓取技术与实战 目录 D11章Python基础1.1Python安装1.2安装pip1.3如何查看帮助1.4D1一个实例1.5文件操作1.6循环1.7异常1.8元组1.9列表1.10字 ...

随机推荐

  1. java IO之AutoCloseable,Closeable和Flushable接口

    有3个接口对于流类相当重要.其中两个接口是Closeable和Flushable,它们是在java.io包中定义的,并且是由JDK5添加的.第3个接口是AutoColseable,它是由JDK7添加的 ...

  2. css 背景透明文字(内容)不透明三种实现方法

    好久没写博客了.以前还想着最少一个月抽空写几篇.结果没做到O(∩_∩)O~~.好吧.现在努力,继续坚持. 看着以前写的东西,感觉自己在逐渐成长. 先上图: 本文主要记录如上图一样的.文字或内容不透明, ...

  3. Bootstrap<基础十六> 导航元素

    Bootstrap 提供的用于定义导航元素的一些选项.它们使用相同的标记和基类 .nav.Bootstrap 也提供了一个用于共享标记和状态的帮助器类.改变修饰的 class,可以在不同的样式间进行切 ...

  4. 写入标题使用依赖注入Title的setTitle方法

    1. 声明 Generator的声明方式类似一般的函数声明,只是多了个*号,并且一般可以在函数内看到yield关键字 function* showWords() { yield 'one'; yiel ...

  5. 转-Apache的Order Allow,Deny 详解

    Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合Directory, Location, Files等),用来控制目录和文件的访问授权. 所以,最常用的是:Or ...

  6. #Deep Learning回顾#之2006年的Science Paper

    大家都清楚神经网络在上个世纪七八十年代是着实火过一回的,尤其是后向传播BP算法出来之后,但90年代后被SVM之类抢了风头,再后来大家更熟悉的是SVM.AdaBoost.随机森林.GBDT.LR.FTR ...

  7. DLL 导出封装类

    首先使用Wizard创建一个Win32 Dynamic-Link Library工程,然后定义一个简单的C++类CInDLL.由于该类会被工程之外的文件所引用,所以需要对这个类进行引出.因为只有引出后 ...

  8. Java 设计模式学习

    看完headfirst设计模式,简单总结一下. 写在最前面:设计模式的关心的问题为"弹性.易于维护.易于扩展",通过对模式的应用,让自己的代码能够得到良好的可塑性.但是个人认为不能 ...

  9. ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决

    先看oracle的监听和oracle的服务是否都启动了. 启动oracle监听:cmd命令行窗口下,输入lsnrctl start,回车即启动监听. 查看oracle的sid叫什么,比如创建数据库的时 ...

  10. JS 笔记(二) - 函数

    1. 函数的 声明 1) 声明式写法 function j1(id){ alert(id); } 2) 声明匿名函数变量 var j2 = function (a, b) { alert(a + &q ...