scrapy的pipeline是一个非常重要的模块,主要作用是将return的items写入到数据库、文件等持久化模块,下面我们就简单的了解一下pipelines的用法。

案例一:

  

items池

  1. class ZhihuuserItem(scrapy.Item):
  2. # define the fields for your item here like:
  3. # name = scrapy.Field()
  4. id = scrapy.Field()
  5. name = scrapy.Field()
  6. avatar_url = scrapy.Field()
  7. headline = scrapy.Field()
  8. description = scrapy.Field()
  9. url = scrapy.Field()
  10. url_token = scrapy.Field()
  11. gender = scrapy.Field()
  12. cover_url = scrapy.Field()
  13. type = scrapy.Field()
  14. badge = scrapy.Field()
  15.  
  16. answer_count = scrapy.Field()
  17. articles_count = scrapy.Field()
  18. commercial_question = scrapy.Field()
  19. favorite_count = scrapy.Field()
  20. favorited_count = scrapy.Field()
  21. follower_count = scrapy.Field()
  22. following_columns_count = scrapy.Field()
  23. following_count = scrapy.Field()
  24. pins_count = scrapy.Field()
  25. question_count = scrapy.Field()
  26. thank_from_count = scrapy.Field()
  27. thank_to_count = scrapy.Field()
  28. thanked_count = scrapy.Field()
  29. vote_from_count = scrapy.Field()
  30. vote_to_count = scrapy.Field()
  31. voteup_count = scrapy.Field()
  32. following_favlists_count = scrapy.Field()
  33. following_question_count = scrapy.Field()
  34. following_topic_count = scrapy.Field()
  35. marked_answers_count = scrapy.Field()
  36. mutual_followees_count = scrapy.Field()
  37. participated_live_count = scrapy.Field()
  38.  
  39. locations = scrapy.Field()
  40. educations = scrapy.Field()
  41. employments = scrapy.Field()

items

写入MongoDB数据库的基本配置

  1. #配置MongoDB数据库的连接信息
  2. MONGO_URL = '172.16.5.239'
  3. MONGO_PORT = 27017
  4. MONGO_DB = 'zhihuuser'
  5.  
  6. #参数等于False,就等于告诉你这个网站你想取什么就取什么,不会读取每个网站的根目录下的禁止爬取列表(例如:www.baidu.com/robots.txt)
  7. ROBOTSTXT_OBEY = False
  8.  
  9. 执行pipelines下的写入操作
  10. ITEM_PIPELINES = {
  11. 'zhihuuser.pipelines.MongoDBPipeline': 300,
  12. }

settings.py

  1. pipelines.py
      1、首先我们要从settings文件中读取数据的地址、端口、数据库名称(没有会自动创建)。
      2、拿到数据库的基本信息后进行连接。
      3、将数据写入数据库
      4、关闭数据库
      注意:只有打开和关闭是只执行一次,而写入操作会根据具体的写入次数而定。
  1. import pymongo
  2.  
  3. class MongoDBPipeline(object):
  4. """
  5. 1、连接数据库操作
  6. """
  7. def __init__(self,mongourl,mongoport,mongodb):
  8. '''
  9. 初始化mongodb数据的url、端口号、数据库名称
  10. :param mongourl:
  11. :param mongoport:
  12. :param mongodb:
  13. '''
  14. self.mongourl = mongourl
  15. self.mongoport = mongoport
  16. self.mongodb = mongodb
  17.  
  18. @classmethod
  19. def from_crawler(cls,crawler):
  20. """
  21. 1、读取settings里面的mongodb数据的url、port、DB。
  22. :param crawler:
  23. :return:
  24. """
  25. return cls(
  26. mongourl = crawler.settings.get("MONGO_URL"),
  27. mongoport = crawler.settings.get("MONGO_PORT"),
  28. mongodb = crawler.settings.get("MONGO_DB")
  29. )
  30.  
  31. def open_spider(self,spider):
  32. '''
  33. 1、连接mongodb数据
  34. :param spider:
  35. :return:
  36. '''
  37. self.client = pymongo.MongoClient(self.mongourl,self.mongoport)
  38. self.db = self.client[self.mongodb]
  39.  
  40. def process_item(self,item,spider):
  41. '''
  42. 1、将数据写入数据库
  43. :param item:
  44. :param spider:
  45. :return:
  46. '''
  47. name = item.__class__.__name__
  48. # self.db[name].insert(dict(item))
  49. self.db['user'].update({'url_token':item['url_token']},{'$set':item},True)
  50. return item
  51.  
  52. def close_spider(self,spider):
  53. '''
  54. 1、关闭数据库连接
  55. :param spider:
  56. :return:
  57. '''
  58. self.client.close()

  

python爬虫之scrapy的pipeline的使用的更多相关文章

  1. 教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

    本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scr ...

  2. 【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

    原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http:/ ...

  3. 0.Python 爬虫之Scrapy入门实践指南(Scrapy基础知识)

    目录 0.0.Scrapy基础 0.1.Scrapy 框架图 0.2.Scrapy主要包括了以下组件: 0.3.Scrapy简单示例如下: 0.4.Scrapy运行流程如下: 0.5.还有什么? 0. ...

  4. Linux 安装python爬虫框架 scrapy

    Linux 安装python爬虫框架 scrapy http://scrapy.org/ Scrapy是python最好用的一个爬虫框架.要求: python2.7.x. 1. Ubuntu14.04 ...

  5. Python爬虫框架Scrapy实例(三)数据存储到MongoDB

    Python爬虫框架Scrapy实例(三)数据存储到MongoDB任务目标:爬取豆瓣电影top250,将数据存储到MongoDB中. items.py文件复制代码# -*- coding: utf-8 ...

  6. 《Python3网络爬虫开发实战》PDF+源代码+《精通Python爬虫框架Scrapy》中英文PDF源代码

    下载:https://pan.baidu.com/s/1oejHek3Vmu0ZYvp4w9ZLsw <Python 3网络爬虫开发实战>中文PDF+源代码 下载:https://pan. ...

  7. Python爬虫框架Scrapy教程(1)—入门

    最近实验室的项目中有一个需求是这样的,需要爬取若干个(数目不小)网站发布的文章元数据(标题.时间.正文等).问题是这些网站都很老旧和小众,当然也不可能遵守 Microdata 这类标准.这时候所有网页 ...

  8. 《精通Python爬虫框架Scrapy》学习资料

    <精通Python爬虫框架Scrapy>学习资料 百度网盘:https://pan.baidu.com/s/1ACOYulLLpp9J7Q7src2rVA

  9. Python 爬虫6——Scrapy的安装和使用

    前面我们简述了使用Python自带的urllib和urllib2库完成的一下爬取网页数据的操作,但其实能完成的功能都很简单,假如要进行复制的数据匹配和高效的操作,可以引入第三方的框架,例如Scrapy ...

随机推荐

  1. SpringBoot实现JWT保护前后端分离RESTful API

    通常情况下, 将api直接暴露出来是非常危险的. 每一个api呼叫, 用户都应该附上额外的信息, 以供我们认证和授权. 而JWT是一种既能满足这样需求, 而又简单安全便捷的方法. 前端login获取J ...

  2. [CQOI2016]手机号码

    嘟嘟嘟 这题一看就是数位dp. 我写数位dp,一般是按数位dp的格式写一个爆搜,然后加一点记忆化. 不过其实我一直不是很清楚记忆化是怎么加,感觉就是把dfs里的参数都扔到dp数组里,好像很暴力啊. 这 ...

  3. 003_python学习之 字符串前'r'的用法

    在打开文件的时候open(r'c:\....') 加r和不加''r是有区别的 'r'是防止字符转义的 如果路径中出现'\t'的话 不加r的话\t就会被转义 而加了'r'之后'\t'就能保留原有的样子 ...

  4. (四)surging 微服务框架使用系列之网关 转载

    一.什么是API网关 API网关是一个服务器,是系统对外的唯一入口.API网关封装了系统内部架构,为每个客户端提供一个定制的API.API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入 ...

  5. 禁止 gVim 在 Linux 下自动生成 undo 文件 *.un~

    在配置文件 .vimrc 中加入配置项, set noundofile 完.

  6. jupyter notebook 代码补全插件工具-nbextensions(并修改默认的工作目录)

    # conda install -c conda-forge jupyter_contrib_nbextensionsCollecting package metadata: doneSolving ...

  7. abp 基于api接口的页面内容提交

    项目中,后端api接口需要接收来自页面提交的数据.注意下拉控件对应值,应该按以下方式赋值 @Html.DropDownListFor(m => m.IsFolder, new List<S ...

  8. macOS10.4后的刻盘新姿势

    先sudo -s 输入密码 然后终端拖入createinstallmedia   (在macOS Mojave.app显示包内容里面的resources里面的文件复制下来即可) 输入 --volume ...

  9. 微信小程序大型系统架构中应用Redis缓存要点

    在大型分布式系统架构中,必须选择适合的缓存技术以应对高并发,实现系统相应的高性能,酷客多小程序经过慎重选型,选择了采用基于腾讯云服务的Redis弹性缓存技术,结合Redis官方推荐的.NET驱动类库S ...

  10. 十分钟学会Java8:lambda表达式和Stream API

    Java8 的新特性:Lambda表达式.强大的 Stream API.全新时间日期 API.ConcurrentHashMap.MetaSpace.总得来说,Java8 的新特性使 Java 的运行 ...