一个简单的python爬虫,爬取知乎

  • 主要实现 爬取一个收藏夹 里 所有问题答案下的 图片
  • 文字信息暂未收录,可自行实现,比图片更简单
  • 具体代码里有详细注释,请自行阅读

项目源码:

 # -*- coding:utf-8 -*-

 from spider import SpiderHTML
from multiprocessing import Pool
import sys,urllib,http,os,random,re,time
__author__ = 'waiting'
'''
使用了第三方的类库 BeautifulSoup4,请自行安装
需要目录下的spider.py文件
运行环境:python3.4,windows7
''' #收藏夹的地址
url = 'https://www.zhihu.com/collection/30822111' #page参数改为代码添加 #本地存放的路径,不存在会自动创建
store_path = 'E:\\zhihu\收藏夹\\会员才知道的世界' class zhihuCollectionSpider(SpiderHTML):
def __init__(self,pageStart, pageEnd, url):
self._url = url
self._pageStart = int(pageStart)
self._pageEnd = int(pageEnd)+1
self.downLimit = 0 #低于此赞同的答案不收录 def start(self):
for page in range(self._pageStart,self._pageEnd): #收藏夹的页数
url = self._url + '?page='+str(page)
content = self.getUrl(url)
questionList = content.find_all('div',class_='zm-item')
for question in questionList: #收藏夹的每个问题
Qtitle = question.find('h2',class_='zm-item-title')
if Qtitle is None: #被和谐了
continue questionStr = Qtitle.a.string
Qurl = 'https://www.zhihu.com'+Qtitle.a['href'] #问题题目
Qtitle = re.sub(r'[\\/:*?"<>]','#',Qtitle.a.string) #windows文件/目录名不支持的特殊符号
try:
print('-----正在获取问题:'+Qtitle+'-----') #获取到问题的链接和标题,进入抓取
except UnicodeEncodeError:
print(r'---问题含有特殊字符无法显示---')
try:
Qcontent = self.getUrl(Qurl)
except:
print('!!!!获取出错!!!!!')
pass
answerList = Qcontent.find_all('div',class_='zm-item-answer zm-item-expanded')
self._processAnswer(answerList,Qtitle) #处理问题的答案
time.sleep(5) def _processAnswer(self,answerList,Qtitle):
j = 0
for answer in answerList:
j = j + 1 upvoted = int(answer.find('span',class_='count').string.replace('K','')) #获得此答案赞同数
if upvoted < self.downLimit:
continue
authorInfo = answer.find('div',class_='zm-item-answer-author-info') #获取作者信息
author = {'introduction':'','link':''}
try:
author['name'] = authorInfo.find('a',class_='author-link').string #获得作者的名字
author['introduction'] = str(authorInfo.find('span',class_='bio')['title']) #获得作者的简介
author['link'] = authorInfo.find('a',class_='author-link')['href']
except AttributeError:
author['name'] = '匿名用户'+str(j)
except TypeError: #简介为空的情况
pass #匿名用户没有链接 file_name = os.path.join(store_path,Qtitle,'info',author['name']+'_info.txt')
if os.path.exists(file_name): #已经抓取过
continue self.saveText(file_name,'{introduction}\r\n{link}'.format(**author)) #保存作者的信息
print('正在获取用户`{name}`的答案'.format(**author))
answerContent = answer.find('div',class_='zm-editable-content clearfix')
if answerContent is None: #被举报的用户没有答案内容
continue imgs = answerContent.find_all('img')
if len(imgs) == 0: #答案没有上图
pass
else:
self._getImgFromAnswer(imgs,Qtitle,**author) #收录图片
def _getImgFromAnswer(self,imgs,Qtitle,**author):
i = 0
for img in imgs:
if 'inline-image' in img['class']: #不抓取知乎的小图
continue
i = i + 1
imgUrl = img['src']
extension = os.path.splitext(imgUrl)[1]
path_name = os.path.join(store_path,Qtitle,author['name']+'_'+str(i)+extension)
try:
self.saveImg(imgUrl,path_name) #捕获各种图片异常,流程不中断
except:
pass #收录文字
def _getTextFromAnswer(self):
pass #命令行下运行,例:zhihu.py 1 5 获取1到5页的数据
if __name__ == '__main__':
page, limit, paramsNum= 1, 0, len(sys.argv)
if paramsNum>=3:
page, pageEnd = sys.argv[1], sys.argv[2]
elif paramsNum == 2:
page = sys.argv[1]
pageEnd = page
else:
page,pageEnd = 1,1 spider = zhihuCollectionSpider(page,pageEnd,url)
spider.start()

很多初学者,对Python的概念都是模糊不清的,C语言、Python能做什么,学的时候,该按照什么线路去学习,学完往哪方面发展,想深入了解,详情可以点击有道云笔记链接了解:http://note.youdao.com/noteshare?id=e4fa02e7b56d7909a27674cdb3da08aa

一个简单的python爬虫,爬取知乎的更多相关文章

  1. 简单的python爬虫--爬取Taobao淘女郎信息

    最近在学Python的爬虫,顺便就练习了一下爬取淘宝上的淘女郎信息:手法简单,由于淘宝网站本上做了很多的防爬措施,应此效果不太好! 爬虫的入口:https://mm.taobao.com/json/r ...

  2. 一个简单的python爬虫程序

    python|网络爬虫 概述 这是一个简单的python爬虫程序,仅用作技术学习与交流,主要是通过一个简单的实际案例来对网络爬虫有个基础的认识. 什么是网络爬虫 简单的讲,网络爬虫就是模拟人访问web ...

  3. 用Python爬虫爬取广州大学教务系统的成绩(内网访问)

    用Python爬虫爬取广州大学教务系统的成绩(内网访问) 在进行爬取前,首先要了解: 1.什么是CSS选择器? 每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/code ...

  4. 使用Python爬虫爬取网络美女图片

    代码地址如下:http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip install ...

  5. Python爬虫 - 爬取百度html代码前200行

    Python爬虫 - 爬取百度html代码前200行 - 改进版,  增加了对字符串的.strip()处理 源代码如下: # 改进版, 增加了 .strip()方法的使用 # coding=utf-8 ...

  6. Python爬虫爬取全书网小说,程序源码+程序详细分析

    Python爬虫爬取全书网小说教程 第一步:打开谷歌浏览器,搜索全书网,然后再点击你想下载的小说,进入图一页面后点击F12选择Network,如果没有内容按F5刷新一下 点击Network之后出现如下 ...

  7. python爬虫—爬取英文名以及正则表达式的介绍

    python爬虫—爬取英文名以及正则表达式的介绍 爬取英文名: 一.  爬虫模块详细设计 (1)整体思路 对于本次爬取英文名数据的爬虫实现,我的思路是先将A-Z所有英文名的连接爬取出来,保存在一个cs ...

  8. Python爬虫|爬取喜马拉雅音频

    "GOOD Python爬虫|爬取喜马拉雅音频 喜马拉雅是知名的专业的音频分享平台,用户规模突破4.8亿,汇集了有声小说,有声读物,儿童睡前故事,相声小品等数亿条音频,成为国内发展最快.规模 ...

  9. python爬虫爬取内容中,-xa0,-u3000的含义

    python爬虫爬取内容中,-xa0,-u3000的含义 - CSDN博客 https://blog.csdn.net/aiwuzhi12/article/details/54866310

随机推荐

  1. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(8.21)-- Host Operation with Asymmetric Namespace Access Reporting

    8.21 使用ANA报告的主机操作 8.21.1 主机ANA普通操作 主机通过在Identify Controller数据结构中CMIC域的第3位来判断是否支持ANA.NSID或标识(参考第7.10章 ...

  2. EF中的上下文(DbContext)简介

    DbContext是实体类和数据库之间的桥梁,DbContext主要负责与数据交互,主要作用: 1.DbContext包含所有的实体映射到数据库表的实体集(DbSet < TEntity > ...

  3. c#数据筛选和排序

    一.TreeView SelectedNode    选中的节点            Level    节点的深度(从0开始)                AfterSelect    节点选中后 ...

  4. Oracle Data Guard搭建 1.虚拟机安装linux

    1.安装虚拟机 VMware 14 2.下载Linux镜像文件,创建虚拟机

  5. IntelliJ IDEA,酷炫插件系列,提高你的工作效率【plugins】

                             今天介绍一下IDEA的一些炫酷的插件,IDEA强大的插件库.                          不仅能给我们带来一些开发的便捷,还能体 ...

  6. Hibernate的基本工作原理

    Hibernate开发过程中会用到5个核心接口: 1.Configuration2.SessionFactory3.Session4.Transaction5.QueryHibernate就是通过这些 ...

  7. 第四篇,JavaScript面试题汇总

    JavaScript是一种属于网络的脚本语言,已经被广泛用于web实用开发,常用来为网页添加各种各样的动态功能,为用户提供更流畅美观的浏览效果.通常JavaScript脚本是通过嵌入在HTML中来实现 ...

  8. crowdfunding项目01——感人的错误

    四十搭环境,半个小时下载jar包,网速感人,一个半小时找bug真是感动 首先SSM项目,主要功能进行增删改查 建立父工程和子工程,产生依赖关系 父工程:pom 子工程:jar.war(web工程) 错 ...

  9. js splice()

    //arrayObject.splice(index,howmany,item1,.....,itemX) 语法 //测试代码let array;array = ['George','John','T ...

  10. THINKCMF5 部署到 Windows服务器

    问题一 [public/index.php是项目的入口文件,请配置服务器时把 public 目录做为 web 目录]这是官方文档的一句话.如何将public 目录做为 web 目录? 解答:在IIS或 ...