# 准备一个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. 【GUI软件】抖音搜索结果批量采集,支持多个关键词、排序方式、发布时间筛选等!

    目录 一.背景介绍 1.1 爬取目标 1.2 演示视频 1.3 软件说明 二.代码讲解 2.1 爬虫采集模块 2.2 软件界面模块 2.3 日志模块 三.获取源码及软件 一.背景介绍 1.1 爬取目标 ...

  2. 简说Python之数字和变量

    目录 Python的运算 Python关于进制的一些描述 十六进制的显示 八进制和二进制的显示 转成二进制,八进制,十六进制的方法 二,八,十六进制转回十进制的方法 Python变量 数字类型 浮点数 ...

  3. 免费的visual studio智能代码插件——CodeGeeX

    CodeGeeX是什么?什么是CodeGeeX? CodeGeeX是一款基于大模型的智能编程助手,它可以实现代码的生成与补全,自动为代码添加注释,不同编程语言的代码间实现互译,针对技术和代码问题的智能 ...

  4. ruby 常用代码片段

    # 文件的当前目录 puts __FILE__ # string.rb # 文件的当前行 puts __LINE__ # 6 #文件的当前目录 puts __dir__ #/media/haima/3 ...

  5. ansible(3)--ansible的相关命令行工具

    目录 1 ansible命令详解 2 ansible-doc显示模块帮助信息 3 ansible-playbook 4 ansible-galaxy 5 ansible-console 1 ansib ...

  6. 基本base样式

    /* 去除常见标签默认的 margin 和 padding */ body, h1, h2, h3, h4, h5, h6, p, ul, ol, li, dl, dt, dd, input { ma ...

  7. Python 潮流周刊#51:用 Python 绘制美观的图表

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  8. 微信小程序,wx.getUserProfile接口将被收回,新的头像获取方式永久保存

    微信文档:https://developers.weixin.qq.com/miniprogram/dev/framework/ 新的获取头像方式:https://developers.weixin. ...

  9. 改造 Kubernetes 自定义调度器

    原文出处:改造 Kubernetes 自定义调度器 | Jayden's Blog (jaydenchang.top) Overview Kubernetes 默认调度器在调度 Pod 时并不关心特殊 ...

  10. nginx启动流程

    nginx启动流程 1. 根据命令行决定配置文件路径 2. 如果处于升级中则监听环境变量里传递的监听句柄 3. 调用所有核心模块的create_conf方法生成存放配置项的结构体 4. 针对所有核心模 ...