第六天,爬取数据(cheerio)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第六天,爬取数据(cheerio)相关的知识,希望对你有一定的参考价值。
参考技术A后面的例子中用到的html模板如下:
首先你需要先加载你的HTML。 jQuery 会自动完成这一步,因为jQuery操作的DOM是固定的。但是在使用 cheerio 时我们要手动加载我们的HTML文档
首选的方式如下:
其次,直接把HTML字符串作为上下文也是可以的:
或者把HTML字符串作为root
如果你需要自定义一些解析选项,你可以多传递一个对象给load方法:
更多的解析选项可以参考 domhandler 和 parser-options
cheerio 的选择器几乎和 jQuery 一模一样,所以语法上十分相像
selector 在 context 的范围内搜索, context 的范围又包含在 root 的范围内。 selector 和 context 可以是一个字符串,DOM元素,DOM数组或者cheerio实例。 root 一般是一个HTML文档字符串
选择器是文档遍历和操作的起点。如同在 jQuery 中一样,它是选择元素节点最重要的方法,但是在 jQuery 中选择器建立在CSS选择器标准库上。 cheerio 的选择器实现了大部分的方法
用来获取和更改属性的方法:
.attr(name, value)
这个方法用来获取和设置属性。获取第一个符合匹配的元素的属性值。如果某个属性值被设置成null,那么该属性会被移除。你也可以把 map 和 function 作为参数传递进去,就像在jQuery中一样
.removeAtrr(name)
移除名为name的属性
.hasClass(className)
检查元素是否含有此类名
.addClass(className)
添加类名到所有的匹配元素,可以用函数作为参数
.remoteClass([className])
移除一个或者多个(空格分隔)的类名,如果className为空,则所有的类名都会被移除,可以传递函数作为参数
.find(selector)
在当前元素集合中选择符合选择器规则的元素集合
.parent()
获取元素集合第一个元素的父元素
.next()
选择当前元素的下一个兄弟元素
.prev()
同 .next() 相反
.siblings()
获取元素集合中第一个元素的所有兄弟元素,不包含它自己
.children( selector )
.each( function(index, element) )
遍历函数返回false即可终止遍历
.map( function(index, element) )
.filter( selector )
.filter( function(index) )
.first()
.last()
.eq( i )
缩小元素集合,可以用负数表示倒数第 i 个元素被保留
操作DOM结构的方法
.append( content, [content, ...] )
.prepend( content, [content, ...] )
.after( content, [content, ...] )
.before( content, [content, ...] )
.remove( [selector] )
.replaceWith( content )
.empty()
.html( [htmlString] )
.text( [textString] )
输出包含自己在内的HTML(outer HTML)
.toArray()
.clone()
$.root()
$.contains( container, contained )
日期:2021/11/16
学习参考视频 :* https://www.bilibili.com/video/BV1i7411G7kW?p=11&t=201.6
大数据第六天作业
1.使用抽象类和接口实现适配器模式设计。
public class Button { private ButtonListener listener; public void addListener(ButtonListener listener){ this.listener = listener; } public void click(){ listener.click(); } } public interface ButtonListener { public void click(); public void dbclick(); public void keyUp(); public void keyDown(); } public abstract class ButtonListenerAdapter implements ButtonListener{ @Override public void click() { System.out.println("适配器对click方法的默认实现"); } @Override public void dbclick() { System.out.println("适配器对dbclick方法的默认实现"); } @Override public void keyDown() { System.out.println("适配器对keydown方法的默认实现"); } @Override public void keyUp() { System.out.println("适配器对keyup方法的默认实现"); } } public class MyButtonListener extends ButtonListenerAdapter{ } public class Main { public static void main(String[] args) { Button b = new Button(); MyButtonListener listener = new MyButtonListener(); b.addListener(listener); b.click(); } }
2.阐述什么是多态。
为什么函数可以覆盖,而属性不能覆盖?
答:
a.什么是多态
多态就是从不同的角度去看数据,这些数据构成一个对象的多种状态,比如:员工的特点是有薪水和编号
,但要站在生物的角度去看员工那就是有鼻子有眼睛.对象没有变,只是观察的角度改变了,这就是多态.
b.为什么函数能覆盖属性却不能
属性保存的是数据,是表示一个对象的重要资产,故只能被继承但不能被修改.
以上是关于第六天,爬取数据(cheerio)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Google Apps 脚本中使用 Cheerio 提取 HTML 表格数据?