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实现接受任意个数参数的函数方法
Apr 21 Python
python发送邮件脚本
May 22 Python
python的pytest框架之命令行参数详解(上)
Jun 27 Python
Python如何实现转换URL详解
Jul 02 Python
wxPython实现绘图小例子
Nov 19 Python
Python 获取numpy.array索引值的实例
Dec 06 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
Jan 20 Python
python selenium自动化测试框架搭建的方法步骤
Jun 14 Python
python 元组和列表的区别
Dec 30 Python
python代码实现图书管理系统
Nov 30 Python
pycharm远程连接服务器并配置python interpreter的方法
Dec 23 Python
pandas 按日期范围筛选数据的实现
Feb 20 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中实现图片的锐化
2006/10/09 PHP
浅谈php serialize()与unserialize()的用法
2013/06/05 PHP
php中session与cookie的比较
2015/01/27 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
THINKPHP在添加数据的时候获取主键id的值方法
2017/04/03 PHP
JQuery each()函数如何优化循环DOM结构的性能
2012/12/10 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
原生JS实现简单放大镜效果
2017/02/08 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
2017/06/28 Javascript
简单实现jQuery手风琴效果
2017/08/18 jQuery
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
JavaScript this使用方法图解
2020/02/04 Javascript
原生js实现购物车功能
2020/09/23 Javascript
js仿淘宝放大镜效果
2020/12/28 Javascript
如何封装Vue Element的table表格组件
2021/02/06 Vue.js
一步步解析Python斗牛游戏的概率
2016/02/12 Python
Python 多线程Threading初学教程
2017/08/22 Python
带你认识Django
2019/01/15 Python
Python 函数返回值的示例代码
2019/03/11 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
Django xadmin安装及使用详解
2020/10/26 Python
无需JS和jQuery代码实现CSS3鼠标浮动放大图片
2016/11/21 HTML / CSS
乐天旅游台湾网站:Rakuten Travel TW
2017/06/01 全球购物
有机童装:Toby Tiger
2018/05/23 全球购物
语文高效课堂实施方案
2014/05/03 职场文书
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
放弃继承权公证书
2015/01/23 职场文书
大学生社会实践活动总结报告
2015/05/06 职场文书
辛德勒的名单观后感
2015/06/03 职场文书
运动会加油稿50字
2015/07/21 职场文书
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android