版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cjqh_hao/article/details/83019822
这里的爬虫代码是基于第一个爬虫程序【重写第一个爬虫程序】,由于是python3.6.4,所以不能使用mysqldb,那就采用pymysql。
一、安装并测试pymysql
pip install pymysql
在python cli下测试是否安装成功
>>> import pymysql
>>>
测试与本地mysql数据库连接情况
>>> conn =pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root',db='scrapy')
>>>
执行一个简单查询
>>> cursor = conn.cursor()
>>> cursor.execute('select * from images')
38 #有38条记录
>>>
说明pymysql安装成功
二、代码实现
1 在settings.py中增加数据库连接配置
#mysql数据库配置
DB_CONFIG = {
'MYSQL_HOST':'localhost',
'MYSQL_DBNAME': 'scrapy',
'MYSQL_USER': 'root',
'MYSQL_PASSWD': 'root',
'MYSQL_PORT': 3306,
'MYSQL_CHARSET': 'utf8'
}
2 image下创建db/dbhelper.py目录文件
# -*- coding: utf-8 -*-
import pymysql
from image.settings import DB_CONFIG
class DBHelper():
'''
读取settings中的配置,实现数据库操作
'''
def __init__(self):
self.connect = pymysql.connect(
host=DB_CONFIG['MYSQL_HOST'],
db=DB_CONFIG['MYSQL_DBNAME'],
user=DB_CONFIG['MYSQL_USER'],
passwd=DB_CONFIG['MYSQL_PASSWD'],
charset=DB_CONFIG['MYSQL_CHARSET'],
port=DB_CONFIG['MYSQL_PORT']
)
self.cursor = self.connect.cursor()
#插入数据库
def insert(self, item):
try:
cursor = self.cursor
sql = "insert into images(title,img_url) values(%s,%s)"
#调用插入的方法
cursor.execute(sql, (
item["title"], item['url']
)
)
self.db.commit()
except Exception as e:
print('insert error', e)
self.db.rollback()
finally:
self.db.close()
return item
3 修改pipeline.py文件
注释原来的保存文件代码,实现保存mysql
import json
from image.db.dbhelper import DBHelper
class ImagePipeline(object):
def __init__(self):
#self.file = open('data.json', 'wb')
self.db = DBHelper()
def process_item(self, item, spider):
#存文件
#line = json.dumps(dict(item)) + "\n"
#self.file.write(line.encode())
#存数据库试试
self.db.insert(item)
return item
4 其他
扫描二维码关注公众号,回复:
4192867 查看本文章
表创建
mysql> show create table images;
+--------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+--------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| images | CREATE TABLE `images` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`title` varchar(64) DEFAULT '' COMMENT '标题',
`img_url` varchar(100) DEFAULT '' COMMENT '图片url',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
本文主要是将item数据持久化到mysql数据库,后续文章会考虑写一些python web开发,安全等方面的内容。欢迎留言交流学习。