《精通Scrapy網路爬蟲》第三章

2021-09-13 12:21:06 字數 2135 閱讀 6407

xpath

css選擇器

從頁面中提取資料的核心技術是http文字解析,在python中常用beautiful和lxml模組處理此類問題。scrapy綜合上述兩者優點實現了selector類,它是基於lxml庫構建的。selector類的實現位於scrapy.selector模組。

selector的使用

建立物件

建立selector物件時,有兩種方法,一是可將頁面的html文件字串傳遞給selector構造方法的text引數,,例如:

selector = selector(text=text)

二是使用乙個response物件構造selector物件,將其傳遞給selector構造器方法的response引數,例如:

response = htmlrespone(url='',body=body,encoding='utf-8')

selector = selector(response=response)

選中資料

呼叫selector物件的xpath方法或css方法會返回selectorlist物件,selectorlist支援列表介面,可用for語句迭代訪問其中的每乙個selector物件。

selector_list = selector.xpath('//h1')

for sel in selector_list:

print(sel.xpath('./text()'))

提取資料

呼叫selector或者selectorlist物件的以下方法可將選中的內容提取:

在實際開發中,我們直接使用response物件內建的selector物件。response物件還提供了xpath和css方法,它們在內部分別呼叫內建selector物件的xpath和css方法,可使用快捷方式。

response.xpath('.//h1/text()').extract()

response.css('li::text').extract()

xpath即xml路徑語言,它是一種用來確定xml文件中某部分位置的語言。

xml文件的節點有多種型別,最常用的如下:

節點間的關係:

基礎語法

表示式描述

/選中文件的根

.選中當前節點

…選中當前節點的父節點

element

選中子節點中所有element元素節點

//element

選中h後代節點中所有element元素節點

*選中所有元素子節點

text()

選中所有文字子節點

@attr

選中名為attr的屬性節點

@*選中所有屬性節點

[謂語]

謂語用來查詢某個特定的節點或者包含某個特定值的節點

常用函式

css即層疊樣式表,其 選擇器是一種用來確定html文件中某部分位置的語言。

基本語法

表示式描述

*選中所有元素

e選中e元素

e1,e2

選中e1和e2元素

e1 e2

選中e1後代元素中的e2元素

e1>e2

選中e1子元素中的e2元素

e1+e2

選中e1兄弟元素中的e2元素

.class

選中class屬性包含class的元素

#id選中id屬性為id的元素

[attr]

選中包含attr屬性的元素

[attr=value]

選中包含attr屬性且值為value的元素

[attr~=value]

選中包含attr屬性且值包含value的元素

e:nth-child(n)(e:nth-last-child(n))

選中e元素,且該元素必須是其父元素的(倒數)第n個子元素

e:first-child(e:last-child)

選中e元素,且該元素必須是其父元素的(倒數)第乙個子元素

e:empty

選中沒有子元素的e元素

e::text

選中e元素的文字節點(text node)

unix 網路程式設計 第三章

包裹函式 就是對有錯誤返回值的函式的封裝。在unix網路程式設計中用大寫表示。err sys 必須要errno 的值才能輸出錯誤?執行緒函式遇到錯誤的時候 不設定errno的值,而是把error的值作為函式的返回值。必須檢查某個確定的錯誤,並處理它,而不是終止程序執行。unix errno 值 每當...

第三章 堆疊

1.基礎知識 堆疊可以實現很多的應用,遞迴的問題轉化成非遞迴形式,在本質上也是堆疊的問題.它是一種 filo 操作的資料結構,一般也有兩種儲存方式 陣列跟鍊錶實現形式,這裡我給出了鍊錶形式的堆疊模板,裡面包括了基本的堆疊所有的操作,還有兩個比較著名的應用例子,時間倉促,精力比較有限,關於迷宮老鼠還沒...

第三章 曙光

第三章 曙光 第二場校園招聘開始了。其實,洋對這個公司的不是很了解。因為前幾天突然在bbs上面看到了這個公司的招聘資訊,洋覺得這個公司不錯,就上網投了簡歷。接下來的乙個多小時,讓洋很震撼!想不到這個公司這個厲害,而且無論從哪方面來說,絕對不比之前的那個公司差。想不到自己的乙個不經意的決定到了這個大的...