Scrapy中LinkExtractor提取链接的正则表达式示例
发布时间:2023-12-24 18:39:01
Scrapy是一个强大的Python爬虫框架,它提供了LinkExtractor类用于从HTML文档中提取链接。
LinkExtractor的构造函数有很多参数,但最常用的参数是allow和deny,它们分别用于定义要提取的链接的正则表达式和要排除的链接的正则表达式。下面是一个示例:
from scrapy.linkextractors import LinkExtractor
from scrapy.http import HtmlResponse
# 构造LinkExtractor对象
link_extractor = LinkExtractor(allow=r'/\w+/$')
# 构造一个虚拟的HtmlResponse对象
html = """
<html>
<body>
<a href="/page1/">Page 1</a>
<a href="/page2/">Page 2</a>
<a href="/page3/">Page 3</a>
</body>
</html>
"""
response = HtmlResponse(url='http://example.com', body=html, encoding='utf-8')
# 使用LinkExtractor提取链接
links = link_extractor.extract_links(response)
for link in links:
print(link.url)
运行以上代码会输出:
/page1/ /page2/ /page3/
在这个示例中,我们通过构造LinkExtractor对象,并将allow参数设置为r'/\w+/$',表示提取以斜杠开头,后跟一个或多个词字符,最后以斜杠结尾的链接。然后我们构造了一个虚拟的HtmlResponse对象,并将其传递给LinkExtractor的extract_links方法,该方法会返回一个包含所有满足条件的链接的列表。最后,我们遍历这个列表,并输出每个链接的URL。
除了allow参数,LinkExtractor还支持其他参数,如deny参数用于定义要排除的链接的正则表达式,restrict_xpaths参数用于定义链接所在的XPath表达式,allow_domains参数用于限制链接的域名,deny_domains参数用于排除链接的域名,等等。
总结起来,LinkExtractor是Scrapy框架中一个非常有用的工具,它可以帮助我们从HTML文档中提取链接,并根据自定义的正则表达式来筛选所需的链接。
