爬虫 - xpath 匹配
例题
import lxml.html test_data = """
<div>
<ul>
<li class="item-0"><a href="link1.html" id="places_neighbours__row">9,596,960first 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" id="places_neighbours__row">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
<li class="good-0"><a href="link5.html">fifth item</a></li>
</ul>
<book>
<title lang="aaengbb">111111</title>
<price id="places_neighbours__row">29.99</price>
</book>
<book>
<title lang="zh">222222</title>
<price>39.95</price>
</book>
<book>
<title>33333</title>
<price>40</price>
</book>
</div>
<a>
<book>
<title>123</title>
</book> </a> """ """
/ 从根标签开始 必须具有严格的父子关系
// 从当前标签 后续节点含有即可选出
* 通配符,选择所有
//div/book[1]/title 选择div下第一个book标签的title元素
//div/book/title[@lang="zh"]选择title属性含有lang且内容是zh的title元素
//div/book/title //book/title //title //div//title 具有相同的结果,因为使用相对路径最终都指向title
//book/title/@* 将title所有的属性值选择出来
//book/title/text() 将title的内容选择出来,使用内置text()函数
//a[@href="link1.html" and @id="places_neighbours__row"]
//a[@href="link1.html" or @id="places_neighbours__row"]
//div/book[last()]/title/text() 将最后一个book元素选出
//div/book[price > 39]/title 将book子标签price数值大于39的选择出来
//li[starts-with(@class,'item')] 将class属性前缀是item的li标签选出
//title[contains(@lang,'eng')] 将title属性lang含有eng关键字的标签选出
""" html = lxml.html.fromstring(test_data) #html_data = html.xpath('//div/book/title/text()')
#html_data = html.xpath('//div/book[1]/title/text()')
#html_data = html.xpath('//div/book/title[@lang="zh"]/text()')
#html_data = html.xpath('//div/book/title/text()')
# html_data = html.xpath('//book/title/text()')
# html_data = html.xpath('//title/text()')
# html_data = html.xpath('//div//title/text()')
# html_data = html.xpath('//book/title/@*') # html_data = html.xpath('//a[@href="link1.html" and @id="places_neighbours__row"]/text()')
#html_data = html.xpath('//a[@href="link2.html"]/text()')
# html_data = html.xpath('//div/ul/li/a[@id]/text()')
# html_data = html.xpath('//a[@href="link1.html" and @id="places_neighbours__row"]/@*')
# html_data = html.xpath('//a[@href="link1.html" and @id="places_neighbours__row"]/@href')
# html_data = html.xpath('//a[@href="link1.html" or @id="places_neighbours__row"]/text()')
# html_data = html.xpath('//div/book[last()]/title/text()')
#html_data = html.xpath('//div/book[price > 39]/title/text()')
# html_data = html.xpath('//li[starts-with(@class,"item")]/a/text()')
html_data = html.xpath('//title[contains(@lang,"eng")]/text()') for i in html_data:
print(i)
爬虫 - xpath 匹配的更多相关文章
- 笔记-爬虫-XPATH
笔记-爬虫-XPATH 1. xpath XPath是W3C的一个标准.它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计.目前有XPath1.0和XPath2.0两 ...
- 爬虫——xpath
1.什么是xpath? Xpath,全称XML Path Language,即XML路径语言.它是一门在XML之后查找信息的语言,也同样适用于HTML文档的搜索.在做爬虫的时候,我们用XPath语言来 ...
- python爬虫xpath的语法
有朋友问我正则,,okey,其实我的正则也不好,但是python下xpath是相对较简单的 简单了解一下xpath: XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML ...
- python爬虫xpath
又是一个大晴天,因为马上要召开十九大,北京地铁就额外的拥挤,人贴人到爆炸,还好我常年挤地铁早已练成了轻功水上漂,挤地铁早已经不在话下. 励志成为一名高级测试工程师的我,目前还只是个菜鸟,难得有机会,公 ...
- python中用xpath匹配文本段落内容的技巧
content = item.xpath('//div[@class="content"]/span')[0].xpath('string(.)') content = item. ...
- Python网络爬虫-xpath模块
一.正解解析 单字符: . : 除换行以外所有字符 [] :[aoe] [a-w] 匹配集合中任意一个字符 \d :数字 [0-9] \D : 非数字 \w :数字.字母.下划线.中文 \W : 非\ ...
- XPath匹配标签使用text()判断获取结果失败/为空的问题及解决方法
XPath当匹配标签判断text()判断内容失败的问题及解决 问题复现 在爬取网站的时候我使用XPath去抓取网页上的内容,XPath表达式来精准获取需要的标签内容. 当我对如下一段html代码编写X ...
- Python爬虫 XPath语法和lxml模块
XPath语法和lxml模块 什么是XPath? xpath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. X ...
- [Python 练习爬虫] XPATH基础语法
XPATH语法: // 定位根标签 / 往下层寻找 /text() 提取文本内容 /@xxx 提取属性内容 Sample: import requests from lxml import etree ...
随机推荐
- C#-创建并添加TXT文件
public static void WriteToText(string txtContent, string txtPath) { using (FileStream fs = new FileS ...
- C#默认OrderBy()函数的排序问题
昨天在客户现场遇到一个很奇葩的问题,猜下下面代码的排序输出是什么: static void Main() { List<", "1:"}; foreach(stri ...
- 浅谈count(*)、count(1)、count(列名)
count(*) 和 count(1)和count(列名)区别 执行效果上: count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL count(1)包括了所有列, ...
- 为什么java中只允许继承一个类?
一个类只能继承一个其他的类 在Java语言中禁止多重继承:一个类可以具有多个直接父类.多重继承不合法的原因是容易引发意义不明确.例如,有一个类C,如果允许它同时继承A类与B类(class C ex ...
- 使用MDScratchImageView实现刮奖效果
使用MDScratchImageView实现刮奖效果 https://github.com/moqod/iOS-Scratch-n-See 最终效果: 其实这是使用了别人的东西而已:) 源码: // ...
- centos yum升级php
centos yum升级php5.3.3到最5.6.3 不要轻易升级,否则后果很严重! 注意事项: 1 升级后之前的php扩展不会丢失 自动会安装对应最新php的扩展2 升级后需重启下apache 才 ...
- 小米OJ 有多少个等差数列
题目链接 https://code.mi.com/problem/list/view?id=20 代码 #include <bits/stdc++.h> using namespace s ...
- Linux 系统网络问题处理集[包含VM处理]
1.1. 新操作系统ping不同主机: 检查Linux服务器网段是否有etho的IP 查看/关闭防火墙 查看:service iptables status 关闭:service iptables s ...
- [EffectiveC++]item04:Make sure the objects are initialized before they're used
28 页 C++规定,对象的成员变量的初始化动作发生在进入构造函数本体之前. 构造函数的一个较佳的写法是,使用所谓的member initialization list替换赋值动作. 29页 但请立下 ...
- Spring Security 静态资源访问
在搞 Spring Security 的时候遇到了一个小坑,就是静态资源加载的问题. 当我们继承了 WebSecurityConfigurerAdapter的时候,会去重写几个方法.去设定我们自己要过 ...