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之玩转字符串(2)更新篇
Sep 28 Python
使用Python程序抓取新浪在国内的所有IP的教程
May 04 Python
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
May 16 Python
用python做一个搜索引擎(Pylucene)的实例代码
Jul 05 Python
win7+Python3.5下scrapy的安装方法
Jul 31 Python
python 反编译exe文件为py文件的实例代码
Jun 27 Python
python openpyxl使用方法详解
Jul 18 Python
keras多显卡训练方式
Jun 10 Python
python根据字典的键来删除元素的方法
Aug 16 Python
Django windows使用Apache实现部署流程解析
Oct 12 Python
python爬取招聘要求等信息实例
Nov 20 Python
python Matplotlib基础--如何添加文本和标注
Jan 26 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 缓存函数代码
2008/08/27 PHP
PHP 过滤页面中的BOM(实现代码)
2013/06/29 PHP
php图片处理函数获取类型及扩展名实例
2014/11/19 PHP
PHP邮箱验证示例教程
2016/06/01 PHP
PHP关于foreach复制知识点总结
2019/01/28 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
基于PHP实现生成随机水印图片
2020/12/09 PHP
javascript中数组的冒泡排序使用示例
2013/12/18 Javascript
window.open打开页面居中显示的示例代码
2013/12/27 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
jquery中map函数遍历数组用法实例
2015/05/18 Javascript
jQuery获取DOM节点实例分析(2种方式)
2015/12/15 Javascript
又一枚精彩的弹幕效果jQuery实现
2016/07/25 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
vue 实现特定条件下绑定事件
2019/11/09 Javascript
JavaScript canvas实现雪花随机动态飘落
2020/02/08 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Java Web开发过程中登陆模块的验证码的实现方式总结
2016/05/25 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
2018/09/17 Python
Python 输入一个数字判断成绩分数等级的方法
2018/11/15 Python
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
python添加菜单图文讲解
2019/06/04 Python
pytorch获取vgg16-feature层输出的例子
2019/08/20 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
澳大利亚领先的在线美容商城:Adore Beauty
2017/04/14 全球购物
高中军训感想800字
2014/02/23 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
2014年政风行风评议工作总结
2014/10/21 职场文书
2014业务员年终工作总结
2014/12/09 职场文书
会议主持人开场白台词
2015/05/28 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书
MYSQL 无法识别中文的永久解决方法
2021/06/03 MySQL