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使用shelve模块实现简单数据存储的方法
May 20 Python
win10环境下python3.5安装步骤图文教程
Feb 03 Python
Python之csv文件从MySQL数据库导入导出的方法
Jun 21 Python
python3实现随机数
Jun 25 Python
python计算两个数的百分比方法
Jun 29 Python
python中map的基本用法示例
Sep 10 Python
python3 打开外部程序及关闭的示例
Nov 06 Python
Python 利用切片从列表中取出一部分使用的方法
Feb 01 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
Apr 17 Python
keras实现theano和tensorflow训练的模型相互转换
Jun 19 Python
Python colormap库的安装和使用详情
Oct 06 Python
Pygame Draw绘图函数的具体使用
Nov 17 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下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
php中文字符串截取多种方法汇总
2016/10/06 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
2017/04/20 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
火狐下table中创建form导致两个table之间出现空白
2013/09/02 Javascript
js闭包的用途详解
2014/11/09 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
JavaScript基于setTimeout实现计数的方法
2015/05/08 Javascript
关于JavaScript作用域你想知道的一切
2016/02/04 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
Web性能优化系列 10个提升JavaScript性能的技巧
2016/09/27 Javascript
浅谈AngularJS中ng-class的使用方法
2016/11/11 Javascript
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
2017/03/23 jQuery
jQuery实现动态生成表格并为行绑定单击变色动作的方法
2017/04/17 jQuery
JavaScript实现百度搜索框效果
2020/03/26 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
用于统计项目中代码总行数的Python脚本分享
2015/04/21 Python
python实现堆和索引堆的代码示例
2018/03/19 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
python3实现字符串操作的实例代码
2019/04/16 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
文言文形式的学生求职信
2013/12/03 职场文书
企业车辆管理制度
2014/01/24 职场文书
教导处教学工作总结
2015/08/12 职场文书
计算机实训心得体会
2016/01/14 职场文书
如何用 Python 子进程关闭 Excel 自动化中的弹窗
2021/05/07 Python
正确使用MySQL INSERT INTO语句
2021/05/26 MySQL
动画《新网球王子 U-17 WORLD CUP》希腊队PV公开
2022/04/02 日漫