返回介绍

6.1 使用 LinkExtractor

发布于 2024-02-05 21:13:20 字数 1069 浏览 0 评论 0 收藏 0

LinkExtractor的使用非常简单,通过一个例子进行讲解,使用LinkExtractor替代Selector完成BooksSpider提取链接的任务,代码如下:

from scrapy.linkextractors import LinkExtractor
class BooksSpider(scrapy.Spider):
 ...
 def parse(self, response):
  ...
  # 提取链接
  # 下一页的url 在ul.pager > li.next > a 里面
  # 例如: <li class="next"><a href="catalogue/page-2.html">next</a></li>
  le = LinkExtractor(restrict_css='ul.pager li.next')
  links = le.extract_links(response)
  if links:
    next_url = links[0].url
    yield scrapy.Request(next_url, callback=self.parse)

对上述代码解释如下:

导入LinkExtractor,它位于scrapy.linkextractors模块。

创建一个LinkExtractor对象,使用一个或多个构造器参数描述提取规则,这里传递给restrict_css参数一个CSS选择器表达式。它描述出下一页链接所在的区域(在li.next下)。

调用LinkExtractor对象的extract_links方法传入一个Response对象,该方法依据创建对象时所描述的提取规则,在Response对象所包含的页面中提取链接,最终返回一个列表,其中的每一个元素都是一个Link对象,即提取到的一个链接。

由于页面中的下一页链接只有一个,因此用links[0]获取Link对象,Link对象的url属性便是链接页面的绝对url地址(无须再调用response.urljoin方法),用其构造Request对象并提交。

通过上面的例子,相信大家已经了解了使用LinkExtractor对象提取页面中链接的流程。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文