赵走x博客
首页
书籍
软件
工具
古诗词
搜索
登录
精通Scrapy爬虫:25、Scrapy模拟登录
精通Scrapy爬虫:24、登录实质
精通Scrapy爬虫:23、项目实战:下载360图片
精通Scrapy爬虫:22、项目实战:爬取matplotlib例子源码文件
精通Scrapy爬虫:21、下载文件和图片:FilesPipeline和ImagesPipeline
精通Scrapy爬虫:20、项目练习
精通Scrapy爬虫:16、使用LinkExtractor提取链接
精通Scrapy爬虫:19、Exporter添加导出数据格式
精通Scrapy爬虫:18、使用Exporter导出数据
精通Scrapy爬虫:17、LinkExtractor描述提取规则
精通Scrapy爬虫:15、将数据存入MongoDB
精通Scrapy爬虫:14、过滤重复数据
精通Scrapy爬虫:13、Item Pipeline
精通Scrapy爬虫:12、Field元数据
精通Scrapy爬虫:11、Item和Field
精通Scrapy爬虫:10、CSS选择器
精通Scrapy爬虫:9、XPath
精通Scrapy爬虫:8、Response内置Selector
精通Scrapy爬虫:7、Selector对象
精通Scrapy爬虫:6、Spider开发流程
精通Scrapy爬虫:5、Request和Response对象
精通Scrapy爬虫:4、Scrapy框架结构及工作原理
精通Scrapy爬虫:3、编写第一个Scrapy爬虫
精通Scrapy爬虫:2、Scrapy简介及安装
精通Scrapy爬虫:1、网络爬虫是什么
精通Scrapy爬虫:16、使用LinkExtractor提取链接
资源编号:75946
精通Scrapy
爬虫
热度:34
在爬取一个网站时,想要爬取的数据通常分布在多个页面中,每个页面包含一部分数据以及到其他页面的链接,提取页面中数据的方法大家已经掌握,提取链接有使用Selector和使用LinkExtractor两种方法。
在爬取一个网站时,想要爬取的数据通常分布在多个页面中,每个页面包含一部分数据以及到其他页面的链接,提取页面中数据的方法大家已经掌握,提取链接有使用Selector和使用LinkExtractor两种方法。 本章来学习如何提取页面中的链接。 1.使用Selector 因为链接也是页面中的数据,所以可以使用与提取数据相同的方法进行提取,在提取少量(几个)链接或提取规则比较简单时,使用Selector就足够了。 2.使用LinkExtractor Scrapy提供了一个专门用于提取链接的类LinkExtractor,在提取大量链接或提取规则比较复杂时,使用LinkExtractor更加方便。 在第1章的example项目中使用了第一种方法提取下一页链接,回顾其中的代码片段: class BooksSpider(scrapy.Spider): ... def parse(self, response): ... # 提取链接 # 下一页的url 在ul.pager > li.next > a 里面 # 例如:
next
next_url = response.css('ul.pager li.next a::attr(href)').extract_first() if next_url: # 如果找到下一页的url,得到绝对路径,构造新的Request 对象 next_url = response.urljoin(next_url) yield scrapy.Request(next_url, callback=self.parse) ... 上述代码中,先使用CSS选择器选中包含下一页链接的a元素并获取其href属性,然后调用response.urljoin方法计算出绝对url地址,最后构造Request对象并提交。 第一种方法大家早已掌握,本章我们来学习如何使用LinkExtractor提取链接。 # 使用LinkExtractor LinkExtractor的使用非常简单,通过一个例子进行讲解,使用LinkExtractor替代Selector完成BooksSpider提取链接的任务,代码如下: from scrapy.linkextractors import LinkExtractor class BooksSpider(scrapy.Spider): ... def parse(self, response): ... # 提取链接 # 下一页的url 在ul.pager > li.next > a 里面 # 例如:
next
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对象提取页面中链接的流程。