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 and、or以及and-or语法总结
Apr 14 Python
Python的Django REST框架中的序列化及请求和返回
Apr 11 Python
Python文件操作之合并文本文件内容示例代码
Sep 19 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
Mar 29 Python
python使用Matplotlib画饼图
Sep 25 Python
Python实现的删除重复文件或图片功能示例【去重】
Apr 23 Python
Python二维码生成识别实例详解
Jul 16 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
Mar 02 Python
python实现电子词典
Mar 03 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
Mar 08 Python
win10从零安装配置pytorch全过程图文详解
May 08 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简单定时执行任务的实现方法
2015/02/23 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
2018/01/15 PHP
PHP一个简单的无需刷新爬虫
2019/01/05 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
jquery判断元素是否隐藏的多种方法
2014/05/06 Javascript
jQuery中on()方法用法实例
2015/01/19 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
JavaScript中的Function函数
2015/08/27 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
JavaScript新增样式规则(推荐)
2016/07/19 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
移动端界面的适配
2017/01/11 Javascript
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
Angular2 组件交互实例详解
2017/08/24 Javascript
对node.js中render和send的用法详解
2018/05/14 Javascript
React Native基础入门之调试React Native应用的一小步
2018/07/02 Javascript
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
vue使用axios上传文件(FormData)的方法
2019/04/14 Javascript
JavaScript如何操作css
2020/10/24 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
python中函数总结之装饰器闭包详解
2016/06/12 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
Python字典遍历操作实例小结
2019/03/05 Python
Python标准库shutil模块使用方法解析
2020/03/10 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
Django框架配置mysql数据库实现过程
2020/04/22 Python
Python如何读写字节数据
2020/08/05 Python
详解Python中第三方库Faker
2020/09/25 Python
保洁主管岗位职责
2013/11/20 职场文书
阳光体育活动方案
2014/02/16 职场文书
应届大学生自荐书
2014/06/17 职场文书
幼儿园开学报名通知
2015/07/16 职场文书
七年级作文之冬景
2019/11/07 职场文书
教你怎么用python实现字符串转日期
2021/05/24 Python
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS