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
    • 基于管道的持久化存储

scrapy异步的爬虫框架简单的使用的更多相关文章

  1. 使用Scrapy爬虫框架简单爬取图片并保存本地(妹子图)

    初学Scrapy,实现爬取网络图片并保存本地功能 一.先看最终效果 保存在F:\pics文件夹下 二.安装scrapy 1.python的安装就不说了,我用的python2.7,执行命令pip ins ...

  2. 一篇文章教会你理解Scrapy网络爬虫框架的工作原理和数据采集过程

    今天小编给大家详细的讲解一下Scrapy爬虫框架,希望对大家的学习有帮助. 1.Scrapy爬虫框架 Scrapy是一个使用Python编程语言编写的爬虫框架,任何人都可以根据自己的需求进行修改,并且 ...

  3. python网络爬虫(14)使用Scrapy搭建爬虫框架

    目的意义 爬虫框架也许能简化工作量,提高效率等.scrapy是一款方便好用,拓展方便的框架. 本文将使用scrapy框架,示例爬取自己博客中的文章内容. 说明 学习和模仿来源:https://book ...

  4. 『Scrapy』爬虫框架入门

    框架结构 引擎:处于中央位置协调工作的模块 spiders:生成需求url直接处理响应的单元 调度器:生成url队列(包括去重等) 下载器:直接和互联网打交道的单元 管道:持久化存储的单元 框架安装 ...

  5. Scrapy网络爬虫框架的开发使用

    1.安装 2.使用scrapy startproject  project_name 命令创建scrapy项目 如图: 3.根据提示使用scrapy genspider spider_name dom ...

  6. 网络爬虫框架Scrapy简介

    作者: 黄进(QQ:7149101) 一. 网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本:它是一个自动提取网页的程序,它为搜索引擎从万维 ...

  7. [原创]一款基于Reactor线程模型的java网络爬虫框架

    AJSprider 概述 AJSprider是笔者基于Reactor线程模式+Jsoup+HttpClient封装的一款轻量级java多线程网络爬虫框架,简单上手,小白也能玩爬虫, 使用本框架,只需要 ...

  8. Python之Scrapy爬虫框架安装及简单使用

    题记:早已听闻python爬虫框架的大名.近些天学习了下其中的Scrapy爬虫框架,将自己理解的跟大家分享.有表述不当之处,望大神们斧正. 一.初窥Scrapy Scrapy是一个为了爬取网站数据,提 ...

  9. 教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

    本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scr ...

随机推荐

  1. docker 安装es跟kibana

    首先docker 查询es docker search  elasticsearch 在docker pull elasticsearch:7.9.3 docker在查询 kibana docker ...

  2. Liunx运维(五)-信息显示与搜索文件命令

    文档目录: 一.uname:显示系统信息 二.hostname:显示或设置系统的主机名 三.dmesg:系统启动异常诊断 四.stat:显示文件或文件系统状态 五.du:统计磁盘空间使用情况 六.da ...

  3. 仙剑4CPK加密解密算法(转)

    // RSTEncDec.h: interface for the CRSTEncDec class. // ///////////////////////////////////////////// ...

  4. Java基础进阶:时间类要点摘要,时间Date类实现格式化与解析源码实现详解,LocalDateTime时间类格式化与解析源码实现详解,Period,Duration获取时间间隔与源码实现,程序异常解析与处理方式

    要点摘要 课堂笔记 日期相关 JDK7 日期类-Date 概述 表示一个时间点对象,这个时间点是以1970年1月1日为参考点; 作用 可以通过该类的对象,表示一个时间,并面向对象操作时间; 构造方法 ...

  5. Java JVM——5.Java虚拟机栈

    虚拟机栈概述 由于跨平台性的设计,Java 的指令都是根据栈来设计的.不同平台CPU架构不同,所以不能设计为基于寄存器的. 栈实现的优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功 ...

  6. Centos7路由设置

    再添加路由时,很多时候都是采用命令行用route添加的.但是在机器重启后.就失效了.这里也是参考了几位博主的经验 作出以下记载 一:路由表常用设置 1.route命令路由表常用设置: //添加到主机的 ...

  7. C#中RDLC控制某列的显示隐藏

    使用 1.添加参数IsEnable(用于控制显示或隐藏)2.在RDLC页面,需要控制的列上,右键,列的可见性...,基于表达式隐藏或显示3.输入 IIF(Parameters!IsEnable.Val ...

  8. 解决Windows2019登录黑屏问题

    打开服务 停止App Readiness服务并禁用即可恢复正常

  9. HashMap知识点总结,这一篇算是总结的不错的了,建议看看!

    HashMap存储结构 内部包含了⼀个 Entry 类型的数组 Entry[] table.transient Entry[] table;(transient:表示不能被序列化)Entry类型存储着 ...

  10. statementType 使用

    要实现动态传入表名.列名,需要做如下修改 添加属性statementType="STATEMENT" 同时sql里的属有变量取值都改成${xxxx},而不是#{xxx}<de ...