第六天,爬取数据(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)的主要内容,如果未能解决你的问题,请参考以下文章

nodejs基础二

node简单的爬虫

如何在 Google Apps 脚本中使用 Cheerio 提取 HTML 表格数据?

Cheerio 内存泄漏

如何从Google Cloud Function(Cheerio,Node.js)发出多个http请求

通读cheerio API