scrapy 2.3 鏈接提取器

2021-06-10 15:43 更新

鏈接提取器是從響應(yīng)中提取鏈接的對(duì)象。

這個(gè) ?__init__? 方法 ?LxmlLinkExtractor? 獲取確定可以提取哪些鏈接的設(shè)置。 ?LxmlLinkExtractor.extract_links? 返回匹配的列表 ?Link? 對(duì)象來(lái)自 ?Response? 對(duì)象。

鏈接提取器用于 ?CrawlSpider? 蜘蛛穿過(guò)一組 ?Rule? 物體。

您也可以在普通的spider中使用鏈接提取器。例如,可以實(shí)例化 ?LinkExtractor? 并從spider回調(diào)中使用它:

def parse(self, response):
    for link in self.link_extractor.extract_links(response):
        yield Request(link.url, callback=self.parse)

鏈接提取器引用

鏈接提取器類是 ?scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor? . 為了方便起見(jiàn),它也可以作為 ?scrapy.linkextractors.LinkExtractor? ::

from scrapy.linkextractors import LinkExtractor

LxmlLinkExtractor

classscrapy.linkextractors.lxmlhtml.LxmlLinkExtractor(allow=()deny=()allow_domains=()deny_domains=()deny_extensions=Nonerestrict_xpaths=()restrict_css=()tags='a', 'area'attrs='href'canonicalize=Falseunique=Trueprocess_value=Nonestrip=True)

LXMLlinkextractor是推薦的帶有便捷過(guò)濾選項(xiàng)的鏈接提取程序。它是使用LXML的健壯的HTMLParser實(shí)現(xiàn)的。

參數(shù)
  • allow (str or list) -- (絕對(duì))URL必須匹配才能提取的單個(gè)正則表達(dá)式(或正則表達(dá)式列表)。如果沒(méi)有給定(或?yàn)榭眨?,它將匹配所有鏈接?/p>

  • deny (str or list) -- 一個(gè)單獨(dú)的正則表達(dá)式(或正則表達(dá)式的列表),(絕對(duì))URL必須匹配才能被排除(即不提?。K鼉?yōu)先于 allow 參數(shù)。如果未給定(或?yàn)榭眨瑒t不會(huì)排除任何鏈接。

  • allow_domains (str or list) -- 包含用于提取鏈接的域的單個(gè)值或字符串列表。

  • deny_domains (str or list) -- 包含域的單個(gè)值或字符串列表,這些域不會(huì)被視為提取鏈接的域。

  • deny_extensions (list) -- 提取鏈接時(shí)應(yīng)忽略的包含擴(kuò)展名的字符串的單個(gè)值或列表。如果未給出,則默認(rèn)為 scrapy.linkextractors.IGNORED_EXTENSIONS . .. 版本更改::2.0 IGNORED_EXTENSIONS 現(xiàn)在包括 7z , 7zip , apk , bz2 , cdr , dmg , ico , iso , tar , tar.gz , webm 和 xz .

  • restrict_xpaths (str or list) -- 是一個(gè)xpath(或xpath的列表),它定義響應(yīng)中應(yīng)該從中提取鏈接的區(qū)域。如果給定,則只掃描由這些xpath選擇的文本中的鏈接。見(jiàn)下面的例子。

  • restrict_css (str or list) -- 一個(gè)CSS選擇器(或選擇器列表),它定義響應(yīng)中應(yīng)該從中提取鏈接的區(qū)域。行為與 restrict_xpaths .

  • restrict_text (str or list) -- 鏈接文本必須匹配才能提取的單個(gè)正則表達(dá)式(或正則表達(dá)式列表)。如果沒(méi)有給定(或?yàn)榭眨鼘⑵ヅ渌墟溄?。如果給出了一個(gè)正則表達(dá)式列表,那么如果鏈接與至少一個(gè)匹配,則將提取該鏈接。

  • tags (str or list) -- 提取鏈接時(shí)要考慮的標(biāo)記或標(biāo)記列表。默認(rèn)為 ('a', 'area') .

  • attrs (list) -- 在查找要提取的鏈接時(shí)應(yīng)考慮的屬性或?qū)傩粤斜恚▋H適用于在 tags 參數(shù))。默認(rèn)為 ('href',)

  • canonicalize (bool) -- 規(guī)范化每個(gè)提取的URL(使用w3lib.url.canonicalize_url)。默認(rèn)為 False . 請(qǐng)注意,規(guī)范化URL用于重復(fù)檢查;它可以更改服務(wù)器端可見(jiàn)的URL,因此對(duì)于使用規(guī)范化URL和原始URL的請(qǐng)求,響應(yīng)可能不同。如果您使用linkextractor跟蹤鏈接,那么保持默認(rèn)鏈接更為可靠。 canonicalize=False .

  • unique (bool) -- 是否對(duì)提取的鏈接應(yīng)用重復(fù)篩選。

  • process_value (collections.abc.Callable) -- 一種函數(shù),接收從掃描的標(biāo)記和屬性中提取的每個(gè)值,并能修改該值并返回一個(gè)新值,或返回 None 完全忽略鏈接。如果沒(méi)有給出, process_value 默認(rèn)為 lambda x: x . …h(huán)ighlight::html例如,要從此代碼中提取鏈接,請(qǐng)執(zhí)行以下操作::<a href=“javascript:gotopage('../other/page.html');return false“>link text.<a>。highlight::python您可以在 process_value ::def process_value(value):m=re.search(“javascript:gotopage('(.*?)'”,value)如果m:返回m.group(1)

  • strip (bool) -- 是否從提取的屬性中刪除空白。根據(jù)HTML5標(biāo)準(zhǔn),必須從 href 屬性 <a> , <area> 還有許多其他元素, src 屬性 <img> , <iframe> 元素等,因此linkextractor默認(rèn)情況下會(huì)刪除空格字符。集合 strip=False 關(guān)閉它(例如,如果從允許前導(dǎo)/尾隨空格的元素或?qū)傩灾刑崛RL)。

extract_links(response)

返回的列表 ?Link? 來(lái)自指定的 ?response? .

僅與傳遞給 __init__ 返回鏈接提取器的方法。

重復(fù)鏈接被省略。

鏈接

classscrapy.link.Link(urltext=''fragment=''nofollow=False)

Link對(duì)象表示LinkExtractor提取的鏈接。

使用下面的錨定標(biāo)記示例來(lái)說(shuō)明參數(shù):

<a  rel="external nofollow" target="_blank"  rel="nofollow">Dont follow this one</a>
參數(shù)
  • url -- 在定位標(biāo)記中鏈接到的絕對(duì)url。從樣本來(lái)看,這是 https://example.com/nofollow.html .

  • text -- 錨定標(biāo)記中的文本。從樣本來(lái)看,這是 Dont follow this one .

  • fragment -- url中哈希符號(hào)后面的部分。從樣本來(lái)看,這是 foo .

  • nofollow -- 中存在或不存在nofollow值的指示 rel 定位標(biāo)記的屬性。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)