# 准备一个html格式文档
doc = '''
<div>
<ul>
<li class="item-0"><a href="https://ask.hellobi.com/link1.html">first item</a></li>
<li class="item-1"><a href="https://ask.hellobi.com/link2.html">second item</a></li>
<li class="item-inactive"><a href="https://ask.hellobi.com/link3.html">third item</a></li>
<li class="item-1"><a href="https://ask.hellobi.com/link4.html">fourth item</a></li>
<li class="item-0"><a href="https://ask.hellobi.com/link5.html">fifth item</a>
</ul>
</div>
''' # 导入模块
from lxml import etree # etree.html是将爬取的网页数据再生成标准网页格式数据,因为有些网页不规范写的时候。
# etree.html可以解析html文件:(服务器上返回的html数据)。
# 解析HTML,返回根节点对象
# 将字符串格式的文件转化为html文档
tree = etree.HTML(doc)
# print(tree) #==> <Element html at 0x26f62635140> 表明这是一个html文档 # 调用 tostring() 方法即可输出修正后的 HTML 代码,但是结果是 bytes 类型
result = etree.tostring(tree) # 利用 decode() 方法转成 str 类型
# print(result.decode('utf-8')) # 在这里我们首先导入了 LXML 库的 etree 模块,然后声明了一段 HTML 文本,
# 调用 HTML 类进行初始化,这样我们就成功构造了一个 XPath 解析对象,
# 在这里注意到 HTML 文本中的最后一个 li 节点是没有闭合的,
# 但是 etree 模块可以对 HTML 文本进行自动修正。 # 在这里我们调用 tostring() 方法即可输出修正后的 HTML 代码,但是结果是 bytes 类型,
# 在这里我们利用 decode() 方法转成 str 类型,结果如下: '''
<html><body><div>
<ul>
<li class="item-0"><a href="https://ask.hellobi.com/link1.html">first item</a></li>
<li class="item-1"><a href="https://ask.hellobi.com/link2.html">second item</a></li>
<li class="item-inactive"><a href="https://ask.hellobi.com/link3.html">third item</a></li>
<li class="item-1"><a href="https://ask.hellobi.com/link4.html">fourth item</a></li>
<li class="item-0"><a href="https://ask.hellobi.com/link5.html">fifth item</a>
</li></ul>
</div>
</body></html>
''' # etree.parse是对标准网页格式数据进行解析用的。
# etree.parse直接接受一个文档,按照文档结构解析(本地文件)。
# etree.HTMLParser()指定解析器HTMLParser会根据文件修复HTML文件中缺失的如声明信息)
# b.html的内容就是doc
tree = etree.parse('./b.html', etree.HTMLParser())
result = etree.tostring(tree)
# print(result.decode('utf-8')) # 这次的输出结果略有不同,多了一个 DOCTYPE 的声明,不过对解析无任何影响,结果如下:
'''
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><div>
<ul>
<li class="item-0"><a href="https://ask.hellobi.com/link1.html">first item</a></li>
<li class="item-1"><a href="https://ask.hellobi.com/link2.html">second item</a></li>
<li class="item-inactive"><a href="https://ask.hellobi.com/link3.html">third item</a></li>
<li class="item-1"><a href="https://ask.hellobi.com/link4.html">fourth item</a></li>
<li class="item-0"><a href="https://ask.hellobi.com/link5.html">fifth item</a>
</li></ul>
</div></body></html>
''' # 定位
tree = etree.parse('./b.html', etree.HTMLParser())
# result = tree.xpath('/html') # [<Element html at 0x1f20a07aac0>]
# result = tree.xpath('/html//li') # 跟下面返回一致
# result = tree.xpath('/html//li[@class]')
# result = tree.xpath('/html//li[2]') # 选哪个li [<Element li at 0x13fcd6daec0>]
# result = tree.xpath('/html//li/a/text()') # 返回列表,['first item', 'second item', 'third item', 'fourth item', 'fifth item']
# result = tree.xpath('/html//li[@class="item-0"]') # 指定元素 [<Element li at 0x18664a7acc0>, <Element li at 0x18664a7ad80>]
# print(result)
li_list = tree.xpath('/html//li')
for li in li_list:
# 从每一个li中提取到文字信息
# ./当前节点下面
result = li.xpath('./a/text()')
print(result) # 返回列表
# 拿到属性值:@属性
result2 = li.xpath('./a/@href')
print(result2) # 返回列表

python爬虫-xpath基础的更多相关文章

  1. python爬虫xpath的语法

    有朋友问我正则,,okey,其实我的正则也不好,但是python下xpath是相对较简单的 简单了解一下xpath: XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML ...

  2. Python 爬虫四 基础案例-自动登陆github

    GET&POST请求一般格式 爬取Github数据 GET&POST请求一般格式 很久之前在讲web框架的时候,曾经提到过一句话,在网络编程中“万物皆socket”.任何的网络通信归根 ...

  3. [Python 练习爬虫] XPATH基础语法

    XPATH语法: // 定位根标签 / 往下层寻找 /text() 提取文本内容 /@xxx 提取属性内容 Sample: import requests from lxml import etree ...

  4. python爬虫xpath

    又是一个大晴天,因为马上要召开十九大,北京地铁就额外的拥挤,人贴人到爆炸,还好我常年挤地铁早已练成了轻功水上漂,挤地铁早已经不在话下. 励志成为一名高级测试工程师的我,目前还只是个菜鸟,难得有机会,公 ...

  5. python爬虫相关基础概念

    什么是爬虫 爬虫就是通过编写程序模拟浏览器上网,然后让其去互联网上抓取数据的过程. 哪些语言可以实现爬虫 1.php:可以实现爬虫.但是php在实现爬虫中支持多线程和多进程方面做得不好. 2.java ...

  6. Python爬虫零基础入门(系列)

    一.前言上一篇演示了如何使用requests模块向网站发送http请求,获取到网页的HTML数据.这篇来演示如何使用BeautifulSoup模块来从HTML文本中提取我们想要的数据. update ...

  7. Python爬虫 XPath语法和lxml模块

    XPath语法和lxml模块 什么是XPath? xpath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. X ...

  8. python爬虫慕课基础2

    实战演练:爬取百度百科1000个页面的数据 对于新手来说,可以把spider_main.py代码中的try和except去掉,运行报错就会在控制台出现,根据错误去调试自己的程序 发现以下错误: req ...

  9. python爬虫慕课基础1

    test_urllib2.py import http.cookiejar from urllib import request url = "http://www.baidu.com&qu ...

  10. python爬虫----XPath

    1.知道本节点元素,如何定位到兄弟元素 详情见博客 XML代码见下 bt1在文档中只出现一次,所以很容易获取到bt1中内容,那怎么根据<td class='bt1'>来获取bt2中的内容 ...

随机推荐

  1. CPU是什么?

    在程序是怎样跑起来的这本书中我们首先被询问的一个问题是"程序是什么?它是有什么组成的?而CPU又与程序有什么关系呢?",若我们能知道前两个,其实更容易将你带入讨论"CPU ...

  2. Kubernetes(K8S)安装

    Kubermetes (K8S) 安装 参考文档: 官方文档: https://kubernetes.io/zh-cn/docs/concepts/overview/components/#node- ...

  3. mac + docker+单击clickhouse+Dbeaver安装全套

    一.保证docker安装成功 看下教程:https://www.runoob.com/docker/macos-docker-install.html 二.启动桌面版docker 三.下载clickh ...

  4. C 编程异常 — double free or corruption (fasttop)

    问题:运行代码的时候程序崩溃. *** Error in `./parsing': double free or corruption (fasttop): 0x00000000023d2350 ** ...

  5. Sphinx 自动化文档

    目录 文章目录 目录 Sphinx 入门 reStructuredText 语法格式 标题.列表.正文.要点 表格 代码块 引用其他模块文件 引用静态图片 Sphinx Sphinx 是一个工具,它使 ...

  6. Asp-Net-Core开发笔记:使用ActionFilterAttribute实现非侵入式的参数校验

    前言 在现代应用开发中,确保API的安全性和可靠性至关重要. 面向切面编程(AOP)通过将横切关注点(如验证.日志记录.异常处理)与核心业务逻辑分离,极大地提升了代码的模块化和可维护性. 在ASP.N ...

  7. WPF绑定数据源到ListBox等selector的注意事项

    如果使用CollectionViewSource绑定到控件上,会导致默认选择第一项,而使用List,SelectedItem就默认为空. 要避免默认选择第一项,就要设置 ListBox.IsSynch ...

  8. .NET桌面程序混合开发之三:WebView2与JS的深度应用

    在 WebView2 控件中使用 JavaScript 根据需求自由扩展原生应用的能力.本文探讨如何在 WebView2 中使用 JavaScript,并列举如何使用高级 WebView2 特性和功能 ...

  9. 使用rem、动态vh自适应移动端

    前言 这是我的 模仿抖音 系列文章的第六篇 第一篇:200行代码实现类似Swiper.js的轮播组件 第二篇:实现抖音 "视频无限滑动"效果 第三篇:Vue 路由使用介绍以及添加转 ...

  10. 终于搞懂了!原来vue3中template使用ref无需.value是因为这个

    前言 众所周知,vue3的template中使用ref变量无需使用.value.还可以在事件处理器中进行赋值操作时,无需使用.value就可以直接修改ref变量的值,比如:<button @cl ...