HTML(Hypertext Markup Language)
是一种用于创建网页的标记语言。在HTML中,标签是用来定义和组织网页内容的元素。
HTML标签及其用途
- <html>:定义HTML文档的根元素。
- <head>:定义HTML文档的头部,包含了一些元数据和链接到外部资源的标签。
- <title>:定义HTML文档的标题,显示在浏览器的标题栏或标签页上。
- <body>:定义HTML文档的主体部分,包含了网页的实际内容。
- <h1> - <h6>:定义标题,从大到小分为六个级别。
- <p>:定义段落。
- <a>:定义超链接,用于链接到其他网页或文档。
- <img>:定义图像,用于在网页中显示图片。
- <ul>:定义无序列表。
- <ol>:定义有序列表。
- <li>:定义列表项。
- <table>:定义表格。
- <tr>:定义表格的行。
- <td>:定义表格的单元格。
- <div>:定义文档中的一个区块或容器。
- <span>:定义文档中的一个行内元素。
- <form>:定义表单,用于用户输入和提交数据。
- <input>:定义表单中的输入字段。
- <button>:定义按钮。
- <select>:定义下拉列表。
- <option>:定义下拉列表中的选项。
lxml
lxml是一个Python库,用于解析和处理XML和HTML文档。它提供了一种简洁而强大的语法来访问和操作文档中的元素和属性。
获取元素的属性值
element.get('attribute_name')
这个语法用于获取指定元素的属性值。element是要获取属性值的元素对象,attribute_name是要获取的属性名称
设置元素的属性值
element.set('attribute_name', 'attribute_value')
这个语法用于设置指定元素的属性值。element是要设置属性值的元素对象,attribute_name是要设置的属性名称,attribute_value是要设置的属性值。
检查元素是否具有某个属性
'attribute_name' in element.attrib
这个语法用于检查指定元素是否具有某个属性。element.attrib是一个字典,包含了元素的所有属性,通过判断属性名称是否在字典中来确定元素是否具有该属性。
删除元素的属性
del element.attrib['attribute_name']
这个语法用于删除指定元素的属性。element.attrib是一个字典,通过删除字典中的属性来删除元素的属性。
Xpath
在lxml中,要选取具有特定属性的元素,可以使用XPath语法
XPath是一种用于在XML和HTML文档中定位元素的语言。它提供了一种灵活而强大的方式来选择元素,包括根据元素的属性进行选择。
语法中用@语法实现选取属性
选取具有指定属性的元素
element.xpath("//element_name[@attribute_name='attribute_value']")
这个语法用于选取具有指定属性的元素。element_name是要选取的元素名称,attribute_name是要匹配的属性名称,attribute_value是要匹配的属性值。
选取具有包含指定属性的元素
element.xpath("//element_name[contains(@attribute_name, 'attribute_value')]")
这个语法用于选取具有包含指定属性的元素。element_name是要选取的元素名称,attribute_name是要匹配的属性名称,attribute_value是要匹配的属性值的一部分。
选取具有任意属性的元素
element.xpath("//element_name[@*]")
这个语法用于选取具有任意属性的元素。element_name是要选取的元素名称。
contains(), and,text()
- contains():contains()函数用于选择具有包含指定字符串的属性值或文本内容的元素。它接受两个参数:属性名称或 text() 关键字,以及要匹配的字符串。
例如:contains(@attribute_name, 'attribute_value') 用于选择具有包含指定属性值的元素,contains(text(), 'text_value') 用于选择具有包含指定文本内容的元素。
- and:and 关键字用于在XPath表达式中组合多个条件。它用于同时满足多个条件的情况。
例如://element_name[@attribute1='value1' and @attribute2='value2'] 用于选择具有同时满足 attribute1 和 attribute2 条件的元素。
- text():text() 关键字用于选择元素的文本内容,用于选择具有指定文本内容的节点。它可以用作XPath表达式的一部分,用于选择具有特定文本内容的元素。
例如://element_name[text()='text_value'] 用于选择具有指定文本内容的元素。
Tag
在lxml库中,Tag对象表示XML或HTML文档中的一个元素。Tag对象具有许多属性,用于访问和操作元素的各个方面。
Tag对象的标准属性
name、attrs、string和contents属性是BeautifulSoup库中Tag对象的标准属性
- name:表示元素的标签名称。可以通过访问name属性来获取元素的标签名称。
- attrs:表示元素的属性,是一个字典对象。可以通过访问attrs属性来获取元素的属性字典(attrs返回的是字典)。
- string:表示元素的文本内容。可以通过访问string属性来获取元素的文本内容。
- contents:表示元素的子节点列表。可以通过访问contents属性来获取元素的子节点列表。
常见的Tag对象属性
- tag:表示元素的标签名称。
- text:表示元素的文本内容。
- attrib:表示元素的属性,是一个字典对象,可以通过访问attrib属性来获取标签包含的属性。
- tail:表示元素的尾部文本内容。
- prefix:表示元素的命名空间前缀。
- nsmap:表示元素的命名空间映射,是一个字典对象。
- getparent():返回元素的父元素。
- getchildren():返回元素的所有子元素。
- getnext():返回元素的下一个兄弟元素。
- getprevious():返回元素的上一个兄弟元素。
- getroottree():返回元素所在的树对象。
- getroottree().getroot():返回元素所在的树的根元素。
这些属性可以通过访问Tag对象的属性来获取或设置相应的值。例如,要获取元素的标签名称,可以使用tag属性:element.tag。
正则表达式
正则表达式是一种用于匹配和操作文本模式的工具。它是由一系列字符和特殊字符组成的字符串,用于描述和定义要匹配的文本模式。
正则表达式提供了一种灵活而强大的方式来搜索、替换和验证文本。它可以用于各种编程语言和文本编辑器中,用于处理字符串数据。
基本元素
- 普通字符:表示自身的字符,例如字母、数字、标点符号等。
- 元字符:具有特殊含义的字符,例如.、*、+、?等。
- 字符类:用于匹配一组字符中的任意一个字符,例如[abc]表示匹配字符a、b或c。
- 量词:用于指定匹配的次数,例如*表示匹配零次或多次,+表示匹配一次或多次,?表示匹配零次或一次。
- 锚点:用于指定匹配的位置,例如^表示匹配字符串的开头,$表示匹配字符串的结尾。
- 转义字符:用于转义特殊字符,例如\.表示匹配实际的点字符。
eg
- xpath选择所有ul节点下所有class属性值为listmain子节点的表达式:
//ul[@class='listmain']/*
解析步骤:
1. //ul:选择文档中所有ul节点。
2. [@class='listmain']:筛选具有class属性值为listmain的ul节点。
3. /*:选择符合条件的ul节点的所有子节点。
- 匹配abe,ace,ade的正则表达式
a[bcde]e
解析:
- a:匹配字母 "a"。
- [bcde]:匹配方括号内的任意一个字符,即 "b"、"c"、"d" 或 "e"。
- e:匹配字母 "e"。
Beautifulsoup4
常用方法
- BeautifulSoup():用于创建一个BeautifulSoup对象,将HTML或XML文档作为参数传递给它。
- find():用于查找第一个匹配指定标签和属性的元素。
- find_all():用于查找所有匹配指定标签和属性的元素,并返回一个列表。
find_all()返回所有匹配节点的元素:
from bs4 import BeautifulSoup
# 创建一个BeautifulSoup对象
soup = BeautifulSoup(html, 'html.parser')
# 使用find_all()方法查找所有匹配的节点元素
elements = soup.find_all('tag_name')
# 遍历返回的元素列表
for element in elements:
# 处理每个匹配的节点元素
print(element)
- select():用于使用CSS选择器语法查找匹配的元素。
- get():用于获取元素的属性值。
- text:表示元素的文本内容。
- parent:表示元素的父元素。
- children:返回元素的所有子元素。
- next_sibling:返回元素的下一个兄弟元素。
- previous_sibling:返回元素的上一个兄弟元素。
- prettify():用于美化输出,将解析后的文档格式化为易读的字符串。
json库
dumps()
就着重讲一下它吧,之后我会进行其它补充
dumps()方法用于将Python对象转换为JSON格式的字符串。
通过使用dumps()方法,可以将Python对象转换为JSON字符串,以便在网络传输、存储或与其他系统进行数据交换。
基本语法
json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
参数说明:
- obj:要转换为JSON字符串的Python对象。
- skipkeys:如果设置为True,则在转换过程中跳过非字符串键的字典项,默认为False。
- ensure_ascii:如果设置为False,则允许输出非ASCII字符,默认为True。
- check_circular:如果设置为False,则允许循环引用,默认为True。
- allow_nan:如果设置为False,则不允许输出NaN、Infinity和-Infinity,默认为True。
- cls:用于自定义JSON编码的编码器类。
- indent:用于指定缩进级别的整数值,用于美化输出。
- separators:用于指定分隔符的元组,包括(item_separator, key_separator)。
- default:用于指定自定义对象的序列化函数。
- sort_keys:如果设置为True,则按键进行排序,默认为False。
eg
import json
data = {
"name": "John",
"age": 30,
"city": "New York"
}
json_str = json.dumps(data)
print(json_str)
在上述示例中,我们定义了一个Python字典对象data,然后使用dumps()方法将其转换为JSON字符串。最后,我们打印输出JSON字符串。
输出结果将是一个JSON格式的字符串:
{"name": "John", "age": 30, "city": "New York"}
eg2
- json库实现对JSON格式的字符串和Python数据类型进行转化的方法
1. json.loads():将JSON格式的字符串转换为Python数据类型。
- 语法:json.loads(json_str)
- 参数:json_str 是一个包含JSON格式数据的字符串。
- 返回值:返回一个对应的Python数据类型,如字典、列表、字符串等。
json.loads()方法将JSON字符串转换为Python数据类型:
import json
json_str = '{"name": "John", "age": 30, "city": "New York"}'
data = json.loads(json_str)
print(data)
print(type(data))
输出结果将是一个Python字典对象:
{'name': 'John', 'age': 30, 'city': 'New York'}
<class 'dict'>
2. json.dumps():将Python数据类型转换为JSON格式的字符串。
- 语法:json.dumps(data)
- 参数:data 是一个Python数据类型,如字典、列表、字符串等。
- 返回值:返回一个对应的JSON格式的字符串。
json.dumps()方法将Python数据类型转换为JSON字符串:
import json
data = {
"name": "John",
"age": 30,
"city": "New York"
}
json_str = json.dumps(data)
print(json_str)
print(type(json_str))
在上述示例中,我们定义了一个Python字典对象data,然后使用json.dumps()方法将其转换为JSON字符串。最后,我们打印输出转换后的JSON字符串以及其类型。
输出结果将是一个JSON格式的字符串:
{"name": "John", "age": 30, "city": "New York"}
<class 'str'>
设置输出中文字符
可以通过设置ensure_ascii参数为False来实现
import json
data = {
"name": "张三",
"age": 30,
"city": "北京"
}
json_str = json.dumps(data, ensure_ascii=False)
print(json_str)
在上述示例中,我们定义了一个包含中文字符的Python字典对象data,然后使用dumps()方法将其转换为JSON字符串,并将ensure_ascii参数设置为False。最后,我们打印输出JSON字符串。
输出:
{"name": "张三", "age": 30, "city": "北京"}