Scrapy中的LinkExtractors详解
Scrapy是一个用于Web爬虫的Python框架,它提供了一系列用于提取链接的工具,其中之一就是LinkExtractors。LinkExtractors可以从网页中提取出符合指定规则的链接,并且可以根据一些选项过滤掉不需要的链接。在本文中,我们将详细介绍Scrapy中的LinkExtractors,并且给出一些使用例子。
LinkExtractors有以下几个常用的选项:
- allow:用于指定一个正则表达式,只有匹配该表达式的链接才会被提取。
- deny:用于指定一个正则表达式,匹配该表达式的链接将被排除在外。
- allow_domains:用于指定一个或多个域名,只有链接的域名在这些指定的域名之内,才会被提取。
- deny_domains:用于指定一个或多个域名,链接的域名在这些指定的域名之内,将被排除在外。
- restrict_xpaths:用于指定一个或多个XPath表达式,在这些 XPath 表达式选中的节点下的链接,才会被提取。
下面是一个使用LinkExtractors的例子:
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
class MySpider(CrawlSpider):
name = 'example'
allowed_domains = ['example.com']
start_urls = ['http://www.example.com']
rules = (
Rule(LinkExtractor(allow=r'/page\d+'), callback='parse_item', follow=True),
)
def parse_item(self, response):
# 在这里处理提取到的链接
pass
上面的例子中,我们创建了一个名为MySpider的爬虫,并在start_urls中指定了启动爬取的入口链接。然后,我们使用了LinkExtractor类来创建一个链接提取器,通过allow=r'/page\d+'指定了链接的正则表达式,只有链接的URL中包含/page并且后跟一个或多个数字的才会被提取。我们还通过callback='parse_item'指定了链接提取器提取到的链接要传递给parse_item方法进行处理。
最后,我们将创建的链接提取器放入了一个Rule对象中,并将该对象放入了rules列表中。通过这样的方式,我们告诉Scrapy,当爬虫从start_urls中的链接开始爬取时,它会根据规则提取所有匹配的链接,并将它们送给parse_item方法进行处理。follow=True表示在提取链接的同时,继续跟进这些链接。
通过使用LinkExtractors,我们不仅可以简单方便地提取出符合指定规则的链接,还可以通过选项进行一些过滤,从而只保留需要的链接。这使得我们能够更加灵活地定制爬虫的行为,提高爬取效率。
