xpath

xpath
网络请求模块 正则表达式
比如:
人才的标准python技术好 工作能力强 颜值高 (不要工资的)
xxx地方 xxx街道xxx人才市场xxx写字楼  data
所以 xpath就是一种可以根据地址找人的技术

xpath的概念
xpath -> XML Path Language XML的查询语言 节点 文档中通过元素的属性进行导航

XML  可扩展标记语言  和html差不多,还有简单的数据存储功能
html  超文本标记语言   可用于创建网页
lxml  是Python当中的一个第三方的库   将html文本转换成了xml对象 有了这个对象就可以执行xpath功能

节点之前的关系
### xpath的工具使用
 谷歌 chrome 插件 xpath-helper
 chrome插件xpath-helper
 	1 chrome://extensions/扩展程序
 	2.之间拖拽文件 如果文件无法安装 那么把文件的后缀crx -->rar
 	3.双击解压
 	4.扩展程序里面点击第一个选项(加载已解压的扩展程序)
 火狐  firefox 插件 xpath checker

ctrl + shift + x  就可以打开xpath 工具

//div[@class='iteminfo__line1__jobname']/span/text()
@ 选取属性 来定位标签
[ ] 谓语 用来查找某个特定的节点或者包含某个特定值的节点 谓语被镶嵌到方括号中

//div[@class='soupager']/span[1]
//div[@class='soupager']/span[position()=1]
//div[@class='soupager']/span[last()]
//div[@class='soupager']/span[position()<4]    显示1 2 3 页

lxml模块的使用
安装pip install lxmln  / pip install lxml -i https://pypi.douban.com/simple
作用:
	1.from lxml import etree
	2.得到响应的结果 网页源码
	3.etree.HTML(网页源码) ---> 返回一个element对象
	4.element对象 就可以像xpath进行导航了

## csv 
是python当中的一个内置模块 可以通过excel 数据库
csv 模块 专门用于处理csv文件的读取

写入csv文件
1.通过创建writer对象 主要用到2个方法。一个是writerow 写入一行。另
一个是writerows写入多行
2.使用DictWriter可以使用字典的方式把数据写入进去
读取文件
1.通过reader()读取到的每一条数据是一个列表 可以通过下标的方式获取具体某一个值
2.通过DictReader()读取到的数据是一个字典 可以通过key值(列名)的方式获取数据
	

lxml模块.py

# @ Time : 2021/2/24 20:35
# @ Author : Ellen

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>
        """
element = etree.HTML(wb_data)
print(element)
# 获取li标签下面的href属性
links = element.xpath('//li/a/@href')
# 获取li标签下a标签的文本数据
result = element.xpath('//li/a/text()')
# print(result)
print('links=', links)   # --> ['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']
print('result=', result)  # --> ['first item', 'second item', 'third item', 'fourth item', 'fifth item']


# 需求把结果组合到字典当中
# {'href': 'link1.html', 'title': 'first item'} {'href': 'link2.html', 'title': 'second item'}...  将结果保存到csv文件当中
lst = []
for link in links:
    d = {}
    d['href'] = link
    # 获取下标索引值
    d['title'] = result[links.index(link)]
    # print(d)
    # 把爬取到的数据添加到列表中
    lst.append(d)
titles = ('href', 'title')
with open('练习.csv', 'w', encoding='utf-8', newline='') as file_obj:
    writer = csv.DictWriter(file_obj, titles)
    writer.writeheader()
    writer.writerows(lst)

csv模块.py

# @ Time : 2021/2/24 21:51
# @ Author : Ellen
import csv

# 写入数据 第一种方式

# headers = ('name', 'age', 'height')
# persons = [('我的梦', 18, 178), ('125', 20, 180), ('城', 25, 190)]
#
# 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)

# writerrows

# headers = ('name', 'age', 'height')
# persons = [('我的梦', 18, 178), ('125', 20, 180), ('城', 25, 190)]
#
# with open('persons.csv', 'w', encoding='utf-8', newline='')as file_obj:
#     writer = csv.writer(file_obj)
#     writer.writerow(headers)
#     writer.writerows(persons)

# 第二种的写入方式
# 字典里的key值要和表头里面的保持一致
# headers = ('name', 'age', 'height')
# persons = [{'name': '我的梦', 'age': 18, 'height': '178'},
#             {'name': '125', 'age': 18, 'height': '180'},
#             {'name': '城', 'age': 18, 'height': '190'}
#            ]
# with open('persons.csv', 'w', encoding='utf-8', newline='') as file_obj:
#     writer = csv.DictWriter(file_obj, headers)
#     writer.writeheader()
#     writer.writerows(persons)

# 读取文件
# 方式一
# with open('persons.csv', 'r', encoding='utf-8') as file_obj:
#     readr = csv.reader(file_obj)
#     for x in readr:
#         print(x[0])

# 方式二
with open('persons.csv', 'r', encoding='utf-8') as file_obj:
    reader = csv.DictReader(file_obj)
    for x in reader:
        # print(x)
        print(x['name'])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值