初识爬虫 - scrapy 爬取 51 (二)

上一篇简单介绍了通过使用 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版权协议,转载请附上原文出处链接和本声明。