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类参数self使用示例
Feb 17 Python
使用Python的web.py框架实现类似Django的ORM查询的教程
May 02 Python
Python基于pygame实现的弹力球效果(附源码)
Nov 11 Python
简单掌握Python中glob模块查找文件路径的用法
Jul 05 Python
python字符串string的内置方法实例详解
May 14 Python
Python 给某个文件名添加时间戳的方法
Oct 16 Python
python判断完全平方数的方法
Nov 13 Python
Kali Linux安装ipython2 和 ipython3的方法
Jul 11 Python
python递归法解决棋盘分割问题
Jul 17 Python
40行Python代码实现天气预报和每日鸡汤推送功能
Feb 27 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
Jul 20 Python
用python计算文件的MD5值
Dec 23 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连接Oracle for NT 远程数据库
2006/10/09 PHP
Ajax+Jpgraph实现的动态折线图功能示例
2019/02/11 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
prototype Element学习笔记(Element篇三)
2008/10/26 Javascript
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
js性能优化技巧
2015/11/29 Javascript
jQuery each函数源码分析
2016/05/25 Javascript
jQuery实现手机自定义弹出输入框
2016/06/13 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
js生成随机颜色方法代码分享(三种)
2016/12/29 Javascript
Bootstrap一款超好用的前端框架
2017/09/25 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
微信小程序实现张图片合成为一张并下载
2019/07/16 Javascript
uni-app从安装到卸载的入门教程
2020/05/15 Javascript
javascript实现移动端红包雨页面
2020/06/23 Javascript
JavaScript的垃圾回收机制与内存管理
2020/08/06 Javascript
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
详解使用python的logging模块在stdout输出的两种方法
2017/05/17 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
写一个方法1000的阶乘
2012/11/21 面试题
应聘护士自荐信
2013/10/21 职场文书
进口业务员岗位职责
2014/04/06 职场文书
团日活动总结怎么写
2014/06/25 职场文书
财务工作失职检讨书
2014/11/21 职场文书
2016年优秀共产党员先进事迹材料
2016/02/29 职场文书
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python
教你如何使用Python实现二叉树结构及三种遍历
2021/06/18 Python
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB
配置Kubernetes外网访问集群
2022/03/31 Servers