python中的xpath,为什么'/html'就匹配不到

问题描述

python中的xpath,为什么'/html'就匹配不到
 from lxml.html.soupparser import fromstring
import urllib2
response = urllib2.urlopen('http://www.haojiazhang123.com')
html = response.read()
root = fromstring(html)
desc_list = root.xpath('/html/body/div[1]/div[3]/ul/li[2]/a')
print desc_list

但是,把xpath改成'//div[@class="navi"]/ul/li[2]/a'就匹配到了呢?

解决方案

python XPath

解决方案二:

html上层还有没有节点。然后就就是你的整个路径正确吗

时间: 2024-10-30 21:25:22

python中的xpath,为什么'/html'就匹配不到的相关文章

数据-Python中这个是什么意思——line.split(' ') 谢谢

问题描述 Python中这个是什么意思--line.split('t') 谢谢 这是处理的一个excel数据表格用到的. 每部分是什么意思,用来做什么的? 解决方案 对于每一行,按照制表符切割字符串,得到的结果构成一个数组,数组的每个元素代表一行中的一列. 解决方案二: Python split()通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串. 此处是以空格分割字符串line. split详细教程,参考:http://www.runoob.com/pyt

python copy-求大神名明示python中copy 与 '=' 的区别

问题描述 求大神名明示python中copy 与 '=' 的区别 如图, a=b // a is b c=b.copy() // c not b 为什么呢== 其次,在上图的基础上,为什么 a=1000 后,b依然不变,在这点上貌似 = 与 copy 都这样...混成一锅粥了,求高人指点迷津 解决方案 = 是引用,python中缺省都是引用 copy是复制一个对象.所以产生一个新对象,里面的数据复制了一份 解决方案二: - A shallow copy constructs a new comp

Python中利用原始套接字进行网络编程的示例

  这篇文章主要介绍了Python中利用原始套接字进行网络编程的示例,使用sock_raw接受和发送数据包可以避开网络协议的诸多限制,需要的朋友可以参考下 在实验中需要自己构造单独的HTTP数据报文,而使用SOCK_STREAM进行发送数据包,需要进行完整的TCP交互. 因此想使用原始套接字进行编程,直接构造数据包,并在IP层进行发送,即采用SOCK_RAW进行数据发送. 使用SOCK_RAW的优势是,可以对数据包进行完整的修改,可以处理IP层上的所有数据包,对各字段进行修改,而不受UDP和TC

详解Python中的序列化与反序列化的使用

  这篇文章主要介绍了详解Python中的序列化与反序列化的使用,针对pickle和cPickle对象进行了探究,需要的朋友可以参考下 学习过marshal模块用于序列化和反序列化,但marshal的功能比较薄弱,只支持部分内置数据类型的序列化/反序列化,对于用户自定义的类型就无能为力,同时marshal不支持自引用(递归引用)的对象的序列化.所以直接使用marshal来序列化/反序列化可能不是很方便.还好,python标准库提供了功能更加强大且更加安全的pickle和cPickle模块. cP

Python中线程编程之threading模块的使用详解

  这篇文章主要介绍了Python中线程编程之threading模块的使用详解,由于GIL的存在,线程一直是Python编程中的焦点问题,需要的朋友可以参考下 threading.Thread Thread 是threading模块中最重要的类之一,可以使用它来创建线程.有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入.下面分别举例说明.先来看看通过继承th

Python中有趣在

  这篇文章主要介绍了Python中有趣在__call__函数,本文直接给出一个使用实例,以此来讲解__call__函数的用法,需要的朋友可以参考下 Python中有一个有趣的语法,只要定义类型的时候,实现__call__函数,这个类型就成为可调用的. 换句话说,我们可以把这个类型的对象当作函数来使用,相当于 重载了括号运算符. ? 1 2 3 4 5 class g_dpm(object): def __init__(self, g): self.g = g def __call__(self

详解Python中threading模块的几个常用方法

  这篇文章主要介绍了举例详解Python中threading模块的几个常用方法,threading模块用来创建和操作线程,是Python学习当中的重要知识,需要的朋友可以参考下 threading.Thread Thread 是threading模块中最重要的类之一,可以使用它来创建线程.有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入.下面分别举例说明.

python中argparse模块用法实例详解

  本文实例讲述了python中argparse模块用法.分享给大家供大家参考.具体分析如下: 平常在写命令行工具的时候,经常会带参数,所以用python中的argparse来实现. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 # -*-

详解Python中time()方法的使用的教程

  这篇文章主要介绍了详解Python中time()方法的使用的教程,是Python入门学习中的基础知识,需要的朋友可以参考下 time()方法返回时间,在UTC时代以秒表示浮点数. 注意:尽管在时间总是返回作为一个浮点数,并不是所有的系统提供时间超过1秒精度.虽然这个函数正常返回非递减的值,就可以在系统时钟已经回来了两次调用期间返回比以前调用一个较低的值. 语法 以下是time()方法的语法: 参数 NA 返回值 此方法返回的时间,因为时代以秒表示浮点数(在UTC). 例子 下面的例子显示ti