Scrapy - 連結提取器



描述

顧名思義,連結提取器是用於使用scrapy.http.Response物件從網頁中提取連結的物件。在 Scrapy 中,有一些內建的提取器,例如scrapy.linkextractors匯入LinkExtractor。您可以透過實現一個簡單的介面來根據自己的需要自定義自己的連結提取器。

每個連結提取器都有一個名為extract_links的公共方法,它包含一個Response物件並返回一個scrapy.link.Link物件的列表。您可以只例項化一次連結提取器,並多次呼叫extract_links方法以使用不同的響應提取連結。CrawlSpider類使用連結提取器和一組規則,其主要目的是提取連結。

內建連結提取器參考

通常,連結提取器與 Scrapy 捆綁在一起,並在scrapy.linkextractors模組中提供。預設情況下,連結提取器將是LinkExtractor,其功能等同於LxmlLinkExtractor -

from scrapy.linkextractors import LinkExtractor

LxmlLinkExtractor

class scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor(allow = (), deny = (), 
   allow_domains = (), deny_domains = (), deny_extensions = None, restrict_xpaths = (), 
   restrict_css = (), tags = ('a', 'area'), attrs = ('href', ), 
   canonicalize = True, unique = True, process_value = None)

LxmlLinkExtractor是一個強烈推薦的連結提取器,因為它具有方便的過濾選項,並且與lxml的強大HTMLParser一起使用。

序號 引數 & 描述
1

allow(正則表示式(或列表))

它允許一個表示式或一組表示式與要提取的URL匹配。如果未提及,它將匹配所有連結。

2

deny(正則表示式(或列表))

它阻止或排除一個表示式或一組表示式,這些表示式不應與要提取的URL匹配。如果未提及或留空,則不會消除不需要的連結。

3

allow_domains(字串或列表)

它允許一個字串或字串列表,這些字串應與要從中提取連結的域名匹配。

4

deny_domains(字串或列表)

它阻止或排除一個字串或字串列表,這些字串應與不應從中提取連結的域名匹配。

5

deny_extensions(列表)

在提取連結時,它會阻止帶有副檔名的字串列表。如果未設定,則預設情況下它將設定為IGNORED_EXTENSIONS,其中包含scrapy.linkextractors包中的預定義列表。

6

restrict_xpaths(字串或列表)

它是從響應中提取連結的XPath區域列表。如果給出,則僅從XPath選擇的文字中提取連結。

7

restrict_css(字串或列表)

它的行為類似於restrict_xpaths引數,它將從響應內的CSS選擇區域提取連結。

8

tags(字串或列表)

提取連結時應考慮的單個標籤或標籤列表。預設情況下,它將為(’a’,’area’)。

9

attrs(列表)

提取連結時應考慮的單個屬性或屬性列表。預設情況下,它將為(’href’,)。

10

canonicalize(布林值)

使用scrapy.utils.url.canonicalize_url將提取的URL轉換為標準格式。預設情況下,它將為True。

11

unique(布林值)

如果提取的連結重複,它將被使用。

12

process_value(可呼叫物件)

它是一個函式,它接收來自掃描的標籤和屬性的值。接收到的值可能會被更改和返回,或者什麼也不返回以拒絕連結。如果未使用,則預設情況下它將為lambda x: x。

示例

以下程式碼用於提取連結 -

<a href = "javascript:goToPage('../other/page.html'); return false">Link text</a>

以下程式碼函式可用於process_value -

def process_value(val): 
   m = re.search("javascript:goToPage\('(.*?)'", val) 
   if m: 
      return m.group(1) 
廣告