对于网页数据抓取,有BeautifulSoup、lxml以及正则表达式三种方法,其中正则表达式过于复杂,而beautifulsoup和lxml使用起来较为方便。以前简单使用过beautifulsoup(美味汤),后面为了扩展一下,熟悉一下lxml进行数据抓取。
先贴一个lxml的简单框架:
其中,最主要的在于xpath路径的获取和解析,而XPath就是地址,具体地,就是需要知道所要寻找的内容处在哪个地址下。一般而言,我们可以根据开发者工具来定位我们需要的元素,然后右击选择其所在xpath,选择初步的路径,如下图所示,
这只是一种简单的方法,更重要的,需要掌握xpath的语法规则,下面分别论述。
使用xpath获取信息,主要包括获取本文和获取属性,基本用法为
对比可以看出,一个是采用text()获取文本,一个是采用@属性获取属性值。而前面标签后面方括号就是来对标签进行筛选的。一般而言,通过选择器可以获取诸如/html/body/div[@class="useful"]/ul/li/text()的信息,但是开头的信息没有标志性,采用//div[@class="useful"]/ul/li/text()即可。
这个地方即涉及到了xpath的语法选择,主要包括以下几点:
而在选择器方面,包括以下几个
除此之外,在获取了一个元素之后,我们需要获取其下面元素的属性,即要对基于xpath获取的元素再次采用xpath,此时的获取方式为:
另外,我们也可以获取节点下面所有的字符串,方法为string(),示例为:
懒得打字了,下面的截图来自W3Cschool, >var oIpt = documentgetElementsByTagName('input')
oIpt[0]onclick=function(){
alert(thisid)
}
html部分
<input type="button" id="myid" value="点击" name="">输入同理
1、首先自己编写了一个网页。
2、如图,在浏览器中打开网页。然后//div,就可以找到页面中的所有div了,因为//表示的是任意目录下查找。如图,页面有两个div,所以可以找到两个。
3、还可以用类来排除多余的div,比如要查找类为a的div,可以在div后面用[@class="类名"]来指定,这样没有类名a的div就会被过滤掉,当然,还可以用id,把class改为[@id="id名"]即可。
4、那么如果想找div下面的a标签怎么办,同样,还是用//,这样div下面的非a标签就会被跳过,直接去找a标签。
5、如果要获取a标签的href,那么可以获取到a标签后用/@href即可获得。
6、如果是获取文本的话,可以用text()这个方法,就会得到a标签里面的内容。
7、如图,斜杠/表示的是获取子元素,比如div下面有两个子元素p,那么//div[2]/p获取的就是第二个div的子元素p。这样简单的xpath就分析完了。
1、Xpath也可以使用元素的属性值来定位,以百度输入框和搜索按钮为例
2、通过id属性值来定位:注释://表示在当前页面的某个目录下,input表示定位元素的标签名,[@id='kw'],表示这个元素的id属性值等于kw
3、通过name和class属性值来定位:如果不想指定标签名,则也可以用代替,当然,使用Xpath不局限于id,name和class这三个属性值,元素的任意属性值都可以使用,只要它是唯一的标识元素
4、层级与属性结合。如果一个元素本身没有可以唯一标识这个元素的属性值,那么我们可以找到其上一级元素,如果它的上一级有唯一可以标识属性的值,也可以拿来使用
5、使用逻辑运算符。如果一个属性不能唯一地区分一个元素,我们还可以使用逻辑运算符连接多个属性来查找元素。例如,假如要查找第一行元素,则:
大概是这样的吧 可以试试
jquery有个 parents()
比如选了一个div id为test,想整xpath的话 $("#test")parents();这样获取的是一个数组,
var aa = [];
$('#test')parents()each(function(){
aapush(thistagName);
});
获取标签名后 就可以替换成xpath了 不过需要注意的是 这个不止获取到body 最后一个元素应该是到html,也不太确定,反正在firefox上是这样的
你应该是写错了吧,你改成 //div[@class="proLis"]//span/text() 试试。单斜杆表示只取其儿子辈的节点,你的span标签都是N辈了
再说,没有必要自己写,你可以在chrome浏览器装一个ChroPath插件,点击元素,然后就会出来相应的xpath表达式。
以上就是关于Python lxml包下面的xpath基本用法全部的内容,包括:Python lxml包下面的xpath基本用法、如何实现在网页中点击或者输入时获取此元素的id或者xpath之类、xpath能获取div下的所有tr中的td内容么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)