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 del()函数用法
Mar 24 Python
Python使用爬虫猜密码
Feb 19 Python
django批量导入xml数据
Oct 16 Python
python批量实现Word文件转换为PDF文件
Mar 15 Python
使用Python机器学习降低静态日志噪声
Sep 29 Python
Python之两种模式的生产者消费者模型详解
Oct 26 Python
详解Python绘图Turtle库
Oct 12 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
Dec 27 Python
基于python计算并显示日间、星期客流高峰
May 07 Python
Pycharm自带Git实现版本管理的方法步骤
Sep 18 Python
Django前后端分离csrf token获取方式
Dec 25 Python
Python实现列表拼接和去重的三种方式
Jul 02 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实现的英文名字全拼随机排号脚本
2014/07/04 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
摘自百度的图片轮换效果代码
2007/11/19 Javascript
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
javascript实现表单验证
2016/01/29 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
jQuery视差滚动效果网页实现方法经验总结
2016/09/29 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
jQuery实现判断控件是否显示的方法
2017/01/11 Javascript
ES5学习教程之Array对象
2017/04/01 Javascript
JavaScript ES6中const、let与var的对比详解
2017/06/18 Javascript
手机注册发送验证码倒计时的简单实例
2017/11/15 Javascript
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
2018/10/22 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
jquery 键盘事件 keypress() keydown() keyup()用法总结
2019/10/23 jQuery
python在linux中输出带颜色的文字的方法
2014/06/19 Python
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
python enumerate函数的使用方法总结
2017/11/15 Python
python列表使用实现名字管理系统
2019/01/30 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
2020/02/07 Python
TensorFlow获取加载模型中的全部张量名称代码
2020/02/11 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
2020/12/07 Python
Python 生成短8位唯一id实战教程
2021/01/13 Python
如何用Lucene索引数据库
2016/02/23 面试题
Servlet如何得到客户端机器的信息
2014/10/17 面试题
工作保证书范文
2014/04/29 职场文书
幼儿评语大全
2014/04/30 职场文书
安全资料员岗位职责范本
2014/06/28 职场文书
2015年全国爱耳日活动总结
2015/02/27 职场文书
详解如何在Canvas中添加事件的方法
2021/04/17 Javascript
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server