Scrapy中LinkExtractor的URL匹配规则介绍
在Scrapy中,LinkExtractor是用于提取URL的一个类。它能够根据一定的规则从HTML文本中提取出符合条件的URL,并作为链接返回。LinkExtractor可以在Scrapy的Spider类中被使用。
LinkExtractor的主要参数有:allow,deny,allow_domains,deny_domains,restrict_xpaths和restrict_css。
1. allow:是一个正则表达式,用来匹配URL,只有匹配成功的URL才会被提取。
例如,我们设置allow为r'/news/.*',则只有以/news/开头的链接才会被提取。
2. deny:是一个正则表达式,用来排除一些URL,匹配成功的URL将不会被提取。
例如,我们设置deny为r'/news/.*$',则以/news/开头的链接将不会被提取。
3. allow_domains:是一个列表,用来指定仅提取特定域名下的链接。
例如,我们设置allow_domains为['example.com'],则只会提取example.com域名下的链接。
4. deny_domains:是一个列表,用来指定不提取特定域名下的链接。
例如,我们设置deny_domains为['example.com'],则不会提取example.com域名下的链接。
5. restrict_xpaths:是一个XPath表达式或者是由XPath表达式组成的列表,用来指定在哪些XPath表达式匹配到的节点中提取链接。
例如,我们设置restrict_xpaths为['//div[@class="news"]'],则只会在class为news的div节点中提取链接。
6. restrict_css:是一个CSS选择器或者是由CSS选择器组成的列表,用来指定在哪些CSS选择器匹配到的节点中提取链接。
例如,我们设置restrict_css为['div.news'],则只会在class为news的div节点中提取链接。
下面是一个使用LinkExtractor的实例:
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import Spider
class MySpider(Spider):
name = 'example'
allowed_domains = ['example.com']
start_urls = ['http://www.example.com']
def parse(self, response):
# 创建一个LinkExtractor对象,提取满足规则的链接
le = LinkExtractor(allow=r'/news/.*')
# 使用LinkExtractor提取链接并进行处理
for link in le.extract_links(response):
yield {
'url': link.url,
'text': link.text
}
以上代码中,我们首先导入了LinkExtractor类和Spider类。然后定义了一个继承自Spider类的自定义Spider类MySpider。在这个类中,我们指定了Spider的名称、允许的域名和起始URL。
在parse方法中,我们创建了一个LinkExtractor对象,并通过allow参数设置了链接提取的规则。然后使用extract_links方法提取链接,并进行处理,将链接的URL和文本内容保存为字典,并使用yield关键字返回。
总之,LinkExtractor是Scrapy中一个非常有用的类,可以根据设置的规则从HTML文本中提取URL,并且可以根据需要灵活地进行定制。通过合理地使用LinkExtractor,可以使爬虫的链接提取过程更加高效、准确。
