zoukankan      html  css  js  c++  java
  • scrapy操作指南

    Scrapy安装:(scrapy依赖包过多推荐使用下面的方法)

    先安装Anaconda,然后 运行conda install Scrapy

    创建scrapy项目:

    1,scrapy startproject 项目名
    2,cd到项目名下
    3,scrapy genspider 爬虫名 www.baidu.com(网站网址)
    4,在项目根目录下新建run.py

    from scrapy.cmdline import execute  
    execute(['scrapy','crawl','quotes'])
    

    这种方法直接运行该脚本即可,不需要每次输入命令!

    scrapy选择器用法

    response.css('.text::text').extract()
    这里为提取所有带有class=’text’ 这个属性的元素里面的text返回的是一个列表
    response.css('.text::text').extract_first()
    这是取第一条,返回的是str
    response.css("div span::attr(href)").extract()
    这里取的是该属性值
    

    同样可以用xpath选择器:

    response.xpath("//a[@class='tag']/text()").extract())
    

    scrapy保存文件的方法

    scrapy crawl quotes -o quotes.json   #  保存为json形式
    scrapy crawl quotes -o quotes.jl    #json lines存储
    scrapy crawl quotes -o quotes.csv
    scrapy crawl quotes -o quotes.xml
    scrapy crawl quotes -o quotes.pickle  #数据分析用
    scrapy crawl quotes -o quotes.marshal   #数据分析用
    scrapy crawl quotes -o ftp://user:pass@ftp.example.com/path/to/quotes.csv  #远程保存
    

    scrapy的spider的用法

    spider是最简单的spider,每个其他的spider都必须继承该类,spider并没有提供什么特殊的功能,其仅仅请求给定的start_urls/start_requests,并根据返回的结果调用spider的parse方法

    name,
    定义spider的名字的字符串,必须是唯一的,name是spider的最重要的属性,而且是必须的
    allowed_domains
    可选,包含spider允许爬取的域名的列表,当offsiterMiddleware启用时,域名不在列表的url不会被跟进
    start_urls 
    url列表,spider从该列表中开始进行爬取。 
    start_requests
    该方必须返回一个可迭代的对象,对象中包含了spider用于爬取的第一个request.

    def start_requests(self):
        yield scrapy.Request(url=,self.menu,method='post')
    

    scrapyde settings的用法

    1. DOWNLOAD_DELAY = 2-----------设置爬取间隔
    2. DEFAULT_REQUEST_HEADERS-----------设置头信息
    3. ROBOTSTXT_OBEY = True-----------如果启用,Scrapy将会采用 robots.txt策略
    4. AUTOTHROTTLE_START_DELAY = 5----------开始下载时限速并延迟时间
    5. AUTOTHROTTLE_MAX_DELAY = 60------------高并发请求时最大延迟时间
    6. CONCURRENT_REQUESTS = 16-----------开启线程数量,默认16

    递归调用本函数爬取

    next_page = response.css('.next::attr(href)').extract_first()
    self.page += 1  (先设置类变量)
    if self.page <= 3:   #控制递归深度
        yield scrapy.Request(url=next_page,callback=self.parse)
    

    meta是一个字典,主要是用解析函数之间传递值

    # 上一个函数 yield scrapy.Request(title_urls,self.get_pics,meta={'title_name':title_name})  
    # 下一个函数 s = response.meta['title_name']
    

    爬虫的暂停与重启

    scrapy crawl 爬虫名称 -s JOBDIR=保存记录信息的路径
      如:scrapy crawl cnblogs -s JOBDIR=zant/001 
      执行命令会启动指定爬虫,并且记录状态到指定目录

    爬虫已经启动,我们可以按键盘上的ctrl+c停止爬虫,停止后我们看一下记录文件夹,会多出3个文件,其中的requests.queue文件夹里的p0文件就是URL记录文件,这个文件存在就说明还有未完成的URL,当所有URL完成后会自动删除此文件

    当我们重新执行命令:scrapy crawl cnblogs -s JOBDIR=zant/001  时爬虫会

  • 相关阅读:
    GORM模型(Model)创建
    GORM高级查询
    LogAgent
    安装kafka
    go读取日志tailf
    bubble清单
    go操作kafka
    GORM模型删除
    Vue 父子组件间的传值
    列表和表格
  • 原文地址:https://www.cnblogs.com/gaosai/p/9825124.html
Copyright © 2011-2022 走看看