Scrapy中LinkExtractor的多个链接提取器同时使用示例
发布时间:2023-12-24 18:37:43
Scrapy中的LinkExtractor是用于从网页中提取链接的工具。它可以根据一些规则过滤和提取链接,并且可以同时使用多个链接提取器。下面是一个使用LinkExtractor的示例,同时使用两个链接提取器的情况。
首先,我们需要在Scrapy项目中导入LinkExtractor类。
from scrapy.linkextractors import LinkExtractor
假设我们有一个网页的url为www.example.com,我们想要从中提取所有以"/articles"开头的链接和所有以"/news"开头的链接。
我们可以创建两个LinkExtractor对象,一个用于提取以"/articles"开头的链接,另一个用于提取以"/news"开头的链接。
article_extractor = LinkExtractor(allow=r'/articles') news_extractor = LinkExtractor(allow=r'/news')
其中,allow参数是一个正则表达式,用于匹配链接的url。此处使用了r'/articles'和r'/news',表示在链接的url中,以"/articles"和"/news"开头的链接。
接下来,我们可以使用这两个LinkExtractor对象来提取链接。
from scrapy.http import HtmlResponse
response = HtmlResponse(url="http://www.example.com")
# 使用article_extractor提取链接
article_links = article_extractor.extract_links(response)
for link in article_links:
print(link.url)
# 使用news_extractor提取链接
news_links = news_extractor.extract_links(response)
for link in news_links:
print(link.url)
在上面的例子中,我们首先创建了一个HtmlResponse对象,它模拟了一个网页的响应。然后,我们使用article_extractor提取以"/articles"开头的链接,并打印这些链接的url。接着,我们使用news_extractor提取以"/news"开头的链接,并打印这些链接的url。
通过这种方式,我们可以同时使用多个LinkExtractor对象来提取不同类型的链接。这对于爬取网页中各类链接非常方便,可以根据需要灵活地提取不同类型的URL。
