一次性插入多字段 职位信息 和 公司信息到 mysql 。
# 适用于表已经存在
# 插入的字段一定要和表结构字段 以及类型一样
import pymysql
class JzmPipeline(object):
'''把数据存储到mysql数据库中'''
# 1. 在open_spider方法中, 链接Mysql数据库
def open_spider(self, spider):
if spider.name == 'jzm_pos_com':
# 链接本地Mysql数据库
self.conn = pymysql.connect(host='', port=0.0.0.0, database='test', user='user', password='password',charset='utf8')
self.cur = self.conn.cursor()
# 2. 在process_item方法中, 把数据插入到Mysql数据库中
def process_item(self, item, spider):
"""创建游标对象"""
if spider.name == 'jzm_pos_com':
if item['flag'] == 'pos':# 插入两个表要一个flag判断# 职位表
try:
self.cur.execute(
'''insert into xb_company_position(pos_code,pos_name,status,degree,address,city,description,job_requirements,work_nature,recruit_num,com_code) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)''',
[
'qy'+item['pos_code'], item['pos_name'], item['status'],
item['degree'], item['address'], item['city'],
item['description'], item['job_requirements'], item['work_nature'],
item['recruit_num'], item['com_code']
])
self.conn.commit()
except Exception as e:
print(e)
elif item['flag'] == 'com':# 插入两个表要一个flag判断
try:
self.cur.execute(
'''insert into xb_company(name,logo,company_nature,scale_num,sub_industry,address,introduce,code) values(%s,%s,%s,%s,%s,%s,%s,%s)''',
[
item['name'], item['logo'], item['company_nature'],
item['scale_num'], item['sub_industry'], item['address'],
item['introduce'], 'qy'+item['code'],
])
self.conn.commit()
except Exception as e:
print(e)
# 3. 在close_spider方法中, 关闭Mysql数据库链接
def close_spider(self, spider):
if spider.name == 'jzm_pos_com':
# 关闭Mysql数据库链接
self.conn.close()
(此方法是在scrapy-redis框架里进行的,中途出现了控制台能打印数据,但是不能入库,此时要检查 item类里面的是不是都有;第二种,能入redis库 ,不能存入mysql ,这时候就需要检查字段是不是和mysql库表字段 ,都是对应完整的,item里面的定义是不是都有)