Home

韧桂

思考,总结

一、Scrapy 命令行详解

1.创建项目

命令行运行

scrapy startproject quotetutorial E:\scrapy_demo

E:\scrapy_demo 目录创建项目 quotetutorial。然后进到项目中,即有 scrapy.cfg 文件的目录:

cd /d E:\scrapy_demo\quotetutorial
-- quotetutorial
    -- scrapy.cfg #指定 settings 路径,deploy 部署相关配置。
    -- quotetutorial
        -- items.py   #保存数据的数据结构
        -- middlewares.py  #爬取过程中定义的中间件,可以处理requests,response,等等操作,可以改一下相关配置。
        -- pipelines.py   #输出
        -- settings.py    #定义配置信息,
        -- spiders
            --quotes.py    #

2.生成 Spider

2.1 创建 spider 。 先输入 spider 名称 (quotes),再输入域名。爬虫名称不能与项目同名。

scrapy genspider quotes quotes.toscrape.com

2.2 列出创建spider所有可用模板

scrapy genspider -l

指定模板生成spider,此命令生成的 spider 多了一些配置。

scrapy genspider -t crawl quotes quotes.toscrape.com

3.运行项目

scrapy crawl quotes
爬取结果输出到指定文件:

scrapy crawl quotes -o quotes.json  # -o 指定输出文件格式。保存成json数据。json格式:用大括号括起来,以字典形式存在     
scrapy crawl quotes -o quotes.jl  #    
scrapy crawl quotes -o quotes.csv    
scrapy crawl quotes -o quotes.xml   
scrapy crawl quotes -o quotes.pickle     
scrapy crawl quotes -o quotes.marshal     
scrapy crawl quotes -o ftp://user:pass@ftp.example.com/path/quotes.csv  #远程ftp保存。后接网址,路径      

4.检查代码是否出错

scrapy check

5.返回所有 spider 名称

scrapy list

更多请求

Link

scrapy shell quotes.toscrape.com  #进入命令行交互模式     
response       

quotes = response.css('.quote')    
quotes     
quotes[0]    
quotes[0].css('.text')    
quotes[0].css('.text::text')    

quotes[0].css('.text::text').extract()      
quotes[0].css('.text').extract()    
quotes[0].css('.text::text').extract_first()    

二、Scrapy 中选择器用法

1.使用选择器

实例:命令行打开

scrapy shell https://docs.scrapy.org/en/latest/_static/selectors-sample1.html

1.1

输入response.selector,selector 是scrapy内置选择器类。

response.selector.xpath('//title/text()')     #返回selector对象的list      
response.selector.xpath('//title/text()').extract_first()  #xpath 选择器。输出文本内容的第一个元素       
response.selector.css('title::text').extract_first(default='')     #selector 可省略,上同。 当选择器查找不到内容时,返回default属性指定内容    

1.2 属性

response.css('a::attr(href)')  #选取属性加 双冒号 加 attr 。     
response.css('a::attr(href)').extract()   #获取属性值 。extract()方法是把selector 变成数据。  

1.3 文本

response.css('a::text')   #选取文本所有信息    
response.xpath('//a/text()').extract()  ##选取文本    

1.4 查找属性值包含 image 的所有超链接

response.xpath('//a[contains(@href, "image")]/@href')    利用contains
response.xpath('//a[contains(@href, "image")]/@href').extract()    

response.css('a[href*=image]::attr(href)')    
response.css('a[href*=image]::attr(href)').extract()   

1.5 选择所有的 a 标签的 image 里面的 src 属性值

response.xpath('//a[contains(@href, "image")]/img/@src').extract()     

response.css('a[href*=image] img::attr(src)').extract()   #css选择器不支持双斜杠     

1.6 正则表达式的匹配

response.css('a::text').re('Name\:(.*)')   #a标签里面的name 冒号后面的值
response.css('a::text').re_first('Name\:(.*)')     #取出第一个
response.css('a::text').re_first('Name\:(.*)').strip()   #strip()方法去掉空格   

更多详细内容

Link

三、 Scrapy 中 spiders 的用法

Link
Link
spider 完成爬虫逻辑和网页数据解析

四、Scrapy 中 Item Pipeline 用法

项目管道。抓取到item 后,需要在 Item Pipeline 对 item 进行进一步处理。
Link
项目管道的典型用途是:

  • 清理HTML数据
  • 验证爬取的数据(检查item包含某些字段)
  • 检查重复项(并删除它们)
  • 将爬取结果保存到数据库中

五、 Scrapy 中 Download Middleware 用法

下载中间件,可以用来改写请求或者出现异常的时候处理异常,另外,还提供其他的功能。
Link

欢迎关注我的公众号:「韧桂」

韧桂 2019-03-02