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信息,如下所示。

  • 相关阅读:
    第四周作业及总结
    第三周作业及其总结
    第二周作业及总结
    我所敬佩的老师
    秋季学习总结
    自我介绍
    寒三总结
    2019春第7周作业
    2019春第六周作业
    2019春第五周作业
  • 原文地址:https://www.cnblogs.com/cnkai/p/7396835.html
Copyright © 2011-2022 走看看