zoukankan      html  css  js  c++  java
  • Scrapy框架(一)--初识

    scrapy初识
    什么是框架?
      所谓的框架简单通用解释就是就是一个具有很强通用性并且集成了很多功能的项目模板,该模板可被应用在不同的项目需求中。

    也可被视为是一个项目的半成品。

    如何学习框架?
      对于刚接触编程或者初级程序员来讲,对于一个新的框架,只需要掌握该框架的作用及其各个功能的使用和应用即可,对于框架的底层实现和原理,在逐步进阶的过程中在慢慢深入即可。

    什么是scrapy?
      Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。其内部已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)。

    对于框架的学习,重点是要学习其框架的特性、各个功能的用法即可。

    scrapy基本使用

    环境安装:
    linux和mac操作系统:
    pip install scrapy
    windows系统:
    pip install wheel
    下载twisted,下载地址为http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
    安装twisted:pip install Twisted‑17.1.0‑cp36‑cp36m‑win_amd64.whl
    pip install pywin32
    pip install scrapy
    测试:在终端里录入scrapy指令,没有报错即表示安装成功!

    scrapy使用流程
      创建工程:
        scrapy startproject ProName
      进入工程目录:
        cd ProName
      创建爬虫文件:
        scrapy genspider spiderName www.xxx.com
      编写相关操作代码
      执行工程:
        scrapy crawl spiderName

    爬虫文件剖析

      # -*- coding: utf-8 -*-
      import scrapy
      class QiubaiSpider(scrapy.Spider):
          name = 'qiubai' #应用名称
          #允许爬取的域名(如果遇到非该域名的url则爬取不到数据)一般注释掉
          # allowed_domains = ['https://www.qiushibaike.com/']
          #起始爬取的url
          start_urls = ['https://www.qiushibaike.com/']
          #访问起始URL并获取结果后的回调函数,该函数的response参数就是向起始的url发送请求后,获取的响应对象.该函数返回值必须为可迭代对象或者NUll 
          def parse(self, response):
              print(response.text) #获取字符串类型的响应内容
              print(response.body)#获取字节类型的相应内容

    配置文件settings.py修改

      #修改内容及其结果如下:
      #19行:
      USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' #伪装请求载体身份
      22行:ROBOTSTXT_OBEY = False  #可以忽略或者不遵守robots协议
    
      # 打印日志的错误信息
      LOG_LEVEL='ERROR'

    示例:爬取糗事百科的段子数据

    # -*- coding: utf-8 -*-
    import scrapy
    
    class QiushiSpider(scrapy.Spider):
        name = 'qiushi'
        # allowed_domains = ['www.xxx.com']
        start_urls = ['https://www.qiushibaike.com/text/']
    
        def parse(self, response):
            div_list = response.xpath('//div[@class="col1 old-style-col1"]/div')
            all_data = []
            for div in div_list:
                # xpath返回的是列表 列表中是Selector对象
                # extract() 可将对象中的data参数存储的字符串取出
                # author = div.xpath('./div[1]/a[2]/h2/text()')[0].extract()
                author = div.xpath('./div[1]/a[2]/h2/text()').extract_first()  # extract_first()在确定列表只有一个元素的情况下使用
                # 列表调用extract() 将列表中每一个Selector对象的data字符串取出来
                content = div.xpath('./a[1]/div[1]/span//text()').extract()
                content = ''.join(content) # 将列表中的元素拼接成字符串
                
  • 相关阅读:
    由于媒体16摘要天
    vim note (2)
    JEECG 什么是商业版本的功能最近添加的好友?
    图解linux启动过程
    Error: unrecognized flag -version
    基于RDP瘦客户机协议的简要说明
    Android在网络上分析获取图片(支持bmp格式)
    [React] Validate Custom React Component Props with PropTypes
    [Python] Wikipedia Crawler
    [Python] Python list slice syntax fun
  • 原文地址:https://www.cnblogs.com/sxy-blog/p/13215696.html
Copyright © 2011-2022 走看看