Link Extractors
连接提取器从响应中提取链接。
LxmlLinkExtractor
的__init__ 方法获得定义了提取什么样链接的设置,LxmlLinkExtractor.extract_links 返回再响应对象中匹配的scrapy.link.Link对象的列表。
连接提取器再crawlspider爬虫中使用,通过Rule 对象的设置。你也可以再通用爬虫中使用。
Link extractor reference
连接提取器的类是scrapy.linkextractors.lxmlhtml.LxmlLinkExtracotr. 为了简便可以这样导入:
from scrapy.linkextractors import LinkExtractor
LxmlLinkExtractor
class scrapy.linkextractors.lxmlhtml.LxmlLineExtractor(allow=(), deny=(), allow_domains=(), deny_domains=(), deny_extensions=None, restrict_xpaths=(), restrict_css=(), tags='a', 'area', attrs='href', canonicalize=False, unique=True, process_value=None, strip=True)
LxmlLinkExtractor 是推荐的连接提取器,可以处理过滤操作。他的机制是使用强大的lxml的HTMLParser
Parmeters
-
allow (a regular expression (or list of*)*) – 单个正则(或正则的列表),绝对urls必须顺序匹配才可以提取。如果是空,返回所有链接。
-
deny (a regular expression (or list of*)*) – 这个是排除的,优先级高于 allow 参数,如果是空,不会排除任何链接。
-
deny_extensions (list) –
单个值或字符串的列表包含了再提取链接时应该忽略的扩展名。如果为空,默认
scrapy.linkextractors.IGNORED_EXTENSIONS
.Changed in version 2.0:
IGNORED_EXTENSIONS
now includes7z
,7zip
,apk
,bz2
,cdr
,dmg
,ico
,iso
,tar
,tar.gz
,webm
, andxz
. -
restrict_xpaths (str or list) – 一个XPath语法(或列表)定义了在响应中提取的范围,如果给了,只有被这些xpath 选择的文本才会被扫描来提取链接。
-
restrict_css (str or list) – a CSS selector (or list of selectors) which defines regions inside the response where links should be extracted from. Has the same behaviour as
restrict_xpaths
.# 同上 -
restrict_text (a regular expression (or list of*)*) – 单个正则(或列表)来限制提取链接的文本。如果是空,将匹配所有链接,如果是一个列表,只要匹配一个链接就会被提取。
-
tags (str or list) – 当提取连接时考虑的单个标签(或列表)Defaults to
('a', 'area')
-
attrs (list) – 单个属性或列表,在提取连接时考虑的(只对那些在tags 属性中指定标签), Defaults to
('href',)
-
canonicalize (boolean) – 规范化每一个提取的url(使用w3lib.url.canonicalize_url)。默认是False,注意canonicalize_url 用来重复检查;它可以改变服务器端可见的url,所以对规范化的url和原生url,他们的响应式不同的。如果你正在使用linkextractor跟进链接最好不要用这个。
-
unique (boolean) – 是否将重复过滤应用在提取的链接上。
-
process_value (callable) –
一个函数接收从标签和数学扫描并提取的值,可以修改这些值然后返回一个新的,获知返回None忽略所有链接,如果没给,默认是lambda x:x
For example, to extract links from this code:
<a href="javascript:goToPage('../other/page.html'); return false">Link text</a>
You can use the following function in process_value
:
def process_value(value):
m = re.search("javascript:goToPage\('(.*?)'", value)
if m:
return m.group(1)
- strip (boolean) – 是否去掉提取的属性的空格,根据HTML5标准,对<a>的href属性,<area>和很多其他元素,<img>的src属性,<iframe>元素等,开头和结尾的空格必须去掉。设置这个为False 来关闭(例如,如果你想从允许开头/结尾有空格的元素或属性中提取urls。
extract_links
(response)[source]
返回从指定响应中Link 对象的列表。
只有链接匹配传递给连接提取器的__init__方法的设置匹配的才会返回。
重复的链接被省略。