# 准备一个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. Docker 笔记汇总

    一.名词说明 Dockerfile 镜像构建文件 Docker Images 镜像:生成容器 Docker Containers 容器:微型系统 Docker Volumes 卷:存放容器运行数据 D ...

  2. 一篇文章掌握Python中多种表达式的使用:算术表达式、字符串表达式、列表推导式、字典推导式、_集合推导式、_生成器表达式、逻辑表达式、函数调用表达式

    Python 中的表达式可以包含各种元素,如变量.常量.运算符.函数调用等.以下是 Python 表达式的一些分类及其详细例子: 1. 算术表达式 算术表达式涉及基本的数学运算,如加.减.乘.除等. ...

  3. C 语言编程 — 输入/输出与文件操作

    目录 文章目录 目录 前文列表 输入/输出 scanf() 和 printf() getchar() 和 putchar() 文件操作 打开文件 关闭文件 写入文件 读取文件 二进制 I/O 函数 前 ...

  4. 移动通信网络中的 FDD/TDD 无线帧

    目录 文章目录 目录 前文列表 无线帧 FDD 与 TDD 的区别 FDD 无线帧 TDD 无线帧 前文列表 <移动通信网络中的资源类型> 无线帧 LTE 支持两种类型的无线帧:FDD(F ...

  5. Laravel框架中数据库分表时Model使用方法

    前言: 0.最近在使用laravel框架做MySQL分表的时候经过实践和踩坑,总结了以下3种可行的分表方法,亲测可用. 1.本人公司做的是SaaS系统,以店铺为维度.店铺id(shop_id) 命名规 ...

  6. PHP常用排序算法02——快速、归并

    接着上篇,我们继续来学习下工程中最常用的排序算法,适合大规模数据排序的算法,快速排序(quickSort)和归并排序(mergeSort). PS:对排序等算法还不太了解的同学,可以去看下这个链接哦, ...

  7. Vue实现商品详情鼠标移动+放大显示图片细节

    效果图 代码实现 <template> <div> <div style="position: relative;" class="box& ...

  8. k8s多集群切换:使用kubeconfig文件管理多套kubernetes(k8s)集群

    目录 一.系统环境 二.前言 三.kubeconfig文件 四.kubernetes(k8s)多集群切换 一.系统环境 服务器版本 docker软件版本 CPU架构 CentOS Linux rele ...

  9. .NET快速实现网页数据抓取

    前言 今天我们来讲讲如何使用.NET开源(MIT License)的轻量.灵活.高性能.跨平台的分布式网络爬虫框架DotnetSpider来快速实现网页数据抓取功能. 注意:为了自身安全请在国家法律允 ...

  10. 三元运算符 JAVA12

    Java 提供了一个特别的三元运算符(也叫三目运算符) 表示:条件运算符的符号表示为"? :",使用该运算符时需要有三个操作数,因此称其为三目运算符. 举例一 int x,y,z; ...