Python使用mongodb保存爬取豆瓣电影的数据过程解析


Posted in Python onAugust 14, 2019

创建爬虫项目douban

scrapy startproject douban

设置items.py文件,存储要保存的数据类型和字段名称

# -*- coding: utf-8 -*-
import scrapy
class DoubanItem(scrapy.Item):
 title = scrapy.Field()
 # 内容
 content = scrapy.Field()
 # 评分
 rating_num = scrapy.Field()
 # 简介
 quote = scrapy.Field()

设置爬虫文件doubanmovies.py

# -*- coding: utf-8 -*-
import scrapy
from douban.items import DoubanItem
class DoubanmoviesSpider(scrapy.Spider):
 name = 'doubanmovies'
 allowed_domains = ['movie.douban.com']
 offset = 0
 url = 'https://movie.douban.com/top250?start='
 start_urls = [url + str(offset)]
 def parse(self, response):
  # print('*'*60)
  # print(response.url)
  # print('*'*60)
  item = DoubanItem()
  info = response.xpath("//div[@class='info']")
  for each in info:
   item['title'] = each.xpath(".//span[@class='title'][1]/text()").extract()
   item['content'] = each.xpath(".//div[@class='bd']/p[1]/text()").extract()
   item['rating_num'] = each.xpath(".//span[@class='rating_num']/text()").extract()
   item['quote'] = each .xpath(".//span[@class='inq']/text()").extract()
   yield item
   # print(item)
  self.offset += 25
  if self.offset <= 250:
   yield scrapy.Request(self.url + str(self.offset),callback=self.parse)

设置管道文件,使用mongodb数据库来保存爬取的数据。重点部分

# -*- coding: utf-8 -*-
from scrapy.conf import settings
import pymongo
class DoubanPipeline(object):
 def __init__(self):
  self.host = settings['MONGODB_HOST']
  self.port = settings['MONGODB_PORT']
 def process_item(self, item, spider):
  # 创建mongodb客户端连接对象,该例从settings.py文件里面获取mongodb所在的主机和端口参数,可直接书写主机和端口
  self.client = pymongo.MongoClient(self.host,self.port)
  # 创建数据库douban
  self.mydb = self.client['douban']
  # 在数据库douban里面创建表doubanmovies
  # 把类似字典的数据转换为phthon字典格式
  content = dict(item)
  # 把数据添加到表里面
  self.mysheetname.insert(content)
  return item

设置settings.py文件

# -*- coding: utf-8 -*-
BOT_NAME = 'douban'
SPIDER_MODULES = ['douban.spiders']
NEWSPIDER_MODULE = 'douban.spiders'
USER_AGENT = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;'
# Configure a delay for requests for the same website (default: 0)
# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16
# Disable cookies (enabled by default)
COOKIES_ENABLED = False
# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
 'douban.pipelines.DoubanPipeline': 300,
}
# mongodb数据库设置变量
MONGODB_HOST = '127.0.0.1'
MONGODB_PORT = 27017

终端测试

scrapy crawl douban

这博客园的代码片段缩进,难道要用4个空格才可以搞定?我发现只能使用4个空格才能解决如上图的代码块的缩进

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中二维阵列的变换实例
Oct 09 Python
Python中的异常处理简明介绍
Apr 13 Python
Python IDE PyCharm的基本快捷键和配置简介
Nov 04 Python
Python编程实现微信企业号文本消息推送功能示例
Aug 21 Python
对python列表里的字典元素去重方法详解
Jan 21 Python
Django组件content-type使用方法详解
Jul 19 Python
Python generator生成器和yield表达式详解
Aug 08 Python
pytorch 可视化feature map的示例代码
Aug 20 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
Feb 26 Python
Python range与enumerate函数区别解析
Feb 28 Python
python 装饰器的基本使用
Jan 13 Python
使用python写的opencv实时监测和解析二维码和条形码
Aug 14 #Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 #Python
使用Python实现图像标记点的坐标输出功能
Aug 14 #Python
python2爬取百度贴吧指定关键字和图片代码实例
Aug 14 #Python
python提取照片坐标信息的实例代码
Aug 14 #Python
python2使用bs4爬取腾讯社招过程解析
Aug 14 #Python
详解用python计算阶乘的几种方法
Aug 14 #Python
You might like
Laravel自动生成UUID,从建表到使用详解
2019/10/24 PHP
JavaScript中使用构造函数实现继承的代码
2010/08/12 Javascript
Javascript开发之三数组对象实例介绍
2012/11/12 Javascript
JavaScript中“基本类型”之争小结
2013/01/03 Javascript
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
Javascript快速排序算法详解
2014/12/03 Javascript
静态页面html中跳转传值的JS处理技巧
2016/06/22 Javascript
JS组件系列之MVVM组件构建自己的Vue组件
2017/04/28 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
在vue项目中优雅的使用SVG的方法实例详解
2018/12/03 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
Vue多环境代理配置方法思路详解
2019/06/21 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
[04:46]2018年度玩家喜爱的电竞媒体-完美盛典
2018/12/16 DOTA
python 图片验证码代码
2008/12/07 Python
介绍Python中内置的itertools模块
2015/04/29 Python
Python3中的列表,元组,字典,字符串相关知识小结
2017/11/10 Python
Python中垃圾回收和del语句详解
2018/11/15 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
2019/06/19 Python
python3 线性回归验证方法
2019/07/09 Python
学习和使用python的13个理由
2019/07/30 Python
Python打印不合法的文件名
2020/07/31 Python
CSS3 Backgrounds属性相关介绍
2011/05/11 HTML / CSS
几个常见的软件测试问题
2016/09/07 面试题
JSP&Servlet技术面试题
2015/05/21 面试题
美术国培研修感言
2014/02/12 职场文书
企业管理毕业生求职信范文
2014/03/07 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
2015年新学期寄语
2015/02/26 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书