其他分享
首页 > 其他分享> > ECommerceCrawlers项目分析(四)

ECommerceCrawlers项目分析(四)

作者:互联网

2021SC@SDUSC

这篇博客将讲述xpath,yield以及其他parse()代码的分析

parse()代码分析先放在下面

#python类中方法的定义,注意要带self
    def parse(self, response):

        #定义item
        item = CnblogItem()

        # 使用xpath搜索
        # xpath(): 传入xpath表达式,返回该表达式所对应的所有节点的selector list列表
        # extract(): 序列化该节点为unicode字符串并返回list
        item['title'] = response.xpath('//a[@class="titlelnk"]/text()').extract()
        item['link'] = response.xpath('//a[@class="titlelnk"]/@href').extract()

        yield item

        # offset的中文意思是偏移量。
        # 在爬虫中,offset一般用于翻页
        print("第{0}页爬取完成".format(self.offset))
        if self.offset < 10:        #爬取到第几页
            self.offset += 1
        url2 = self.url+str(self.offset)    #拼接url
        print(url2)
        yield scrapy.Request(url=url2, callback=self.parse)

一.XPath简述

(先附上博主学习XPath的文档链接:XPath教程

XPath简而言之就是对文档的元素和属性进行遍历的工具。

它使用路径表达式来遍历

比如:

/html/head/title: 选择HTML文档中 <head> 标签内的 <title> 元素
/html/head/title/text(): 选择上面提到的 <title> 元素的文字
//td: 选择所有的 <td> 元素
//div[@class="mine"]: 选择所有具有 class="mine" 属性的 div 元素

下面附上几种经常用到的路径表达式:

表达式描述
nodename选取此节点的所有子节点。
/从根节点选取。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.选取当前节点。
..选取当前节点的父节点。
@选取属性。

XPath的谓语用来查找某个特定的节点或者包含某个指定的值的节点。谓语被嵌在方括号中。

比如:

路径表达式结果
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3]选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='eng']选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00]选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

在函数parse()里的xpath语句就表示:

//a[@class="titlelnk"]/text()

找到所有具有 class="titlelnk" 属性的a标签元素的文字

//a[@class="titlelnk"]/@href

找到所有具有 class="titlelnk" 属性的a标签元素的链接

二.yield

(先附上博主学习yield的链接:python中yield的用法详解——最简单,最清晰的解释

yield简而言之就是 return。它会返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后开始。

三.其他关键代码分析

这两行代码:

item['title'] = response.xpath('//a[@class="titlelnk"]/text()').extract()
item['link'] = response.xpath('//a[@class="titlelnk"]/@href').extract()

分别用到了xpath()和extract()

xpath(): 传入xpath表达式,返回该表达式所对应的所有节点的selector list列表 。

extract(): 序列化该节点为unicode字符串并返回list

简而言之就是xpath()可以执行xpath语句,选择一系列元素和属性;extract()将它们转化为文字。

标签:xpath,title,元素,项目分析,bookstore,ECommerceCrawlers,节点,book
来源: https://blog.csdn.net/weixin_45859345/article/details/120770236