天天看点

Xpath初级的一个例子

爬虫里面最难的问题就是捕获数据,而捕获数据现在市面上至少有四种方法:

1)利用urllib.request.urlopen(url)获得的源代码是str模式,使用.find找到头和尾的光标位,然后利用[光标位1:光标位2]来获取内容;

2)正则表达式,即(.*?),虽然正则在写上面最无脑,但是错误率最高,捕获网页用处实在不大,捕获一些文本文件的时候还可以一用。而且(.*?)能搜寻开头值不能搜寻末尾值,如下图。

<a href="http://s4.51cto.com/wyfs02/M01/79/27/wKiom1aKHqDA24uHAADIbfHvH54265.png" target="_blank"></a>

3)Beautiful Soup,这个相对要好一点,先from bs4 import BeautifulSoup启动模块,然后 soup=beautiful.soup(url,"html.parser",from-encoding="utf-8")解析网页源代码,然后soup.find_all(对应的节点标签),输出即可。

4)Xpath,这玩意目前好像只能支持2.7,没有支持3.5版本的。而且mysql要链接python的话,官方插件只能认可2.7,所以说里外里都要回归2.7。

Xpath的操作步骤,先from lxml from etree启动模块,然后selector=etree.HTML(url)来将html转成etree识别的东西,再设定一个变量=selextor.xpath(节点路径),然后输出

做一个Xpath的例子。

html='''

  &lt;html&gt;

    &lt;head lang="en"&gt;

      &lt;meta charset="utf-8"&gt;

      &lt;title&gt;TEST&lt;/title&gt;

    &lt;/head&gt;

  &lt;body&gt;

    &lt;div id="content"&gt;

      &lt;ul id="useful"&gt;

        &lt;li&gt;THIS IS FIRST MESSAGE!&lt;/li&gt;

        &lt;li&gt;THIS IS SECOND MESSAGE!&lt;/li&gt;

        &lt;li&gt;THIS IS THIRD MESSAGE!&lt;/li&gt;

      &lt;/ul&gt;

      &lt;ul id="useless"&gt;

        &lt;li&gt;ONE no&lt;/li&gt;

        &lt;li&gt;TWO no&lt;/li&gt;

        &lt;li&gt;THREE no&lt;/li&gt;

      &lt;div id="url"&gt;

        &lt;a href="http://www.baidu.com" title="nishiruozhi"&gt;BAIDU&lt;/a&gt;

        &lt;a href="http://www.sina.com.cn" title="woshitiancai"&gt;SINA&lt;/a&gt;

      &lt;/div&gt;

    &lt;/div&gt;

  &lt;/body&gt;

  &lt;/html&gt;'''

from lxml import etree

selector=etree.HTML(html)

content=selector.xpath('//body/div/ul[@id="useful"]/li/text()')

print content[0]

这个的输出结果就是:THIS IS FIRST MESSAGE

若改成

for each in content:

  print(each)

这个的输出结果就是:

THIS IS FIRST MESSAGE!

THIS IS SECOND MESSAGE!

THIS IS THIRD MESSAGE!

 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1731398