Antecedentes del requisito:
extraiga la columna del curso en el lado izquierdo de la página de inicio de la universidad de CSDN.
Primero declare: la página de inicio del estudiante de CSDN extraída es un objeto html y se descarga a una página html estática local. El
siguiente es el código extraído para implementar el todo el proceso,
import lxml.etree as le # 在python中如果需要运用xpath,那么就要调用python中的lxml中的etree模块
### 要思考一件事,你当前处理的问题在哪个领域范围内的,先定位到所需知识领域,再定位需要解决的问题,在此基本上考虑需要调用哪到的模块
## 读取本地保存的一个静态html,读取的路径,以什么方式读取,用什么编码格式
with open('edu.html','r',encoding='utf-8') as f: # 先打开要读取的对象,读取的路径,以什么方式读取,用什么编码格式
html=f.read() ## 针对打开的对象进行读取操作,使用read()函数,把读取后的结果返回给一个对象,该对象为html
## 如果需要使用xpath对html对象进行操作,那么要转换为xpath对象,如下方法完成对象转换
html_x=le.HTML(html)
print(html_x)
type(html_x)
<Element html at 0x26bd83eb640>
lxml.etree._Element
## 得到xpath对象后,就可以使用xpath方法来操作它! 方法都是有适用对象的
div_x_s=html_x.xpath('//div[@class="classify_cList"]') # 该标签下包裹着一个h3标签和一个div标签,这两个标签属于平行结构
print(div_x_s) # 得到6块div标签并且这每一块div标签均包裹着一个h3标签和一个div标签
[<Element div at 0x26bd83eb6c0>, <Element div at 0x26bd83eb500>, <Element div at 0x26bd83dff80>, <Element div at 0x26bd83dfe80>, <Element div at 0x26bd83df480>, <Element div at 0x26bd83dffc0>]
for div_x in div_x_s:
category=div_x.xpath('./h3/a/text()')[0] # 可以通过遍历的方法取出每一个块div标签里面的h3标签,通过取索引0的方式获取到具体的文本内容
print(category)
人工智能
编程语言
考试认证
移动开发
云计算/大数据
其他课程
for div_s in div_x_s:
category_s=div_s.xpath('./div/span/a/text()') ## 依然是通过遍历的方法取出每一个div标签里面包裹的div标签,此div标签里面的有多个字符串对象,因此需要通过二次遍历的方式读取出来
print(category_s)
['机器学习', '深度学习', '计算机视觉']
['C/C++', 'Java', 'Python']
['华为认证', '思科认证', '软考']
['iOS', '微信开发', 'Swift']
['Hadoop', 'Docker/K8S', 'Spark']
['系统/网络/运维', '数据库', '区块链']
data_s=[] ## 定义一个列表,用来存放遍历出来的h3标签和div标签
for div_x in div_x_s:
category=div_x.xpath('./h3/a/text()')[0]
category_s=div_s.xpath('./div/span/a/text()')
data_s.append(
dict(
category=category,
category_s=category_s
)
)
print(data_s)
[{
'category': '人工智能', 'category_s': ['系统/网络/运维', '数据库', '区块链']}, {
'category': '编程语言', 'category_s': ['系统/网络/运维', '数据库', '区块链']}, {
'category': '考试认证', 'category_s': ['系统/网络/运维', '数据库', '区块链']}, {
'category': '移动开发', 'category_s': ['系统/网络/运维', '数据库', '区块链']}, {
'category': '云计算/大数据', 'category_s': ['系统/网络/运维', '数据库', '区块链']}, {
'category': '其他课程', 'category_s': ['系统/网络/运维', '数据库', '区块链']}]
for data in data_s:
print(data.get('category'))
for category_ in data.get('category_s'):
print(' ',category_)
人工智能
系统/网络/运维
数据库
区块链
编程语言
系统/网络/运维
数据库
区块链
考试认证
系统/网络/运维
数据库
区块链
移动开发
系统/网络/运维
数据库
区块链
云计算/大数据
系统/网络/运维
数据库
区块链
其他课程
系统/网络/运维
数据库
区块链
Experimenta
un bucle lógico claro a través de la parte inferior y más propicio para un estudio en profundidad posterior