美文网首页
scrapy 流程

scrapy 流程

作者: 恬恬i阿萌妹O_o | 来源:发表于2018-12-03 18:58 被阅读0次

    创建项目 scrapy startproject + 项目名称
    创建爬虫文件 进入到spiders 文件夹下 创建爬虫文件 scrapy genspider + 爬虫文件名称 + 网站的域
    创建好之后打开 pycharm 选择虚拟环境

    注意:项目名称和爬虫文件的名称不能重名

    scrapt 项目的架构(框架)
    chinaz 项目文件夹
    spiders 存放所有的爬虫文件
    zzw.py 爬虫文件(解析response 响应,提取目标数据和url)
    items.py 编写要爬取的字段
    middiewares.py 中间件(爬虫中间件,下载中间件)
    piplines.py 数据管道(在里面做数据持久化)
    settings.py 设置文件(设置请求头,下载延迟,是否遵循robot协议,等 ....)
    scrapy.cfg 配置文件(部署项目的时候会用到)

    运行 : 进入chainz/ 在进入 spiders 在执行scrapy crawl zzw

    scrapy 流程
    setting.py 设置文件
    ROBOTSTXT_OBEY = False 是否要遵守robot 协议,为True 表示遵守,要改为False 不遵守
    DOWNLOAD_DELAY = 0 设置下载延迟,默认为0 ,将注掉的代码打开
    DEFAULT_REQUEST_HEADERS = {
    'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
    } 默认的请求头,是全局的,将注掉的代码打开

    zzw.py 爬虫文件
    name = 'zzw':爬虫文件的名称,每一个爬虫文件都有一个爬虫的名称,是唯一的
    allowed_domains = ['chinaz.com']: allowed_domains = ['chinaz.com']
    start_urls = ['http://top.chinaz.com/']: 设置要爬取的起始的url 链接,任务,可以指定多个

      response :接收相应结果,解析数据,提取新的url
      response.status:获取响应的状态码
      response.text:获取响应的html文本
      response.body:获取响应的二进制数据(当response.text出现乱码的时候,可以拿到二进制数据进行解码)
      response.headers:获取响应头
      response.request.headers :获取请求的请求头
    
      解析数据
      导入items.py 文件中要爬取的字段定义的类  例如: from chainz.items import ChainzItem
      cate_items =  ChainzItem() :实例化一个item对象
      利用 response.xpath 做数据的提取 例如:
      例如:方式 1. title = category_a.xpath('./text()').extract()[0]
                  方式 2 .title = response.xpath('./text()').extract_first(' ')
       获取出来的都是Selector对象,并且都存放在列表里面
       extract():作用是将提取到的Selector对象中的data数据提取出来,这里提取出来的是unicode编码类型
       extract_first(' '):取列表中的第一个元素,如果列表为空,可以在括号中添加一个默认值,如果不设置默认值返回的是None
       将不完整的url拼接完整
        例如:方式 1. cate_items['fristpage'] = urljoin(response.url,href)
                    方式 2. cate_items['fristpage'] = response.urljoin(href)
      yield 方法:将items数据交给管道(这里使用yield)管道就使用yield
      yield:将获取到的数据都交给管道处理就使用yield     例如:yield.cate_items
      发起一个请求:例如:yield scrapy Request(url=category_item['fristPage'],callback=self.parse_web_list_data
      Request 方法需要的参数: 
      """
            url, 发起请求的url地址
            callback=None, 请求成功后的回调
            method='GET', 请求的方式
            headers=None, 请求头
            cookies=None, cookies
            meta=None, 要传递的参数
            encoding='utf-8', 编码类型
            priority=0, 优先级
            dont_filter=False, 是否要过滤请求(False去重,不会重复请求)
            errback=None 请求错误的回调
      """
    

    items.py 在这里定义要爬取的字段
    例如 :title = scrapy.Field() 定义分类的名称
    price = scrapy.Field() 定义价格

    运行代码 : 进入chainz/ 在进入 spiders 在执行scrapy crawl zzw

    pipelines.py 管道 ,在管道里面做数据的过滤和数据的持久化

    将数据存到本地
    注意:在使用管道之前,要先激活管道,需要在setings 文件中激活
    setting.py 设置文件
    将注释掉的代码打开,在这里进行管道的激活,前面表示路径,后面跟的数字,数字越小表示优先级越高,越先经过哪个类
    ITEM_PIPELINES = { 'chinaz.pipelines.ChinazPipeline': 300,}
    回到 pipelines.py 管道文件中
    定义 open_spider 方法,是一个可选的方法,有需要的时候就去调用,当spider 方法开启的时候,会执行,并且只调用一次,表示 爬虫开始
    定义 close_spider方法, 和open_spider 方法一样,只调用一次,表示,爬虫结束

    mongodb 数据持久化 将数据存入到 mongodb 数据库中
    return item 的作用:
    在初始化中创建数据库连接 例如:self.client = pymongo.MongoClient(host,port)
    获取数据库 例如: self.db = self.client[db]
    @classmethod 是一个类方法,crawler:可以从crawler里面获取到爬虫的核心组件(从settings.py设置文件中获取相关参数)
    def from_crawler(cls, crawler):
    例如:host = crawler.settings['MONGO_HOST']
    port = crawler.settings['MONGO_PORT']
    return cls(host,port)
    在 setting.py 设置文件中 写入mongodb数据库相关配置如下代码
    MONGO_HOST = '127.0.0.1'
    MONGO_PORT = 27017
    MONGO_DB = 'chinaz-99'
    在 item.py 定义方法 例如: def get_collection_name(self): return 'categroy'
    回到 pipelines.py 管道文件中
    col_name = self.db[item.get_collection_name()]
    col_name.insert(dict(item))
    定义 close_spider()方法 爬虫结束的时候会调用 self.client.close()

    mysql 数据库持久化,将数据存放在mysql 数据库中
    在 piplines.py 管道文件中做mysql 的数据持久化
    创建一个数据库连接 self.client = pymysql.Connect(host,user,pwd,db,charset=charset)
    创建游标 self.cursor = self.client.cursor()
    在setting.py 设置文件中 写入mysql 数据库相关配置
    MYSQL_HOST = '127.0.0.1'
    MYSQL_USER = 'root'
    MYSQL_PWD = '123'
    MYSQL_DB = 'china_999'
    MYSQL_CHARSET = 'utf8'

    相关文章

      网友评论

          本文标题:scrapy 流程

          本文链接:https://www.haomeiwen.com/subject/ejlucqtx.html