ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ECommerceCrawlers项目分析(四)

2021-10-14 19:30:47  阅读:226  来源: 互联网

标签:xpath title 元素 项目分析 bookstore ECommerceCrawlers 节点 book


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有