例子:要求
1.安装mysql数据库.
2.安装pip install pymysql.
3.在爬虫项目中: 自定义item,封装爬取结果.
#coding=utf-8
import scrapy
from scrapy import Item,Field
#定义的类模型:
class JobItem(Item):
#定义属性
job_name = Field()
salary = Field()
endDate = Field()
4.在爬虫项目中: 自定义itemPipelines管道. 处理爬虫结果,并存储至mysql中.
创建完等会下写DataConvertPipeLine.py里面的内容
# -*- coding:utf-8 -*-
import scrapy
import json
from project1.items2.JobItem import JobItem
# import pymysql
class ZhilianSpiderSql(scrapy.Spider):
name = 'sp4' #爬虫名称
start_urls = ['https://fe-api.zhaopin.com/c/i/sou?start=0&pageSize=90&cityId=664&workExperience=-1&education=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1&kw=java%E5%BC%80%E5%8F%91&kt=3&_v=0.28840206&x-zp-page-request-id=fa4f5603902d4862868b73556d18d3a3-1547777345528-592905']
#函数: 解析智联招聘数据接口的数据.
def parse(self, response):
#解析数据接口的json格式数据. 得到需要的岗位信息:
#解决: 需要提供json组件.
json_body = json.loads(response.body)
json_data = json_body.get("data")
json_results = json_data.get("results")
#遍历集合: results.
for js in json_results:
#封装数据到模型中:
job1 = JobItem()
job1["job_name"] = js["jobName"] #这里的jobName对应的是json数据中的key值通过key值去除value值
job1["salary"] = js["salary"]
job1["endDate"] = js["endDate"]
#返回存储:
yield job1
#coding=utf-8
import scrapy
import pymysql
#自定义管道:
class DataConvertPipeLine(object):
#如何定义管道: 一般通过重写父中方法的形式.进行管道定义.
#open_spider(self , spider) / process_item(self, item, spider) / close_spider(self , spider)
# def open_spider(self , spider):
# print '1开始准备管道处理 ~~~~~~~~~同时爬虫工作中!!!'
# pass
#
# #补充: str .decode("utf-8") : 将字符串str遵循utf-8编码方式,转换成底层ascii码.实现存储,传递等.
# # decode:解码.字符-->ascii encode:编码: ascii--->字符
# def process_item(self, item, spider):
# #item参数: 即为管道中的数据:
# salary = item["salary"] #取出模型中的值.
# item["salary"] = salary,"/月".decode("utf-8") #处理后,重新赋值到模型中.
# print '2正在管道中处理item ~~~~~~~~~item此刻,来自于爬虫返回!!!'
# return item
#
# def close_spider(self , spider):
# print '3正在关闭管道处理~~~~~~~~~爬虫已经结束!!!'
# pass
#开启连接:
def open_spider(self,spider):
#connect : 充当连接对象.
self.connect = pymysql.Connect(
# host、port、user、passwd、db、charset
host="localhost",
port=3306,
user="root",
passwd="root",
db="iteams",
charset="utf8"
)
#cur : 充当游标.
self.cur = self.connect.cursor()
pass
#处理item数据,实现存储:
def process_item(self , item , spider):
#编写sql实现存储: item数据的存储.
# 新增mysql 的语句: insert into zhilian (字段列表) values (' 3000, python工程师 )
sql = "INSERT INTO zhilian(salary,job_name,endDate) VALUES(%s,%s,%s)"
self.cur.execute(sql,(item["salary"],item["job_name"],item["endDate"]))
#确认提交事务:
self.connect.commit()
pass
#释放资源连接:
def close_spider(self,spider):
self.cur.close()
self.connect.close()
pass
注意字段属性类型要保持一致
运行项目
python中爬取到数据以item封装数据存储到mysql中
需求: 51job/智联招聘.带分页的爬取和数据的存储.