Python中的scrapy.linkextractors.LinkExtractor()用法
scrapy.linkextractors.LinkExtractor()是scrapy框架中的一个模块,用于从HTML响应中提取链接。它可以根据定义的规则来提取特定的链接,并返回一个Link对象的迭代器。
LinkExtractor类可以接受以下参数:
- allow:接受一个正则表达式或正则表达式列表作为参数,表示匹配链接URL的正则表达式。如果链接与任何一个表达式匹配,则该链接被接受。默认情况下,该参数为None。
- deny:接受一个正则表达式或正则表达式列表作为参数,表示拒绝匹配链接URL的正则表达式。如果链接与任何一个表达式匹配,则该链接被拒绝。默认情况下,该参数为None。
- allow_domains:接受一个域名字符串、字符串列表或正则表达式作为参数。只有链接URL的域名与该参数匹配时,链接才会被接受。默认情况下,该参数为None,表示不限制域名。
- deny_domains:接受一个域名字符串、字符串列表或正则表达式作为参数。只有链接URL的域名与该参数不匹配时,链接才会被接受。默认情况下,该参数为None,表示不限制域名。
- restrict_xpaths:接受XPATH表达式字符串列表,定义了可以提取链接的HTML范围。默认情况下,该参数为None,表示整个HTML页面。
- restrict_css:接受CSS选择器字符串列表,定义了可以提取链接的HTML范围。默认情况下,该参数为None,表示整个HTML页面。
- allow_tags:接受一个HTML标签字符串列表,只有包含在这些标签内的链接才会被接受。默认情况下,该参数为None,表示不限制标签。
- deny_tags:接受一个HTML标签字符串列表,包含在这些标签内的链接会被拒绝。默认情况下,该参数为None,表示不限制标签。
下面是一个使用LinkExtractor类的示例:
import scrapy
from scrapy.linkextractors import LinkExtractor
class MySpider(scrapy.Spider):
name = 'example'
def start_requests(self):
start_urls = ['http://example.com']
for url in start_urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
# 实例化一个LinkExtractor对象,并定义提取规则
link_extractor = LinkExtractor(allow_domains='example.com', restrict_css='.posts')
# 提取链接
links = link_extractor.extract_links(response)
# 处理提取到的链接
for link in links:
print(link.url)
# 继续爬取下一页
next_page_url = response.css('.next_page::attr(href)').get()
if next_page_url:
yield scrapy.Request(url=response.urljoin(next_page_url), callback=self.parse)
在上述示例中,我们定义了一个简单的爬虫,爬取了example.com网站下.posts类中的链接。首先,我们在start_requests方法中指定了要爬取的URL。然后,在parse方法中,我们实例化了一个LinkExtractor对象,并设置了allow_domains和restrict_css参数。接下来,我们使用extract_links方法从响应中提取链接,并通过迭代打印每个链接的URL。最后,我们通过检查是否有下一页的URL,并通过构建新的请求来继续爬取。
这只是LinkExtractor类的一小部分用法示例,更多用法可以参考官方文档。
