我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

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

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

项目源码:

# -*- coding:utf-8 -*- from spider import SpiderHTMLfrom multiprocessing import Poolimport 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('h3',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','000'))   #获得此答案赞同数      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['class="lazy" data-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的概念都是模糊不清的,Python能做什么,学的时候,该按照什么线路去学习,学完往哪方面发展,想深入了解,详情可以点击有道云笔记链接了解:http://note.youdao.com/noteshare?id=e4fa02e7b56d7909a27674cdb3da08aa

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

一个简单的python爬虫,爬取知乎主要实现 爬取一个收藏夹 里 所有问题答案下的 图片文字信息暂未收录,可自行实现,比图片更简单具体代码里有详细注释,请自行阅读项目源码:# -*- coding:utf-8 -*- from spider
2023-06-02

利用node.js写一个爬取知乎妹纸图的小爬虫

前言 说起写node爬虫的原因,真是羞羞呀。一天,和往常一样,晚上吃过饭便刷起知乎来,首页便是推荐的你见过最漂亮的女生长什么样?,点进去各种漂亮的妹纸爆照啊!!!,看的我好想把这些好看的妹纸照片都存下来啊!一张张点击保存,就在第18张得时候
2022-06-04

使用python实现一个简单的图片爬虫

本教程详细介绍使用Python编写图片爬虫的步骤:导入库(requests、BeautifulSoup)获取目标网站的HTML代码解析HTML提取图像URL下载图像处理错误优化建议:并行下载图像使用线程池使用缓存示例脚本可从特定网站爬取特定类型的图像。最佳实践:遵守机器人协议限制爬虫速率避免下载受版权保护的图像获得必要授权
使用python实现一个简单的图片爬虫
2024-04-02

Python 简单爬虫抓取糗事百科

该爬虫主要实现的功能是抓取糗事百科里面的一些段子。    urllib2可以用urllib2.openurl中设置Request参数,来修改Header头。如果你访问一个网站,想更改User Agent(可以伪装你的浏览器),你就要用url
2023-01-31

分享一个简单的java爬虫框架

反复给网站编写不同的爬虫逻辑太麻烦了,自己实现了一个小框架可以自定义的部分有:请求方式(默认为Getuser-agent为谷歌浏览器的设置),可以通过实现RequestSet接口来自定义请求方式储存方式(默认储存在f盘的html文件夹下),
2023-05-30

如何在Python中实现一个简单的爬虫程序

如何在Python中实现一个简单的爬虫程序随着互联网的发展,数据已成为当今社会最宝贵的资源之一。而爬虫程序则成为了获取互联网数据的重要工具之一。本文将介绍如何在Python中实现一个简单的爬虫程序,并提供具体的代码示例。确定目标网站在开始编
2023-10-22

Python爬虫之模拟知乎登录的方法教程

前言 对于经常写爬虫的大家都知道,有些页面在登录之前是被禁止抓取的,比如知乎的话题页面就要求用户登录才能访问,而 “登录” 离不开 HTTP 中的 Cookie 技术。 登录原理 Cookie 的原理非常简单,因为 HTTP 是一种无状态的
2022-06-04

Python异步爬取知乎热榜的方法

今天小编给大家分享一下Python异步爬取知乎热榜的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、错误代码:摘要和详
2023-06-30

使用python编写简单网络爬虫(一)

总算有时间动手用所学的python知识编写一个简单的网络爬虫了,这个例子主要实现用python爬虫从百度图库中下载美女的图片,并保存在本地,闲话少说,直接贴出相应的代码如下:---------------------------------
2023-01-31

python 简单的股票基金爬虫

目录项目地址所用到的技术开始编写爬虫项目地址 https://github.com/aliyoge/fund_crawler_py 所用到的技术IP代理池多线程爬虫sql开始编写爬虫1.首先,开始分析天天基金网的一些数据。经过抓包分析,可知
2022-06-02

Python制作简单的网页爬虫

1.准备工作:工欲善其事必先利其器,因此我们有必要在进行Coding前先配置一个适合我们自己的开发环境,我搭建的开发环境是:操作系统:Ubuntu 14.04 LTS Python版本:2.7.6 代码编辑器:Sublime Text 3.
2022-06-04

用Python编写简单的微博爬虫

先说点题外话,我一开始想使用Sina Weibo API来获取微博内容,但后来发现新浪微博的API限制实在太多,大家感受一下:只能获取当前授权的用户(就是自己),而且只能返回最新的5条,WTF! 所以果断放弃掉这条路,改为『生爬』,因为PC
2022-06-04

Python的爬虫框架scrapy用21行代码写一个爬虫

开发说明 开发环境:Pycharm 2017.1(目前最新)开发框架:Scrapy 1.3.3(目前最新) 目标爬取线报网站,并把内容保存到items.json里 页面分析根据上图我们可以发现内容都在类为post这个div里下面放出post
2022-06-04

Python使用Srapy框架爬虫模拟登陆并抓取知乎内容

一、Cookie原理 HTTP是无状态的面向连接的协议, 为了保持连接状态, 引入了Cookie机制 Cookie是http消息头中的一种属性,包括:Cookie名字(Name)Cookie的值(Value)Cookie的过期时间(Expi
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录