开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践:文本数据采集与处理之一 下】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1067/detail/15511
文本数据采集与处理之一 下
内容介绍
一、 标签定位
二、序列定位
三、轴定位
四、常见运算符与函数
再详细介绍一下Xpath,真正在爬虫在工作过程当中,工作量最大的是要做网页解析,从文档对象上面去找东西,这是工作量最大的。课里面讲的方法主要是Xpath。Xpath有很多功能。主要介绍如何来定位的三种定位方法
一、 标签定位
第一种就是标签定位。标签定位,都知道标签就是tag,网页里面那个构成的这些元素的名字也叫节点名称。所以有这样几个标签定位方式。
1,直接用名词nodename节点的名字。找网页里面的对应的元素。那么就选取此节点的所有子节点,只要找到到一个节点下面所有就找到了,举个例子,比如说’//div’ div就是一个nodename,要找到网页里面的div里面的所有的标签。因为//表示所有的
2,单斜杠,单斜杠是从根结点出发,如果单斜杠前面已经有东西,那就从当前节点接着下面,当成根节点,然后下面找东西,比如说这个第一个斜杠head,那就是整个文档树的树根找head,然后head下面就直接连着title没有隔开的节点叫紧接着。这个解释就是从根结点找到head下面的title
3,双斜杠,是选取任意位置的某个节点 ‘//p’表示在html中找到所有的p标签。如果前面没有跟其他东西,其他这限制,那就表示,在整个文档里面找所有直批。
4,@ @是选取属性的指令,属性是从属于一个标签的,一个nodename的一个节点,例如前面的节点的div然后中括号,放在中括号里面@,@后面第一个属性,属性是名字叫class的值等于one。那就找所有div的,然后属性的类别是等于one的,这样的所有的这样的一些元素
5,再来一个标签定位时,是星号。是一个通配符。通配任意内容,例如双斜杠表示找所有的,然后div,然后这个单斜杠下面的星号,那么就是返回所有满足条件的div的这个界定这里用的最重要,最多的一个是双斜杠,有的时候可能怕麻烦就不用单斜杠 还要提一个具体位置,双斜杠反正找下面所有的,但是工作量稍微大一点。然后再一个就是指定属性。是经常用的要到网页上去找某一块内容,找邮箱地址,找某一个品牌的名字,就专门指定属性的。所以是Xpath第一种叫标签定位
二、序列定位
1,指定具体的一个位置中,[1]表示第一个元素,例’//div[1]’里div返回第一个div对象。在这个找到的div可能很多,几十个但只找第一个div所以有的时候看网页的时候要计算一下,到底要的在第几个里面可以指定。
2,[last()]找最后一个元素。通过网页观察发现要找的内容就在网页的最后一个位置
3[last()-1]就是找倒数第二个元素
4,[position]。指明位置,一个position函数是指定范围的元素,例如双斜杠里面找所有的ul,ul是排列的列表li是里面一个向 比如说有三个圆点,四个圆点,整个叫做UL,然后里面的某一个叫做li,这个li的看position位置大于二,同时还小于五,先找是大于二的。找li标签先大于二也就从第三个开始,然后找小于五,小于五就找四个标签。
三、轴定位
那就是上下位关系的轴定位。
1,有child定位。表示当前节点的所有子元素,孩子元素,子元素,比如说div[1],[1]表示一个序列定位,div表示前面的标签定位,child注意两个冒号型号表示下面所有的孩子节点
2,parent表示父节点
3,ancestor是祖先节点所有的祖先
4,descendant子孙节点,把所有的后代节点。
5,self表示自己本身。
四、常见运算符与函数
以上是轴定位。除了这几个定位之外呢,还有几个重要的内容, Xpath里面常用的运算符和函数。
函数用的最多就是返回指定元素的文本内容。抓网页,抓网页内容,主要是文本内容,例如
1,text()找book标签下text()标签下的文本。要那个显示在网页上的图
2,string()也是返回文本内容。啊string()和text()是有什么区别呢?string()是返回所有的,比text()要拿的内容更多
3,contains含有,也就是一个字符串啊是不是含有另外字符串里(str1,石头人)然后呢,我们这个例子里面看到没有,找一个div ,div里面然后contains然后点表示当前。然后双斜杠就刚刚前面所有的文本函数,然后函数里面去找到文本内容,里面还有价格,把这个都找到还有价格,要选择text中包含价格所有的div节点。
4,not()是不包含。但是他要跟condtains组合的
5,Xpath还可以支持各种运算符。家庭之后的可以支持,可以计算,可以比较大小。
比如说,如果说一个标签名字叫price,可以找price大于九的那些商品,如果一个商品列表里面各种价格,不要都抓,我要抓取这个价格大于九点九九点九元的。
如果掌握了request加Xpath,基本上就可以解决大多数的网络爬虫问题。