Python爬虫 4-xpath和csv

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 Helper
  • Firefox插件 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值