scrapy框架(二)(未整理完)

Scrapy shell

  • Scrapy shell是用来调试scrapy项目代码的命令行工具
  • 启动的时候预定义了scrapy的一些对象
  • 作用:调试

设置shell

  • scrapy的shell是基于运行环境中的Python解释器shell
  • 本质上就是通过命令调用shell,并在启动的时候预定义需要使用的对象
  • scrapy允许通过在项目配置文件“scrapy.cfg”中进行配置来制定解释器shell
    例如:[settings]
    shell = ipython

启动shell

  • 启动scrapy shell的命令语法格式如下:
    scrapy shell [url|file]
    如:scrapy shell hr.tencent.com
  • url 就是你想要爬取的网址
  • 注意:分析本地文件时一定要带上路径,scrapy shell默认当做url
    #如果用scrapy genspider 名 url创建过,scrapy shell 即可,可以不用网址

常用操作方法

  • scrapy shell本质上就是个普通的Python shell,只不过提供了一些需要使用的对象,快捷方法便于我们调试
  • 快捷方法:
    • shelp():帮助查看scrapy shell操作方法的
      scrapy框架(二)(未整理完)
    • req = ‘请求的url’
      fetch(req)
    • fetch(‘请求的url’) 效果同上两步
    • view(response)
  • scrapy对象:
    • crawler
    • spider
    • request
    • response
    • settings

Scrapy选择器

  • scrapy提供基于lxml库的解析机制,他们被称为选择器,因为他们“选择”由xpath或css表达式指定的HTML文档的某部分
  • scrapy选择器的API非常小,而且非常简单

构造选择器

  • scrapy 选择器是通过scrapy.Selector类,通过传递文本或者TextResponse对象构造的实例
  • 他会根据输入类型自动选择最佳解析规则XML与HTML
    In [3]: from scrapy.selector import Selector
    In [4]: from scrapy.http import HtmlResponse
    #从文本构造
    In [5]: body = “good
    In [6]: select = Selector(text=body)
    #从响应构造
    In [7]: response = HtmlResponse(url=‘http://example.com’,body=body,encoding=‘utf-8’)
    In [8]: select1 = Selector(response=response)
    #为了方便,响应对象在selector属性上公开选择器
    #在可能的情况下使用此快捷方式完全可以的
    In [9]: response.selector.xpath(’//div’)
    Out[9]: [ ]
    In [10]: print(isinstance(response.selector,Selector))
    True

使用选择器

  • 选择器提供两个方法俩提取标签
    • xpath() 基于xpath的语法规则
    • css() 基于css选择器的语法规则
  • 快捷方式
    • response.xpath()
    • response.css()
  • 他们返回的选择器列表
  • 提取文本:
  • selector.extract() 返回文本列表
  • selector.extract_first() 返回第一个selector的文本,没有返回None
  • 可以设置default

嵌套选择器

  • 有时候我们获取标签需要多次调用选择方法(.xpath()或.css())
  • response.css(“img”).xpath("@src")
  • selector还有一个.re()方法使用正则表达式提取数据的方法
  • 他返回字符串
  • 他一般使用在xpath(),css()方法之后,用来过滤文本数据
  • re_first()用来返回第一个匹配的字符串如
    response.xpath(’//a[contains(@href,“image”)]/text()’).re(r’Name:\s*(.*)’]

scrapy.Spider

运行流程

  1. 首先生成初始请求以爬取第一个url,并指定要使用从这些请求下载的响应调用的回调函数
  2. 在回调函数中,解析响应(网页)并返回,item对象,request对象或这些对象的可迭代的dicts
  3. 在回调函数中,通常使用选择器解析页面内容(但你也可以使用BeautifulSoup,lxml或你喜欢的任何机制)并使用解析的数据生成item
  4. 最后从spider返回的项目通常会持久保存到数据库(在某些项目管道中)或使用Feed导出写入文件