• scrapy爬虫系列之开头--scrapy知识点


    介绍:Scrapy是一个为了爬取网站数据、提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速抓取。
    Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度。


    0、说明:
      保存数据的方法有4种(json、jsonl、csv、xml),-o 输出指定格式的文件
      scrapy crawl 爬虫名称 -o aa.json
      在编写Spider时,如果返回的不是item对象,可以通过scrapy crawl 爬虫名称 -o aa.json 爬取数据输出到本地,保存为aa.json文件


    1、使用步骤
      1.1 新建项目:scrapy startproject xxx
      1.2 生成爬虫:scrapy genspider aaa "http://www.aaa.com"
      1.3 明确目标:编写items.py,明确要提取的数据
      1.4 编写爬虫:spiders/xx.py,编写爬虫文件,处理请求和响应,以及提取数据(yield item)
      1.5 存储内容:pipelines.py,编写管道文件,处理spider返回的item数据
      1.6 设置配置:settings.py, 启动管道组件,以及其他相关配置
      1.7 执行爬虫:scrapy aaa 爬虫名称

    2、安装:
      pip3 install scrapy

    3、命令
      scrapy bench 测试
      scrapy fetch "http://www.baidu.com" 爬取页面
      scrapy genspider 爬虫名称 'http://www.baidu.com' 生成一个爬虫
      scrapy runspider 运行一个爬虫
      scrapy shell "url地址" 发送完请求后,用shell交互读取响应内容
        response.body 响应体,response.body.decode()
        response.headers 报头
        response.selector Selector对象,此时可以通过response.selector.xpat() 或response.selector.css()来对response进行查询,或者把中间的selector省略也可以使用(新版)
        Selector选择器,有4个基本的方法,最常用xpath
          xpath(),传入xpath表达式,返回该表达式所对应的所有结点的selector list列表,使用方式:response.xpath("表达式")
          extract(),序列化该结点为Unicode字符串并返回列表
          css(),插入css表达式,返回该表达式所对应的所有结点的selector list列表,语法同 bs4
          re(),根据传入的正则表达式进行提取,返回Unicode字符串列表

      scrapy startproject 创建项目
      scrapy list 查看项目下有多少个爬虫

    4、其他
      CrawlSpider

    5、使用pipeline
      可以有多个,为什么要有多个?
        不同的pipeline处理不同的item的内容
        一个spider的内容可能要做不同的操作,比如存入不同的数据库中
      5.1 一个爬虫项目,包含多个爬虫,爬取多个网站,可以建多个Spider
      5.2 当有多个爬虫,一个pipeline时,如何操作不同的数据呢?
        可以在爬虫返回item时,加:item["come_from"] = '网站1',然后在pipeline的process_item方法里进行判断:if item["come_from"] == '网站1': do something
        或者,根据spider.name来进行判断是哪个spider返回的数据

    6、日志logging
      普通用法:
        import logging
        logging.warning()
      scrapy中的用法:
        settings里配置日志级别:LOG_LEVEL = "WARNING"
        settings里配置日志存放位置:LOG_FILE = './log.log' 当前目录
      普通py项目的日志用法
        import logging
        logging.basicConfig(filename='example.log',level=logging.DEBUG) #还有很多参数可以设置
        logger = logging.getLogger(__name__)
        logger.warning("ssssssssss")

  • 相关阅读:
    VS2013 此模板尝试加载组件程序集”NuGet.VisualStudio.interop,Version=1.0.0.0 的解决办法
    备份集中的数据库备份与现有的xx数据库不同”解决方法
    Couchbase 集群小实践
    EF5+MVC4系列(1) Podwerdesigner15.1设计数据库;PD中间表和EF实体模型设计器生成中间表的区别;EF5.0 表关系插入数据(一对多,多对多)
    Vue个人笔记
    [转载] HashMap的工作原理-hashcode和equals的区别
    用VS Code写C#
    MongoDB学习笔记一:MongoDB基础
    Vue学习笔记十三:Vue+Bootstrap+vue-resource从接口获取数据库数据
    Vue学习笔记十二:vue-resource的基本使用
  • 原文地址:https://www.cnblogs.com/bookwed/p/10618002.html
Copyright © 2020-2023  润新知