用python+selenium抓取知乎今日最热和本月最热的前三个问题及每个问题的首个回答并保存至html文件
抓取知乎今日最热和本月最热的前三个问题及每个问题的首个回答,保存至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文件的更多相关文章
- python学习-抓取知乎图片
#!/bin/usr/env python3 __author__ = 'nxz' """ 抓取知乎图片webdriver Chromedriver驱动需要安装,并指定d ...
- 用python+selenium抓取微博24小时热门话题的前15个并保存到txt中
抓取微博24小时热门话题的前15个,抓取的内容请保存至txt文件中,需要抓取排行.话题和阅读数 #coding=utf-8 from selenium import webdriver import ...
- 用python+selenium抓取豆瓣读书中最受关注图书并按评分排序
抓取豆瓣读书中的(http://book.douban.com/)最受关注图书,按照评分排序,并保存至txt文件中,需要抓取书籍的名称,作者,评分,体裁和一句话评 方法一: #coding=utf-8 ...
- 用python+selenium抓取豆瓣电影中的正在热映前12部电影并按评分排序
抓取豆瓣电影(http://movie.douban.com/nowplaying/chengdu/)中的正在热映前12部电影,并按照评分排序,保存至txt文件 #coding=utf-8 from ...
- Python爬虫实战八之利用Selenium抓取淘宝匿名旺旺
更新 其实本文的初衷是为了获取淘宝的非匿名旺旺,在淘宝详情页的最下方有相关评论,含有非匿名旺旺号,快一年了淘宝都没有修复这个. 可就在今天,淘宝把所有的账号设置成了匿名显示,SO,获取非匿名旺旺号已经 ...
- selenium抓取动态网页数据
1.selenium抓取动态网页数据基础介绍 1.1 什么是AJAX AJAX(Asynchronouse JavaScript And XML:异步JavaScript和XML)通过在后台与服务器进 ...
- python Web抓取(一)[没写完]
需要的模块: python web抓取通过: webbrowser:是python自带的,打开浏览器获取指定页面 requests:从因特网上下载文件和网页 Beautiful Soup:解析HTML ...
- selenium抓取视频
今天闲着没事,用selenium抓取视频保存到本地,只爬取了第一页,只要小于等于5分钟的视频... 为什么不用requests,没有为什么,就因为有些网站正则和xpath都提取不出来想要的东西,要么就 ...
- 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字 ...
随机推荐
- 【小月博客】 Html5 上传图片 移动端、PC端通用
在博客园注册账号有些天了,感觉有些许欣慰,自己写的东西有人在看,有人在评论很是开心.(ps: 满足一下虚荣心吧!) 废话不多说了,说一下今天给大家分享的是 html5上传图片.我们是在移动端使用的,但 ...
- flash与js交互
当Flash置于HTML容器中时,经常会遇到Flash与JS的通信问题,例如:JS能否调用Flash中的变量.方法,Flash能否调用JS中的变量.方法等等.答案是肯定的.随着技术的不断发展,解决方案 ...
- 临界区 TRTLCriticalSection 和 TCriticalSection
临界区对象TCriticalSection(Delphi) 与 TRtlCriticalSection 的区别 TRtlCriticalSection 是一个结构体,在windows单元中定义: 是I ...
- 用volley在Genymotion上获取网页源码
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdUAAALUCAIAAADSbz+YAAAgAElEQVR4nOydeVwT197/R+9zu9zluU
- LeetCode 7 Reverse Integer int:2147483647-2147483648 难度:2
https://leetcode.com/problems/reverse-integer/ class Solution { public: int inf = ~0u >> 1; in ...
- Ubuntu14.04使用apt-fast来加快apt-get下载的教程
代码如下: $ sudo add-apt-repository ppa:saiarcot895/myppa $ sudo apt-get update $ sudo apt-get install a ...
- TRACERT命令
这半个月 服务器从联通线路换到移动线路 导致基层用联通和电信线路的用户 上不去收费软件 tracert 120.194.42.142:8090 发现路由器 解析地址绕过很多条街后 出现丢包现象 联系 ...
- number 数据类型的分析。
在js中,number数据类型可能算最令人关注的的类型之一了. number类型分为整数和浮点数. 一,整型数,整型又分为十进制,八进制,十六进制. 十进制即是生活中接触到的:而八进制数的首位必须是零 ...
- extjs之apply
ext.apply(Ext.Form.VTypes,{}) {}里面的内容如下: { password:function (val.field) { if(field.initialPassField ...
- java数据结构_笔记(4)_图
图一.概念.图: 是一种复杂的非线性数据结构.图的二元组定义: 图 G 由两个集合 V 和 E 组成,记为:G=(V, E) 其中: V 是顶点的有穷非空集合,E 是 V 中顶点偶对(称为边)的有穷 ...