Python爬虫 4-xpath和csv

it2026-02-21  3

xpath介绍

基本概念

Xpath(XML Path Language)是一种XML的查询语言,他能在XML树状结构中寻找节点。XPath用于XML文档中通过元素和属性进行导航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> ''' <bookstore> 文档节点 <author>JK.Rowing</author> 元素节点 lang='eng' 属性节点 父(Parent) book元素是title、author、year、price元素的父子(Children) title、author、year、price都是book元素的子同胞(Sibling) title、author、year、price都是同胞先辈(Ancestor)title元素的先辈是booke元素和bookstore元素

基本使用

工具安装

常用节点选择工具
chrome插件 Xpath HelperFirefox插件 Xpath Checker

使用

查找某个特定节点或者包含某个指定的值的节点

模块的使用

在Python中,我们安装lxml库来使用Xpath技术 lxml是一个HTML/XML的解析器,主要功能是如何解析和提取HTML/XML数据利用etree.HTML,将字符串转化为Element对象 lxml python官方文档:http://lxml.de/index.html 使用 pip安装: pip install lxml

from lxml import etree 这个etree类能干什么?

第一个是将html字符串转化为element对象第二个是element对象可以转换为字符串或者二进制类型 from lxml import etree 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) # print(html_element) # result = etree.tostring(html_element) # r = result.decode() # print(type(r),r) # 获取li标签下面的a标签的href links = html_element.xpath('//li/a/@href') # 获取a标签下面的文本数据 result = html_element.xpath('//li/a/text()') # print(links) # print(result) # csv存储数据的格式 # 把获取到的数据组合到一个字典当中 {'href':'link1.html','title':'first item'} for link in links: d = {} d['href'] = link # 获取下标索引值 # print(links.index(link)) d['title'] = result[links.index(link)] print(d)

csv

什么是csv?

CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分 隔符可以不是逗号),是⼀种常⽤的⽂本格式,⽤以存储表格数据,包括数字 或者字符。很多程序在处理数据时都会碰到csv这种格式的⽂件。python⾃带了 csv模块,专⻔⽤于处理csv⽂件的读取

csv模块的使⽤

写入csv文件

1 通过创建writer对象,主要⽤到2个⽅法。⼀个是writerow,写⼊⼀⾏。另 ⼀个是writerows写⼊多⾏ 2 使⽤DictWriter 可以使⽤字典的⽅式把数据写⼊进去

读取csv文件

1 通过reader()读取到的每⼀条数据是⼀个列表。可以通过下标的⽅式获取具 体某⼀个值 csv 2 通过DictReader()读取到的数据是⼀个字典。可以通过Key值(列名)的⽅式 获取数据

# import csv # csv写入文件 # titles = ('name','age','height') # persons = [('张三',20,175),('李四',22,178),('王五',30,180)] # 第一种 # with open('persons.csv','w',encoding='utf-8') as f: # writer = csv.writer(f) # writer.writerow(titles) # for data in persons: # writer.writerow(data) # with open('persons.csv','w',encoding='utf-8',newline='') as f: # writer = csv.writer(f) # writer.writerow(titles) # writer.writerows(persons) # 第二种 # persons = [ # {'name':'张三','age':20,'height':175}, # {'name':'李四','age':22,'height':178}, # {'name':'王五','age':30,'height':180} # ] # # with open('persons.csv','w',encoding='utf-8',newline='') as f: # writer = csv.DictWriter(f,titles) # writer.writeheader() # writer.writerows(persons) # csv读取文件 import csv # 第一种 # with open('persons.csv','r',encoding='utf-8') as f: # reader = csv.reader(f) # for i in reader: # print(i[2]) # 第二种 with open('persons.csv','r',encoding='utf-8') as f: reader = csv.DictReader(f) for i in reader: print(i['name'])
最新回复(0)