使用官方组件下载图片,保存到MySQL数据库,保存到MongoDB数据库
需要学习的地方,使用官方组件下载图片的用法,保存item到MySQL数据库
需要提前创建好MySQL数据库,根据item.py文件中的字段信息创建相应的数据表
1.items.py文件
- from scrapy import Item,Field
- class Images360Item(Item):
- # MongoDB数据库的表名和MySQL数据库的表名
- collection = table = 'images'
- id = Field()
- url = Field()
- title = Field()
- thumb = Field()
2.settings.py文件
- ITEM_PIPELINES = {
- 'images360.pipelines.ImagesPipeline': 300,
- 'images360.pipelines.MongoPipeline': 301,
- 'images360.pipelines.MySQLPipeline': 302,
- }
- # MongoDB数据库参数
- MONGO_URI = '127.0.0.1'
- MONGO_DATABASE = 'images360'
- # 图片保存路径
- IMAGES_STORE = 'D:\\images360\\images'
- # MySQL数据库参数
- MYSQL_HOST = '127.0.0.1'
- MYSQL_DATABASE = 'images360'
- MYSQL_USER = 'root'
- MYSQL_PASSWORD = 'root'
- MYSQL_PORT = 3306
3.pipeline.py文件
- import pymongo
- import pymysql
- from scrapy import Request
- from scrapy.exceptions import DropItem
- from scrapy.pipelines.images import ImagesPipeline
- # 下载项目图片
- class ImagesPipeline(ImagesPipeline):
- def file_path(self, request, response=None, info=None):
- url = request.url
- filename = url.split('/')[-1]
- return filename
- def item_completed(self, results, item, info):
- image_paths = [x['path'] for ok, x in results if ok]
- if not image_paths:
- raise DropItem("Image Downloaded Failed")
- return item
- def get_media_requests(self, item, info):
- yield Request(item['url'])
- # 保存到MongoDB数据库
- class MongoPipeline(object):
- # 数据表名
- collection_name = 'scrapy_items'
- def __init__(self, mongo_uri, mongo_db):
- self.mongo_uri = mongo_uri
- self.mongo_db = mongo_db
- @classmethod
- # 从settings.py文件中获取参数
- def from_crawler(cls, crawler):
- return cls(
- mongo_uri=crawler.settings.get('MONGO_URI'),
- mongo_db=crawler.settings.get('MONGO_DATABASE', 'items') # 数据库名
- )
- def open_spider(self, spider):
- self.client = pymongo.MongoClient(self.mongo_uri)
- self.db = self.client[self.mongo_db]
- def close_spider(self, spider):
- self.client.close()
- def process_item(self, item, spider):
- self.db[item.collection].insert_one(dict(item)) # 从items.py文件中获取表名
- return item
- # 保存数据到MySQL数据库
- class MySQLPipeline(object):
- def __init__(self, host, database, user, password, port):
- self.host = host
- self.database = database
- self.user = user
- self.password = password
- self.port = port
- @classmethod
- def from_crawler(cls, crawler):
- return cls(
- host=crawler.settings.get('MYSQL_HOST'),
- database=crawler.settings.get('MYSQL_DATABASE'),
- user=crawler.settings.get('MYSQL_USER'),
- password=crawler.settings.get('MYSQL_PASSWORD'),
- port=crawler.settings.get('MYSQL_PORT'),
- )
- def open_spider(self, spider):
- self.db = pymysql.connect(self.host, self.user, self.password, self.database, charset='utf8', port=self.port)
- self.cursor = self.db.cursor()
- def close_spider(self, spider):
- self.db.close()
- def process_item(self, item, spider):
- data = dict(item)
- keys = ', '.join(data.keys())
- values = ', '.join(['%s'] * len(data))
- sql = 'insert into %s (%s) values (%s)' % (item.table, keys, values)
- self.cursor.execute(sql, tuple(data.values()))
- self.db.commit()
- return item
使用官方组件下载图片,保存到MySQL数据库,保存到MongoDB数据库的更多相关文章
- Scrapy Item用法示例(保存item到MySQL数据库,MongoDB数据库,使用官方组件下载图片)
需要学习的地方: 保存item到MySQL数据库,MongoDB数据库,下载图片 1.爬虫文件images.py # -*- coding: utf-8 -*- from scrapy import ...
- mysql数据库和mongodb数据库的相关操作以及两个数据库的区别
在docs命令中执行数据操作 MySQL数据库 先启动MySQL服务器 net start mysql 进入MySQL服务器MySQL -uroot -p(这里写你的数据库密码) (-P是从哪个端口 ...
- php将图片以二进制保存到mysql数据库并显示
一.存储图片的数据表结构: -- -- 表的结构 `image` -- CREATE TABLE IF NOT EXISTS `image` ( `id` int(3) NOT NULL AUTO_I ...
- Python实现将图片以二进制格式保存到MySQL数据库中,以及取出:
创建数据库表格式: CREATE TABLE photo ( photo_no int(6) unsigned NOT NULL auto_increment, image MEDIUMBLOB, P ...
- Unity WWW下载图片并保存到Unity的Assets下
1.新建一个UGUI的Image. 2.新建一个脚本wwwTest.cs: using System.Collections; using System.Collections.Generic; us ...
- 爬取伯乐在线文章(四)将爬取结果保存到MySQL
Item Pipeline 当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item. 每个Item Pipeline ...
- 微信昵称有特殊符号怎么保存到mysql库里?
微信昵称有特殊符号怎么保存到mysql库里? mysql库怎么保存emoji表情? 这里提供 1 种稳妥有效的方法: // 入库之前,使用 Base64 编码 String nickname = re ...
- Asp.net Session 保存到MySql中
一 网站项目引入"mysql.web.dll" 二 web.config配置中添加mysql数据库连接字符串 <connectionStrings> <remov ...
- pandas对象保存到mysql出错提示“BLOB/TEXT column used in key specification without a key length”解决办法
问题 将DataFrame数据保存到mysql中时,出现错误提示: BLOB/TEXT column used in key specification without a key length 原因 ...
随机推荐
- Lua 跟 C++ 的交互
Lua 和 C++ 是这样交互的 乱七八糟的前戏: 1. 到官网下载 Lua 文件 可參考 -> Lua 下载与配置 2. 设置环境 可參考 -> VS 配置Lua环境 交互过程 ...
- [DB][MySql]关于取得自增字段的值、及@@IDENTITY 与并发性问题
对于刚从Oracle转向MySql的人都会为,MySql中没有Oracle里的Sequence而感到困惑.MySql中没有了Sequence,那么MySql的主键用什么方式来实现最好呢? 主要有下面几 ...
- sql server中数据约束相关的查询
根据表名查找数据约束 SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'CMS_EventLog'; SEL ...
- 解决无线网卡 RTL8723BE ubuntu环境下不稳定情况
jiqing@ThinkPad:~$ lspci | grep -i net 00:19.0 Ethernet controller: Intel Corporation Ethernet Conne ...
- 在IIS上搭建WebSocket服务器(二)
服务器端代码编写 1.新建一个ASP.net Web MVC5项目 2.新建一个“一般处理程序” 3.Handler1.ashx代码如下: using System; using System.Col ...
- POJ3420 递推+矩阵快速幂
POJ3420 很有趣的覆盖问题 递归推导如下: f[n] = f[n-1] + 4*f[n-2] + 2 * [ f[n-3] + f[n-5] + f[n-7] +.... ] + 3 * [ ...
- Android开发之Thread类分析 (转载)
转自:http://blog.csdn.net/llping2011/article/details/9706599 在我们Linux系统中创建线程函数为:pthread_create(),在Andr ...
- Nginx 配置https请求
通过阿里云生成指定的https证书文件xxxx.key 和 xxxx.pem文件 在阿里云上申请的https证书的是pem格式,转成cer 先在终端cd到文件目录下 然后 openssl x509 - ...
- Codeforces 825D 二分贪心
题意:给一个 s 串和 t 串, s 串中有若干问号,问如何填充问号使得 s 串中字母可以组成最多的 t 串.输出填充后的 s 串. 思路:想了下感觉直接怼有点麻烦,要分情况:先处理已经可以组成 t ...
- nginx入门学习
1.yum解决编译nginx所需的依赖包,之后你的nginx就不会报错了 yum install gcc patch libffi-devel python-devel zlib-devel bzip ...