le = LinkExtractor(restrict_css='ul.pager li.next')
links = le.extract_links(response)
使用LinkExtractor的過程:
- 導入LinkExtractor,它是在scrapy中linkextractors中
- 創建一個Linkextractor對象,使用一個或者多個構造器參數描述提取規則,這里傳遞給restrict_css參數一個CSS選擇器表達式。它描述了下一頁鏈接所在的區域(在li.next下)
- 調用LinkExtractor對象的extract_links方法傳入一個response對象,這個方法一句創建對象的時候描述的的提取規則,在這個response對象的頁面中提取鏈接,最終返回一個列表,其中的每一個元素都是個link對象,也就是提取到的鏈接
- 由於頁面中的下一頁鏈接只有一個,因此用links[0]獲取link對象,link對象的url屬性就是鏈接頁面的絕對url地址(無須在調用response.urljoin方法),用它構造request對象並再次提交
描述提取規則
特殊情況:
LinkExtractors構造器的所有的參數都是有默認值的,如果構造對象的時候不傳入任何參數,就會自動提取頁面中的所有的鏈接
LinkExtractor構造器的各個參數:
-
- allow
- 正則表達式或者正則表達式列表,提取絕對url和正則表達式匹配的鏈接,如果為空就會提取所有的鏈接
- deny
- 正則表達式或者正則表達式列表,與allow相反,排除絕對url與正則表達式匹配的鏈接
- allow_domains
- 接受一個域名或者一個域名列表,提取到指定域的鏈接
- deny_domains
- 接受一個域名或者一個域名列表,與allow_domains相反,排除指定域名的鏈接
- restrict_xpaths
- 接收一個xpath表達式或者一個xpath表達式列表,提取xpath表達式中區域下的鏈接
- restrict_css
- 接受一個css選擇器或者css選擇器列表,提取css選擇器中指定區域下的鏈接
- tags
- 接受一個標簽(字符串)或者一個標簽列表,提取指定標簽內的鏈接
- attrs
- 接收一個屬性(字符串)或者一個屬性列表,提取指定區域內的鏈,默認是['href']
- process_value
- 接收一個形如func(value)的回調函數。如果傳遞了該函數,LinkExtractor將會調用這個回調函數對提取的每一個鏈接進行處理,回調函數正常情況下應該返回一個字符串(處理結果),想要拋棄所處理的連接的時候,返回None
- allow