Python 爬虫学习笔记 – 第四周/单元11/Scrapy爬虫基本使用

English Version: https://today2tmr.com/en/2017/07/18/python-spider-study-note-week-fourunit-elevenbasic-use-of-scrapy

Scrapy爬虫的第一个实例

将页面http://python123.io/ws/demo.html存在demo.html文件中。

步骤:

  • STEP 1: 建立Scrapy爬虫工程 scrapy startproject python123demo

     

    • python123demo/: 外层目录
      • scrapy.cfg: 部署Scrapy爬虫的配置文件,将爬虫放在服务器上,配置相关操作接口,本例子不需要改变
      • python123demo/: Scrapy框架的用户自定义Python代码
        • __init__.py: 初始化脚本
        • items.py: Items代码模板(继承类)
        • middlewares.py: Middlewares代码模板(继承类)
        • pipelines.py: Pipelines代码模板(继承类)
        • settings.py: Scrapy爬虫的配置文件
        • spiders/: Spiders代码模板目录(继承类),含工程下的全部爬虫
          • __init__.py: 初始文件,无需修改
          • __pycache__/: 缓存目录,无需修改

  • STEP 2: 生成Scrapy爬虫 scrapy genspider demo python123.io

     

    • demo.py文件内容

     

    • 继承于scrapy.Spider的子类
    • start_urls: 爬取的初始页面
    • parse: 解析页面的方法。用于处理响应,解析内容形成字典,发现新的URL爬取请求
  • STEP 3: 配置产生的spider爬虫,编写demo.py

 

  • STEP 4: 运行爬虫,获取网页。scrapy crawl demo

demo.py的完整版代码

 

yield关键字的使用

yield <==> 生成器

  • 生成器是一个不断产生值的函数
  • 包含yield语句的函数是一个生成器
  • 生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值。
  • 唤醒时使用的局部变量的值与之前的值一致

e.g.

 

普通写法:

 

  • 生成器优势
    1. 更节省存储空间,生成器每次调用只产生一个值
    2. 响应速度更快
    3. 使用更加灵活

Scrapy爬虫的基本使用

  • STEP 1: 创建一个工程和Spider模板
  • STEP 2: 编写Spider
  • STEP 3: 编写Item Pipeline
  • STEP 4: 优化配置策略

Scrapy爬虫的数据类型

  • Request类
    • class scrapy.http.Request()
    • 一个HTTP请求
    • 由Spider生成,由Downloader执行
属性或方法 说明
.url 请求的URL地址
.method 请求方法,’GET’ ‘POST’等
.headers 字典类型风格请求头
.body 请求内容主题,字符串类型
.meta 用户添加的扩展信息,在Scrapy内部模块间传递信息使用
.copy() 复制该请求
  • Response类
    • class scrapy.http.Response()
    • 一个HTTP响应
    • 由Downloader生成,由Spider处理
属性或方法 说明
.url 响应的URL地址
.status HTTP状态码,默认为200(成功)
.headers Response头部信息
.body Response内容信息,字符串类型
.flags 一组标记
.request 对应的Request对象
.copy() 复制该响应
  • Item类
    • class scrapy.item.Item()
    • 从HTML页面中提取的信息内容
    • 由Spider生成,由Item Pipelines处理
    • 类似字典类型,可按照字典类型操作

Scrapy爬虫信息提取方法

主要运用在Spider模块下

  • Beautiful Soup
  • lxml
  • re
  • XPath Selector
  • CSS Selector

CSS Selector

  • <HTML>.css('a::attr(href)').extract()
  • 通过标签名称和标签属性获得标签信息

单元小结

  • Scrapy实例与目录结构
  • yield关键字和生成器
  • Request类、Response类、Item类
  • CSS Selector的基本使用

Leave a Reply

Your email address will not be published.