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 selenium如何设置等待时间
Sep 15 Python
python实现自动获取IP并发送到邮箱
Dec 26 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
Jun 18 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
对Django 转发和重定向的实例详解
Aug 06 Python
Python一行代码解决矩阵旋转的问题
Nov 30 Python
利用python3 的pygame模块实现塔防游戏
Dec 30 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
python json 递归打印所有json子节点信息的例子
Feb 27 Python
Python绘制组合图的示例
Sep 18 Python
基于python获取本地时间并转换时间戳和日期格式
Oct 27 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 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数组去重实例及分析
2013/11/26 PHP
php使用Jpgraph绘制简单X-Y坐标图的方法
2015/06/10 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
php关联数组与索引数组及其显示方法
2018/03/12 PHP
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
2010/03/11 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
javascript中传统事件与现代事件
2015/06/23 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
2016/12/22 Javascript
ECMAScript6 新特性范例大全
2017/03/24 Javascript
JAVA中截取字符串substring用法详解
2017/04/14 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
react路由配置方式详解
2017/08/07 Javascript
JS+CSS实现滚动数字时钟效果
2017/12/25 Javascript
Angular4集成ng2-file-upload的上传组件
2018/03/14 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
layui实现多图片上传并限制上传的图片数量
2019/09/26 Javascript
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
Python读写docx文件的方法
2018/05/08 Python
python二维列表一维列表的互相转换实例
2018/07/02 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
使用python爬取抖音app视频的实例代码
2020/12/01 Python
python实现PolynomialFeatures多项式的方法
2021/01/06 Python
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
如何利用find命令查找文件
2015/02/07 面试题
促销活动总结
2014/04/28 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
建筑院校毕业生求职信
2014/06/13 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
2015年护士节活动总结
2015/02/10 职场文书
2015年初中生自我评价范文
2015/03/03 职场文书
贷款收入证明格式
2015/06/24 职场文书
2016年公司中秋节致辞
2015/11/26 职场文书
Python预测分词的实现
2021/06/18 Python