上一篇简单介绍了通过使用 scrapy 爬取 51 职位信息,也成功爬取了下来,包括下一页直到最后的信息都能获取到,这里就简述一下如何将爬取的内容存到数据库中,用的是 mysql 数据库。这代码是好几个月之前就写的,但现在我电脑上的 mysql 好像出了点问题,打不开了,我就不重新下了,这里也就放不了爬到数据库中后的效果图了。至于代码的正确性应该是没问题的,当时运行没问题,数据库里也成功显示了,之后没怎么动过,应该还是可以的。下面进入正题:
我们新建一个包用来定义数据库连接的:

关于里面连接数据库的代码,同 java 中的差不多,基本上格式大体还是相同的:
import pymysql
#封装的访问数据库的
try:
#数据连接是一个特别宝贵的而且是很昂贵的资源
connection =pymysql.connect(host='localhost',user='root',passwd='123456',database='jobspider',charset="utf8")
#获得游标
cursor=connection.cursor()
#定义需要执行的sql语句
sql = "insert into t_position_info(p_name,p_company,p_address,p_salary,p_time)values (%s,%s,%s,%s,%s)"
#调用游标里的execute方法执行sql语句
cursor.execute(sql)
#通过connection对象,提交事物
connection.commit()
finally:
connection.close()到这里一般情况下就结束了,数据库和写入语句都有,但我们这里有个特殊情况:

关于工资的问题,我们发现它们不统一,如果不做处理也行,入库的时候就当做一个字符串数据,但我们如果需要对不同地区不同职位上比较工资等信息的话,会很不方便,所以我们在入库前,对它们进行处理一下,统一单位格式,新建一个文件:

同前面写的数据库连接功能差不多,只是在入库前,对工资信息做一下调整,然后再入库,下面是代码:
import pymysql
class PositionMySqlPipeline(object): #处理一下统一格式单位
def process_item(self,item,spider):
try:
strSalary=item['jobSalary']
if strSalary !='':
strArray = strSalary.split('/')
if strArray[1]=='月':
if strArray[0].endswith('万'):
strSal=strArray[0].replace('万','')
salArray=strSal.split('-')
global lowSal
global highSal
global salMean
lowSal=float(salArray[0])*10000
highSal=float(salArray[1])*10000
salMean=(lowSal+highSal)/2
pass
elif strArray[0].endswith('年'):
return item
pass
elif strArray[0].endswith('天'):
return item
pass
pass
elif strArray[1] == '年':
return item
pass
elif strArray[1] == '天':
return item
pass
# 数据连接是一个特别宝贵的而且是很昂贵的资源
connection = pymysql.connect(host='localhost', user='root', password='123456', database='jobspider',charset='utf8')
# 获得游标
cursor = connection.cursor()
# 定义需要执行的sql语句
sql = "insert into t_position_copy(p_name,p_company,p_address,p_salary,p_time)values (%s,%s,%s,%s,%s)"%(item['jobTitle'],item['jobComp'],item['jobAddress'],item['jobSalary'],item['jobTime'])
# 调用游标里的execute方法执行sql语句
cursor.execute(sql)
# 通过connection对象,提交事物
connection.commit()
finally:
connection.close()
return item之后剩最后一步,修改配置文件 setting 文件:

另外整个项目的运行,我们是通过使用脚本去调用的:

到此就没什么问题了(印象中没其他要点了),整个项目代码在网盘里:提取码 :a6ub 。
版权声明:本文为qq_43305922原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。