zoukankan      html  css  js  c++  java
  • 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
      • 基于管道的持久化存储
  • 相关阅读:
    jqGrid 各种参数 详解
    JqGrid自定义(图片)列
    win10以前连接过的wifi密码怎么查看
    C# 文件操作常用方法总结
    js LocalStorage
    list互转datatable 支持Nullable转换
    UVA 515 King
    UVA 558 Wormholes
    UVA 10986 Sending email 最短路问题
    UVA 10801 Lift Hopping 最短路
  • 原文地址:https://www.cnblogs.com/zhufanyu/p/12006751.html
Copyright © 2011-2022 走看看