csv
一、什么是csv?
1、CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本格式,用以存储表格数据,包括数字或者字符。很多程序在处理数据时都会碰到csv这种格式的文件。python自带了csv模块,专门用于处理csv文件的读取。
二、csv模块的使用
一、写入csv文件
1 通过创建writer对象,主要用到2个方法。一个是writerow,写入一行。另一个是writerows写入多行
2 使用DictWriter 可以使用字典的方式把数据写入进去
二、读取文件
1 通过reader()读取到的每一条数据是一个列表。可以通过下标的方式获取具体某一个值
2 通过DictReader()读取到的数据是一个字典。可以通过Key值(列名)的方式获取数据
import csv
# csv模块的使用
# 写入csv文件通过创建writer对象,主要用到2个方法。
# 1 、一个是writerow写入一行。另一个是writerows写入多行
# headers = ('name', 'age', 'height') # 只要能够循环遍历就可以 迭代器 可迭代对象不一定是迭代器
# persons = [
# ('蒋嘉杰', 20, 185),
# ('蒋秋月', 26, 160),
# ('蒋嘉诚', 19, 180),
# ('蒋秋慧', 25, 160)
# ]
# with open('persons.csv', 'w', encoding='utf-8') as file_obj:
# writer = csv.writer(file_obj)
# writer.writerow(headers)
# for data in persons:
# writer.writerow(data)
# -----------------------------------------------------------------------
# 一个是writerows写入多行
# headers = ('name', 'age', 'height') # 只要能够循环遍历就可以 迭代器 可迭代对象不一定是迭代器
# persons = [
# ('蒋嘉杰', 20, 188),
# ('蒋秋月', 26, 160),
# ('蒋嘉诚', 19, 180),
# ('蒋秋慧', 25, 160)
# ]
# with open('persons.csv', 'w', encoding='utf-8', newline='') as file_obj:
# writer = csv.writer(file_obj)
# writer.writerow(headers)
# writer.writerows(persons)
# 2 、使用DictWriter 可以使用字典的方式把数据写入进去
# headers = ('name', 'age', 'height')
# persons = [
# {'name': '吴泽琪', 'age': '20', 'height': '178'},
# {'name': '吴泽', 'age': '20', 'height': '178'},
# {'name': '吴俊棋', 'age': '20', 'height': '178'}
# ]
# with open('persons.csv', 'w', encoding='utf-8', newline='') as file_obj:
# Dwriter = csv.DictWriter(file_obj, headers)
# Dwriter.writeheader()
# Dwriter.writerows(persons)
# 读取文件
# 1 通过reader()读取到的每一条数据是一个列表。可以通过下标的方式获取具体某一个值
# with open('persons.csv', 'r', encoding='utf-8', newline='') as file_obj:
# reader = csv.reader(file_obj)
# for i in reader:
# print(i[1]) # 如果要取值就按索引取值
# 2 通过DictReader()读取到的数据是一个字典。可以通过Key值(列名)的方式获取数据
with open('persons.csv', 'r', encoding='utf-8', newline='') as file_obj:
Dreader = csv.DictReader(file_obj)
for x in Dreader:
print(x['name']) # 取值可以通过kye的方式来取
xpath
一、基本概念
1、XPath(XML Path Language)是一种XML的查询语言,他能在XML树状结构中寻找节点。XPath 用于在 XML 文档中通过元素和属性进行导航
2、xml是一种标记语法的文本格式,xpath可以方便的定位xml中的元素和其中的属性值。lxml是python中的一个第三方模块,它包含了将html文本转成xml对象,和对对象执行xpath的功能
二、 结点的关系
xml_content = '''
<bookstore>
<book>
<title lang='eng'>Harry Potter</title>
<author>JK.Rowing</author>
<year>2005</year>
<price>29<price>
</book>
</bookstore>
1、在上面代码中的是文档节点。
2、在上面代码中的JK.Rowing是 元素节点
3、在上面代码中的lang='eng’是属性节点
4、父(Parent) book元素是title、author、year、price元素的父
5、子(Children) title、author、year、price都是book元素的子
6、同胞(Sibling) title、author、year、price都是同胞
7、先辈(Ancestor) title元素的先辈是 book元素和bookstore元素
三、基本使用
1、工具安装
安装参考网站
https://blog.csdn.net/qq_31082427/article/details/84987723
2、查找某个特定的节点或者包含某个指定的值的节点
3、模块的使用
4、在Python中,我们安装lxml库来使用XPath 技术
lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取HTML/XML数据利用etree.HTML,将字符串转化为Element对象
5、lxml python 官方文档:http://lxml.de/index.html
可使用 pip 安装:pip install lxml
lxml 可以⾃动修正 html 代码
6、快捷键 ctrl + shift + x 如果有的软件快捷键和这个插件冲突了 要么把这个软件关掉 要么修改这个软件的快捷键
from lxml import etree
import csv
wb_data = """
<div>
<ul>
<li class="item-0"><a href="link1.html">first item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-inactive"><a href="link3.html">third item</a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a>
</ul>
</div>
"""
html_element = etree.HTML(wb_data)
# 获取li标签下面的href属性
links = html_element.xpath('//li/a/@href')
# print(links)
# 获取li标签下面a标签的文本内容
result = html_element.xpath('//li/a/text()')
# print(result)
# 需求是把二者的结果保存到一个字典当中然后存储的csv文件当中
# 例如 {'href':'link1.html','title':'first item'}, {'href':'link2.html','title':'second item'}...
list1 = ['href', 'title']
lst = []
for i in links:
d = {}
d['href'] = i
d['title'] = result[links.index(i)]
lst.append(d)
# 第一种方法
with open('练习.csv', 'w', encoding='utf-8', newline='')as file_obj:
werhile = csv.DictWriter(file_obj, list1)
werhile.writeheader()
werhile.writerows(lst)
# 第二种方法
# with open('练习.csv', 'w', encoding='utf-8', newline='')as flie_obj:
# werhile = csv.DictWriter(flie_obj, fieldnames=['href', 'title'])
# werhile.writeheader()
# werhile.writerows(lst)