scrapy异步的爬虫框架简单的使用

scrapy异步的爬虫框架

异步的爬虫框架

  • 高性能的数据解析,持久化存储,全栈数据的爬取,中间件,分布式

  • 框架:就是一个集成好了各种功能且具有很强通用性的一个项目模板。

  • 环境安装:
    Linux:

  pip3 install scrapy

  Windows:

  1. pip3 install wheel

  2. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

  3. 进入下载目录,执行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl

  4. pip3 install pywin32

  5. pip3 install scrapy
  • 基本使用

  • 新建一个工程:

    前提需要将Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl这个文件放在项目目录下

    # 在终端中执行下面这个命令
    scrapy startporject + “项目名”
    
    • settings.py:当前工程的配置文件
    • spiders:爬虫包,必须要存放一个或者多个爬虫文件(.py)
  • 进入项目

    # 在终端中执行
    cd + 项目名
    
  • 创建一个爬虫文件:

    # 在终端中执行:
    scrapy genspider spiderName www.xxx.com
    
    # 命令解析:
    scrapy genspider 爬虫文件名 url
    # 这个url是必写的,不写无法创建文件,可以随意些,最后在文件中修改
    

  • 执行工程:

    # 在终端中执行下面的命令:
    scrapy crawl spiderName
    
    # 执行命令scrapy crawl 加爬虫文件名
    
  • sttings文件中需要配置的:

    settings.py:
    
    - 不遵从robots协议
    	如果选择不遵循robots协议的就修改文件中的
        ROBOTSTXT_OBEY = False   # 将True改为False
        
    - UA伪装
    	将UA伪装的数据加载文件中
        
    - 指定日志输出的类型:
    	将 LOG_LEVEL = 'ERROR' 添加到配置文件中
    
  • 爬虫文件中:

    # -*- coding: utf-8 -*-
    import scrapy
    
    
    class SecondSpidersSpider(scrapy.Spider):
        name = 'second_spiders'
        #允许的域名
        allowed_domains = ['www.123.com']
     
        #起始的url列表:列表元素只可以是url
        #作用:列表元素表示的url就会被进行请求发送
        start_urls = ['http://duanziwang.com/category/%E7%BB%8F%E5%85%B8%E6%AE%B5%E5%AD%90/']
    
        def parse(self, response):
            all_data = []
            article_list = response.xpath('/html/body/section/div/div/main/article')
            for article in article_list:
                # xpath在进行数据提取时,返回的不再是字符串而是一个Selector对象,想要的数据被包含在了该对象的data参数中
    
                title = article.xpath('./div[1]/h1/a/text()').extract_first()
                content = article.xpath('./div[2]//text()').extract()
                content = ''.join(content)
                dic = {
                    'title': title,
                    'content': content
                }
                all_data.append(dic)
            return all_data  # 将解析到的数据进行了返回
    
  • 数据解析:

    • 1.response.xpath('xpath表达式')
    • 2.scrapy中的xpath解析,在进行数据提取的时候,xpath方法返回的列表中存储的不再是字符串,
      而是存储的Selector对象,相关的字符串数据是存储在Selector对象的data参数中,我们必须使用
      extract()/extract_first()进行字符串数据的提取
    • extract():可以作用到列表中的每一个列表元素中,返回的依然是一个列表
    • extract_first():只可以作用到列表中的第一个列表元素中,返回的是字符串
  • 持久化存储

    • 基于终端指令的持久化存储
      • 只可以将parse方法的返回值存储到指定后缀的文本文件中。
      • scrapy crawl spiderName -o ./duanzi.csv
    • 基于管道的持久化存储
原文地址:https://www.cnblogs.com/zhufanyu/p/12006751.html