scrapy爬虫项目--------http://v.hao123.baidu.com网站的爬取(内附:没有进行可视化的项目报告...........的链接地址)

继上一篇的博客scrapy准备工作完成后,今天正式开始scrapy的爬虫项目
ps:先看上一篇博客

scrapy项目----------爬取hao123影视

一、分析各文件含义

scrapy自动生成的文件和手动添加的文件

---->所有的__init__.py文件

无实意,内部没有内容,主要用于同一目录下的文件间的互相调用,下面的‘代码实现’中会提到!

---->dao包是手动添加的,里面的文件主要用于与数据库连接

–>basedao.py文件,连接数据库的万金油文件,可直接使用,与pymysql.json文件联用。
–>jobpositiondao.py文件,主要用于创建主要表和详情表(扩展,添加其他方法,sql语句(select),在showstatistics.py文件中可实现,而不存入数据库中),用basedao.py里的方法。
–>pymysql.json文件,连接数据库的具体信息,端口,密码,用户名,ip之类的,只需要改改内容即可。
–>taskdao.py文件,主要用于创建任务表,用basedao.py里的方法。

---->spiders包是自动生成的

–>jobspider.py文件是主程序文件,信息爬取的代码写在此文件里

---->底层steamcopy包

–>items.py文件,是保存爬取到的数据的容器,使用方法与字典类似,将定义字典items,将各key值(要爬取的数据名)通过scrapy.Field()定义。
–>middlewares.py文件,自动生成的,不需要改,在settings.py文件中打开,后面设置代理头的时候还需要将原端口关闭,设置新的。(settings.py文件中详解)
–>mysqlpipelines.py文件,通道,用于将爬取的数据存入数据库,大体结构复制的pipelines.py文件,在settings.py文件中打开pipelines的开关,添加此文件。(settings.py文件中详解)
–>pipelines.py文件,通道,将数据通过控制台输出,可直接看,在settings.py文件中打开。
–>rotateuseragent.py文件,创建动态代理列表,随机选取列表中的用户代理头部信息,伪装请求,防止被封ip,手动添加(可直接使用)
–>settings.py文件,项目的设置文件,内部含已定义的,打开,该添加的添加。(第一步就应该先配置此文件)

---->外层steamcopy包

–>jobspider.log文件,日志文件,将日志信息打印在此,需要在settings.py文件中设置
–>scrapy.cfg文件,项目的配置文件,主要用于连接settings.py文件和主程序文件,是自动生成的,不需要修改。
–>showstatistics.py文件,手动添加的,实现某sql语句,sql语句是在jobpositiondao.py文件中定义的某方法,直接调用可输出。(不进入数据库,可以不写)
–>startspider.py文件,是爬虫启动脚本,设置完后就不用在cmd输入scrapy crawl jobspider来启动了。

二、各文件代码实现

---->basedao.py

import pymysql
import json
import os

class basedao():    #dao:database access object的缩写,主要用于数据库方面的代码应用

    def __init__(self, configFile='pymysql.json'):
        self.__connection = None
        self.__cursor = None
        self.__config = json.load(open(os.path.dirname(__file__) + os.sep + configFile, 'r'))  # 通过json配置获得数据的连接配置信息(地址用相对的)
        print(self.__config)
        pass

    # 专门用来获取数据库连接的函数方法
    def getConnection(self):
        if self.__connection:                #如果有连接对象
            return self.__connection         #直接返回连接对象,
        try:
            self.__connection = pymysql.connect(**self.__config)#不然,创建新的连接对象
            return self.__connection
        except pymysql.MySQLError as e:
            print("Exception:"+str(e))
            pass
        pass

    #用于执行sql语句的通用方法(增删改查)   #sql注入的问题
    def execute(self,sql,params):
        try:
            self.__cursor = self.getConnection().cursor()
            result = self.__cursor.execute(sql,params)
            return result
            #print(result)    查的话,需要输出,其他的result是int整数(是修改成功的条数)
        except (pymysql.MySQLError,pymysql.DatabaseError,Exception)as e:
            print("出现数据库访问异常" + str(e))
            self.rollback()    #回滚
            pass
        pass
    #一般在select的sql语句时用
    def fetch(self):
        if self.__cursor:
            return self.__cursor.fetchall()
        pass

    #提交事务,每个sql语句都需要提交然后运行,紧接着close
    def commit(self):
        if self.__connection:
            self.__connection.commit()
        pass
    #回滚,出错的话就返回之前的状态
    def rollback(self):
        if self.__connection:
            self.__connection.rollback()
        pass
    #获取最后一行的id标识(用于主要表与详情表的1对1关系)
    def getLastRowId(self):
        if self.__cursor:
            return self.__cursor.lastrowid
        pass
    #关闭(只要打开了就需要关闭,否则很快数据库就会报错)
    def close(self):
        if self.__cursor:
            self.__cursor.close()
        if self.__connection:
            self.__
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值