zoukankan      html  css  js  c++  java
  • Scrapy学习篇(三)之创建项目

    创建项目

    创建项目是爬取内容的第一步,之前已经讲过,Scrapy通过scrapy startproject <project_name>命令来在当前目录下创建一个新的项目。
    下面我们创建一个爬取博客园('https://www.cnblogs.com/')文章信息的项目

    scrapy startproject cnblog
    其中cnblog是你的项目的名字,可以自己定义。
    其目录结构如下

    cnblog/
        scrapy.cfg
            
        cnblog/
             __init__.py
        
            items.py
        
            pipelines.py
            
            middlewares.py
        
            settings.py
        
            spiders/
                __init__.py
    

    下面简单的讲解一下各目录/文件的作用:

    • scrapy.cfg
      项目的配置文件,带有这个文件的那个目录作为scrapy项目的根目录
    • items.py
      定义你所要抓取的字段
    • pipelines.py
      管道文件,当spider抓取到内容(item)以后,会被送到这里,这些信息(item)在这里会被清洗,去重,保存到文件或者数据库。
    • middlewares.py
      中间件,主要是对功能的拓展,你可以添加一些自定义的功能,比如添加随机user-agent, 添加proxy。
    • settings.py
      设置文件,用来设置爬虫的默认信息,相关功能开启与否,比如是否遵循robots协议,设置默认的headers,设置文件的路径,中间件的执行顺序等等。
    • spiders/
      在这个文件夹下面,编写你自定义的spider。

    编写爬虫

    编写spider文件

    在项目中的spiders文件夹下面创建一个文件,命名为cnblog_spider.py我们将在这个文件里面编写我们的爬虫。先上代码再解释。

    import scrapy
    
    class Cnblog_Spider(scrapy.Spider):
    
        name = "cnblog"
        allowed_domains = ["cnblogs.com"]
        start_urls = [
         'https://www.cnblogs.com/',
        ]
    
        def parse(self, response):
            title = response.xpath('//a[@class="titlelnk"]/text()').extract()
            link = response.xpath('//a[@class="titlelnk"]/@href').extract()
            print(title)
            print(link)
            
    
    • 导入scrapy模块
    • 定义一个spider类,继承自scrapy.Spider父类。

    下面是三个重要的内容

    • name: 用于区别Spider。 该名字必须是唯一的,不可以为不同的Spider设定相同的名字。这一点很重要。
    • start_urls: 包含了Spider在启动时进行爬取的url列表。第一个被获取到的页面将是其中之一。即这是爬虫链接的起点,爬虫项目启动,便开始从这个链接爬取,后续的URL则从初始的URL获取到的数据中提取。
    • parse() 是spider的一个方法。 被调用时,每个初始URL完成下载后生成的 Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的 Request 对象。

    修改settings.py文件

    将settings.py文件里面的下列内容修改如下,其余的内容不动。

    ROBOTSTXT_OBEY = False   #不遵循robots协议
    
    #去掉下面的这个注释,以设置请求头信息,伪造浏览器headers,并手动添加一个user-agent
    DEFAULT_REQUEST_HEADERS = {
      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
      'Accept-Language': 'en',
      #user-agent新添加
      'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
    }
    
    

    运行我们的爬虫项目

    至此,项目必要的信息已经全部完成了,下面就是运行我们的爬虫项目
    进入带有scrapy.cfg文件的那个目录,前面已经说过,这是项目的根目录,执行下面的命令
    scrapy crawl cnblog
    cnblog是spiders/cnblog_spider.py文件里面我们定义的那个具有唯一性的name
    你会发现打印出了博客园首页的文章列表和文章的url信息,如下所示。

  • 相关阅读:
    HDU 4069 Squiggly Sudoku
    SPOJ 1771 Yet Another NQueen Problem
    POJ 3469 Dual Core CPU
    CF 118E Bertown roads
    URAL 1664 Pipeline Transportation
    POJ 3076 Sudoku
    UVA 10330 Power Transmission
    HDU 1426 Sudoku Killer
    POJ 3074 Sudoku
    HDU 3315 My Brute
  • 原文地址:https://www.cnblogs.com/cnkai/p/7396835.html
Copyright © 2011-2022 走看看