使用scrapy.linkextractors.LinkExtractor()提取链接
scrapy.linkextractors.LinkExtractor是一个Scrapy的链接提取器,用于从页面中提取符合特定规则的链接。该类可以用于提取HTML文档中的链接,也可以用于提取XML文件中的链接。
LinkExtractor接受一些参数,用于指定提取链接的规则。常用的参数有:
- allow:一个正则表达式或正则表达式列表,用于指定链接的URL必须满足的规则。只有链接的URL与allow参数中的正则表达式匹配时,该链接才会被提取。
- deny:一个正则表达式或正则表达式列表,用于指定链接的URL必须不满足的规则。只有链接的URL与deny参数中的正则表达式都没有匹配时,该链接才会被提取。
- allow_domains:一个域名字符串或一个域名字符串列表,用于指定链接的URL必须属于哪个域名。只有链接的域名在allow_domains参数中时,该链接才会被提取。
- deny_domains:一个域名字符串或一个域名字符串列表,用于指定链接的URL必须不属于哪个域名。只有链接的域名不在deny_domains参数中时,该链接才会被提取。
下面是一个使用LinkExtractor提取链接的简单例子:
import scrapy
from scrapy.linkextractors import LinkExtractor
class MySpider(scrapy.Spider):
name = 'my_spider'
start_urls = ['http://example.com']
def parse(self, response):
# 实例化一个LinkExtractor对象,指定匹配规则
# 该规则会提取所有以example.com开头的链接
extractor = LinkExtractor(allow=r'http://example.com/.*')
# 使用提取器提取链接
links = extractor.extract_links(response)
# 遍历提取到的链接
for link in links:
# 输出链接的URL
print(link.url)
# 可以从链接中提取其他信息,并继续爬取
yield scrapy.Request(link.url, callback=self.parse_other_page)
def parse_other_page(self, response):
# 提取其他页面的信息
# ...
在上面的例子中,首先实例化一个LinkExtractor对象,并使用allow=r'http://example.com/.*'参数指定了提取链接的规则:链接的URL必须以http://example.com/开头。然后,使用extractor.extract_links(response)方法从页面中提取链接。提取得到的链接会以Link对象的形式返回,可以通过访问link.url获取链接的URL。
在parse方法中,我们遍历提取到的链接,并可以进一步解析链接中的其他信息,并继续爬取其他页面。在上面的例子中,我们使用yield scrapy.Request(link.url, callback=self.parse_other_page)方法继续爬取链接所指向的页面,并将爬取结果交给parse_other_page方法进行处理。
除了allow参数,LinkExtractor还支持其他一些参数,如deny、allow_domains和deny_domains等,用于进一步指定链接提取的规则。通过合理设置这些参数,可以灵活地提取需要的链接。
