zoukankan      html  css  js  c++  java
  • 选择器提取内容

    1.css选择器

    (1)标签属性值的提取 

    1、href的值URL的提取:这是最常见的,我们要进入下一页、或是打开内容页……都少不了URL值,如下面这段HTML,我们来提取一下里面的URL

    <ol class="page-navigator">
      <li class="current"><a href="http://lab.scrapyd.cn/page/1/">1</a></li>
      <li><a href="http://lab.scrapyd.cn/page/2/">2</a></li>
      <li><a href="http://lab.scrapyd.cn/page/3/">3</a></li>
      <li><a href="http://lab.scrapyd.cn/page/4/">4</a></li>
    </ol>

    提取属性我们是用:“标签名::attr(属性名)”,比如我们要提取url表达式就是:a::attr(href),要提取图片地址的表达式就是:img::attr(src)

    我们想要的只是分页的URL,那这要怎么办?那我们就需要限定一下我们URL的范围,最好的方法就是找到我们要提取目标最近的class或是id,可以看到这段代码中有个class="page-navigator",那我们就可以这样来写:

    response.css(".page-navigator a::attr(href)").extract()

    当这样限定之后,我们发现这就成功提取了我们想要的URL,灰常的完美!随便解释哈上面的:.page-navigator,其中点代表class选择器,如果代码中是:id=“page-navigator”,那我们这里就要写成:“#page-navigator”,大家如果不清楚可以去这里看看:https://www.runoob.com/css/css-id-class.html;

    再来一个提取标签属性的栗子,最常见的就是我们的图片地址,也就是要提取图片的src值,如下面网页:

    <article class="post" itemscope="" itemtype="http://schema.org/BlogPosting">
            <h1 class="post-title" itemprop="name headline"><a itemprop="url" href="http://lab.scrapyd.cn/archives/57.html">中国传世名画</a></h1>
            <div class="post-content" itemprop="articleBody">
                <p>看官,此页面只为爬虫练习使用,都是残卷,若喜欢可以去找点高清版!</p>
                <p><img src="http://lab.scrapyd.cn/usr/uploads/2018/02/3875934880.jpg" alt="1.jpg" title="1.jpg"></p>
                            <p><img src="http://lab.scrapyd.cn/usr/uploads/2018/02/2269613152.jpg" alt="2.jpg" title="2.jpg"></p>
                <p><img src="http://lab.scrapyd.cn/usr/uploads/2018/02/2360992798.jpg" alt="3.jpg" title="3.jpg"></p>
                <p><img src="http://lab.scrapyd.cn/usr/uploads/2018/02/2239103416.jpg" alt="4.jpg" title="4.jpg"></p>
                <p><img src="http://lab.scrapyd.cn/usr/uploads/2018/02/4145232684.jpg" alt="5.jpg" title="5.jpg"></p>        
            </div>
            <p itemprop="keywords" class="tags">标签: <a href="http://lab.scrapyd.cn/tag/%E8%89%BA%E6%9C%AF/">艺术</a>, <a href="http://lab.scrapyd.cn/tag/%E5%90%8D%E7%94%BB/">名画</a></p>
        </article>

    有上面的基础就很简单了:首先找到隔img最近的class或id,可以看到有个:class="post-content",于是我们可以这样写表达式:

    response.css(".post-content img::attr(src)").extract()

    好了上面便是提取标签属性的方法,利用的就是:标签名::attr(属性名),关键点就是如何缩小范围!

    二、标签内容的提取

    如下面这个例子:

    <div class="left">
      scrapy中文网左边
    </div>
    
    <div class="center">
      scrapy中文网中部
    </div>
    
    <div class="right">
      scrapy中文网右侧
    </div>

    我们需要限制哈范围,找到最近的class=“center”,最终表达式如下:

    response.css(".center::text").extract()
    

    这样的话就能正确提取我们想要的内容;下面我们再介绍一个最常用的提取方式:含有嵌套标签文字的提取,HTML如下:

    <div class="post-content" itemprop="articleBody">
      <p>如果你因失去了太阳而流泪,那么你也将失去群星了。 <br>
        If you shed tears when you miss the sun, you also miss the stars. 
       </p>
       <p>
        <a href="http://www.scrapyd.cn">scrapy中文网(</a><a href="http://www.scrapyd.cn">http://www.scrapyd.cn</a>)整理 
       </p>       
     </div>
    

    可以记住用下面的方式:

    response.css(".post-content *::text").extract()
    

    2.xpath提取器

    表达式 描述
    nodename 选取此节点的所有子节点
    / 从根节点选取
    // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
    . 选取当前节点
    .. 选取当前节点的父节点。
    @ 选择属性

    一、提取属性

    class  response.xpath("//ol[@class='page-navigator']//@href").extract()
    id  response.xpath("//ol[@id='page-navigator']//@href").extract()

    二、接下来我们提取标签里面的内容,表达式: //text()

    response.xpath("//ul[@class='tags-list']//a//text()").extract()
    

     特殊的:提取全部文字用string()方法

    response.xpath("string(//div[@class='post-content'])").extract()
    

      

      

  • 相关阅读:
    马肯9450命令回传
    上海公积金社保业务办理
    工厂调试命令总结
    数据库自动备份
    powerDesigner16.5导出word
    winform 打印预览
    winform 页面设计(一)
    梅特勒-托利多 TCS-35 电子台秤
    winform 练习多线程
    ASP.NET Core 3.1使用Swagger API接口文档
  • 原文地址:https://www.cnblogs.com/kwzblog/p/12800289.html
Copyright © 2011-2022 走看看