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 yield使用方法示例
Dec 04 Python
python基于pygame实现响应游戏中事件的方法(附源码)
Nov 11 Python
使用Python的Tornado框架实现一个Web端图书展示页面
Jul 11 Python
浅谈Python由__dict__和dir()引发的一些思考
Oct 30 Python
Python引用计数操作示例
Aug 23 Python
通过cmd进入python的实例操作
Jun 26 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
Aug 02 Python
pytorch实现用CNN和LSTM对文本进行分类方式
Jan 08 Python
关于TensorFlow新旧版本函数接口变化详解
Feb 10 Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 Python
解决pycharm中的run和debug失效无法点击运行
Jun 09 Python
python 字典和列表嵌套用法详解
Jun 29 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
用php实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
让Json更懂中文(JSON_UNESCAPED_UNICODE)
2011/10/27 PHP
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
使用php实现从身份证中提取生日
2016/05/09 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
laravel请求参数校验方法
2019/10/10 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
在jQuery ajax中按钮button和submit的区别分析
2012/10/07 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
javascript定时器完整实例
2015/02/10 Javascript
JavaScript操作Cookie详解
2015/02/28 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
2015/10/25 Javascript
使用JavaScript实现ajax的实例代码
2016/05/11 Javascript
JavaScript 中 avalon绑定属性总结
2016/10/19 Javascript
原生javascript实现图片放大镜效果
2017/01/18 Javascript
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
JavaScript实现仿Clock ISO时钟
2018/06/29 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
2019/01/23 Javascript
详解关于微信setData回调函数中的坑
2019/02/18 Javascript
Vue实现日历小插件
2019/06/26 Javascript
微信小程序点击列表跳转到对应详情页过程解析
2019/09/26 Javascript
vue 动态表单开发方法案例详解
2019/12/02 Javascript
vue使用echarts画组织结构图
2021/02/06 Vue.js
Python调用C/C++的方法解析
2020/08/05 Python
Crocs欧洲官网:Crocs Europe
2020/01/14 全球购物
介绍下Java的输入输出流
2014/01/22 面试题
2019年Java 最常见的 面试题
2016/10/19 面试题
你所在的项目是如何确定版本号的
2015/12/28 面试题
公司离职证明样本
2014/09/13 职场文书
2015年挂职干部工作总结
2015/05/14 职场文书
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python