爬蟲Scrapy框架之css選擇器如何使用

這篇文章將為大家詳細講解有關爬蟲Scrapy框架之css選擇器如何使用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)是一家集網站建設,王屋企業(yè)網站建設,王屋品牌網站建設,網站定制,王屋網站建設報價,網絡營銷,網絡優(yōu)化,王屋網站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網站。

css選擇器介紹

  • 在css中選擇器是一種模式,用于選擇需要添加樣式的元素,css對html頁面中的元素實現一對一,一對多或者多對一的控制,都需要用到css選擇器,html頁面中的元素就是通過css選擇器進行控制的;

css選擇器的基本語法

  • 類選擇器:元素的class屬性,比如class="box"表示選取class為box的元素;

  • ID選擇器:元素的id屬性,比如id="box"表示選取id為box的元素;

  • 元素選擇器:直接選擇文檔元素,比如p表示選擇所有的p元素,div表示選擇所有的div元素;

  • 屬性選擇器:選擇具有某個屬性的元素,如*[title]表示選擇所有包含title屬性的元素、a[href]表示選擇所有帶有href屬性的a元素等;

  • 后代選擇器:選擇包含元素后代的元素,如li a表示選取所有l(wèi)i 下所有a元素;

  • 子元素選擇器:選擇作為某元素子元素的元素,如h2 > strong表示選擇父元素為h2 的所有 strong 元素;

  • 相鄰兄弟選擇器:選擇緊接在另一元素后的元素,且二者有相同父元素,如h2 + p表示選擇緊接在 h2 元素之后的所有p元素;

scrapy 中的css使用方法

以a元素來舉例說明

  • response.css('a'):返回的是selector對象;

  • response.css('a').extract():返回的是a標簽對象;

  • response.css('a::text').extract_first():返回的是第一個a標簽中文本的值;

  • response.css('a::attr(href)').extract_first():返回的是第一個a標簽中href屬性的值;

  • response.css('a[href*=image]::attr(href)').extract():返回所有a標簽中href屬性包含image的值;

  • response.css('a[href*=image] img::attr(src)').extract():返回所有a標簽下image標簽的src屬性;

表達式書寫方式表達式意義
#box選取id為box的元素
.box選取class為box的元素
p選擇所有 p 元素
div img選取div下的img元素
div,img選擇所有 div 元素和所有 img 元素
div#box選取 id為box的div元素
div>p選擇父元素為 div 元素的所有 p 元素
[title~=flower]選擇 title 屬性包含單詞 “flower” 的所有元素
a[href=”/page/2”]選取href屬性為/page/2的a元素
a[href^=”/page”]選取href屬性以/page開頭的a元素
a[href$=”.png”]選取href屬性以png結尾的a元素
  • 上一節(jié)中我們使用XPATH選擇器獲取了csdn中今日推薦的標題,現在我們用CSS選擇器來試著獲取一下

# -*- coding: utf-8 -*-
import scrapy
class CsDNSpider(scrapy.Spider):
    name = 'csdn'
    allowed_domains = ['www.csdn.net']
    start_urls = ['http://www.csdn.net/']
    def parse(self, response):
       result = response.css('.company_list .company_name a::text').extract()
       for i in result:
           print(i)
  • 我們來看一下代碼的運行結果,看是否能獲取到我們想要的信息;

爬蟲Scrapy框架之css選擇器如何使用

獲取元素的跳轉鏈接和圖片地址

  • 首先可以使用css選擇器提取元素的跳轉鏈接和圖片的src地址,這里需要用到urllib庫中的parse.urljoin()方法,用它來拼接獲取到的元素中的路徑,使之變?yōu)榻^對路徑;
    urljoin(baes,url[,allow_frafments]),其中參數base作為基地址,與第二個參數為相對路徑的url相結合,組成一個絕對URl地址,其中參數allow_fragments可根據自己的需求設置;

import scrapy
from urllib import parse
class DribbbleSpider(scrapy.Spider):
    name = 'dribbble'
    allowed_domains = ['dribbble.com']
    start_urls = ['http://dribbble.com/']
    def parse(self, response):
        a_href = response.css('.dribbble-shot .dribbble-over::attr(href)').extract_first("")
        href = parse.urljoin(response.url, a_href)
        print(a_href)
        print(href)
import scrapy
from urllib import parse
class DribbbleSpider(scrapy.Spider):
    name = 'dribbble'
    allowed_domains = ['dribbble.com']
    start_urls = ['http://dribbble.com/']
    def parse(self, response):
        image_src = response.css('img.enrique-image::attr(src)').extract_first("")
        src = parse.urljoin(response.url, image_src)
        print(image_src)
        print(src)
  • 下載且保存圖片到本地

import scrapy
from urllib import parse
import requests
class DribbbleSpider(scrapy.Spider):
    name = 'dribbble'
    allowed_domains = ['dribbble.com']
    start_urls = ['http://dribbble.com/']
    def parse(self, response):
        image_src = response.css('img.enrique-image::attr(src)').extract_first("")
        src = parse.urljoin(response.url, image_src)
        ret = requests.get(src, stream=True)
        with open('./1.png', 'wb') as f:
            for block in ret.iter_content(chunk_size=1024):
                f.write(block)

如何快速獲取頁面中的元素

  • 獲取xpath選擇器的元素:選擇標簽->鼠標右鍵->copy->Copy XPath;

爬蟲Scrapy框架之css選擇器如何使用

  • 獲取css選擇器的元素:可以使用第三方插件Chrome的開發(fā)者調試工具獲取,需要下載CSS Select插件->然后直接選擇標簽元素;

爬蟲Scrapy框架之css選擇器如何使用

關于“爬蟲Scrapy框架之css選擇器如何使用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

當前文章:爬蟲Scrapy框架之css選擇器如何使用
文章分享:http://muchs.cn/article18/pjpddp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供外貿建站、企業(yè)建站、自適應網站移動網站建設、搜索引擎優(yōu)化、商城網站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網站優(yōu)化