Scrapy(六)之Selector選擇器

2021-09-19 23:37:34 字數 3375 閱讀 9794

當我們取得了網頁的response之後,最關鍵的就是如何從繁雜的網頁中把我們需要的資料提取出來,python從網頁中提取資料的包很多,常用的有下面的幾個:

你可以在scrapy中使用任意你熟悉的網頁資料提取工具,但是,scrapy本身也為我們提供了一套提取資料的機制,我們稱之為選擇器(seletors),他們通過特定的 xpath 或者 css 表示式來「選擇」 html檔案中的某個部分。xpath 是一門用來在xml檔案中選擇節點的語言,也可以用在html上。 css 是一門將html文件樣式化的語言。選擇器由它定義,並與特定的html元素的樣式相關連。

scrapy選擇器構建於 lxml 庫之上,這意味著它們在速度和解析準確性上非常相似。下面我們來了解scrapy選擇器。

import scrapy

from scrapy.selector import selector

class

cnblog_spider

(scrapy.spider)

: name =

"cnblog"

allowed_domains =

["cnblogs.com"

] start_urls =

['',]

defparse

(self, response)

: selector = selector(response=response)

title = selector.xpath(

'//a[@class="titlelnk"]/text()'

).extract(

) link = selector.xpath(

'//a[@class="titlelnk"]/@href'

).extract(

) read = selector.xpath(

'//span[@class="article_comment"]/a/text()'

).extract(

) comment = selector.xpath(

'//span[@class="article_view"]/a/text()'

).extract(

)print

('這是title:'

,title)

print

(, link)

print

('這是閱讀數'

, read)

print

(, comment)

選擇器的使用可以分為下面的三步:

匯入選擇器from scrapy.selector import selector

建立選擇器例項selector = selector(response=response)

使用選擇器selector.xpath()或者selector.css()

當然你可以使用xpath或者css中的任意一種或者組合使用,怎麼方便怎麼來,至於xpath和css語法,你可以去額外學習,仔細觀察,你會發現每個選擇器最後都有乙個extract(),你可以嘗試去掉這個看一下,區別在於,當你沒有使用extract()的時候,提取出來的內容依然具有選擇器屬性,簡而言之,你可以繼續使用裡面的內容進行提取下級內容,而當你使用了extract()之後,提取出來的內容就會變成字串格式了。我們進行多級提取的時候,這會很有用。值得注意的是,選擇器提取出來的內容是放在列表裡面的,即使沒有內容,那也是乙個空列表,下面我們執行這個爬蟲,你會發現內容已經被提取出來了。

事實上,我們可以完全不用那麼麻煩,因為scrapy為我們提供了選擇器的簡易用法,當我們需要選擇器的時候,只要一步就可以了,如下:

import scrapy

class

cnblog_spider

(scrapy.spider)

: name =

"cnblog"

allowed_domains =

["cnblogs.com"

] start_urls =

['',]

defparse

(self, response)

: title = response.xpath(

'//a[@class="titlelnk"]/text()'

).extract(

) link = response.xpath(

'//a[@class="titlelnk"]/@href'

).extract(

) read = response.xpath(

'//span[@class="article_comment"]/a/text()'

).extract(

) comment = response.xpath(

'//span[@class="article_view"]/a/text()'

).extract(

)print

('這是title:'

, title)

print

(, link)

print

('這是閱讀數'

, read)

print

(, comment)

可以看到,我們直接使用response.xpath()就可以了,並沒有匯入什麼,例項化什麼,可以說非常方便了,當然直接response.css()一樣可以。

scrapy為我們提供的選擇器還有一些其他的特點,這裡我們簡單的列舉

import scrapy

class

cnblog_spider

(scrapy.spider)

: name =

"cnblog"

allowed_domains =

["cnblogs.com"

] start_urls =

['',]

defparse

(self, response)

: read = response.xpath(

'//span[@class="article_comment"]/a/text()'

).re(

'\d+'

) comment = response.xpath(

'//span[@class="article_view"]/a/text()'

).re(

'\d+'

)print

('這是閱讀數'

, read)

print

(, comment)

執行一下,可以看到,效果就出來了。

**:cnkai/p/7398970.html

scrapy(六)(未整理完)

import scrapy from scrapy.pipelines.images import imagespipeline from scrapy.exceptions import dropitem class myimagespipeline imagespipeline def get ...

scrapy之環境安裝

在之前我安裝了scrapy,但是在pycharm中卻無法使用。具體情況是 我的電腦上存在多個python,有python2,python3,anaconda,其中anaconda中的python為python3。我在powershell中直接鍵入scrapy可以使用。解決 我在網上找了很多解決方案,...

Scrapy爬蟲入門教程六 Items(專案)

python版本管理 pyenv和pyenv virtualenv scrapy爬蟲入門教程一 安裝和基本使用 scrapy爬蟲入門教程二 官方提供demo scrapy爬蟲入門教程三 命令列工具介紹和示例 scrapy爬蟲入門教程四 spider 爬蟲 scrapy爬蟲入門教程五 selector...