文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-02 00:48

关注

一个简单的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['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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯