• 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  时爬虫会

  • 相关阅读:
    Codeforces 834D The Bakery
    hdu 1394 Minimum Inversion Number
    Codeforces 837E Vasya's Function
    Codeforces 837D Round Subset
    Codeforces 825E Minimal Labels
    Codeforces 437D The Child and Zoo
    Codeforces 822D My pretty girl Noora
    Codeforces 799D Field expansion
    Codeforces 438D The Child and Sequence
    Codeforces Round #427 (Div. 2) Problem D Palindromic characteristics (Codeforces 835D)
  • 原文地址:https://www.cnblogs.com/gaosai/p/9825124.html
Copyright © 2020-2023  润新知