`
uule
  • 浏览: 6351593 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

【爬虫解析1】:XPath总结

 
阅读更多

XPATH教程

 

1、加载 XML 文档

所有现代浏览器都支持使用 XMLHttpRequest 来加载 XML 文档的方法。

针对大多数现代浏览器的代码:

var xmlhttp=new XMLHttpRequest()

针对古老的微软浏览器(IE 5 和 6)的代码:

var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")

 

 

2、选取节点

Internet Explorer 使用 selectNodes() 方法从 XML 文档中的选取节点:

xmlDoc.selectNodes(xpath);

 

Firefox、Chrome、Opera 以及 Safari 使用 evaluate() 方法从 XML 文档中选取节点:

xmlDoc.evaluate(xpath, xmlDoc, null, XPathResult.ANY_TYPE,null);

 

 

3、

选取所有 title

/bookstore/book/title

 

选取第一个 book 的 title

/bookstore/book[1]/title

这里有一个问题。上面的例子在 IE 和其他浏览器中输出不同的结果。

IE5 以及更高版本将 [0] 视为第一个节点,而根据 W3C 的标准,应该是 [1]。

为了解决 IE5+ 中 [0] 和 [1] 的问题,可以为 XPath 设置语言选择(SelectionLanguage)。

xml.setProperty("SelectionLanguage","XPath");

xml.selectNodes("/bookstore/book[1]/title");

 

选取所有价格

下面的例子选取 price 节点中的所有文本:

/bookstore/book/price/text()

 

选取价格高于 35 的 price 节点

下面的例子选取价格高于 35 的所有 price 节点:

/bookstore/book[price>35]/price

 

选取价格高于 35 的 title 节点

下面的例子选取价格高于 35 的所有 title 节点:

/bookstore/book[price>35]/title

 

例子:

<bookstore>
	<book category="COOKING">
	  <title lang="en">Everyday Italian</title>
	  <author>Giada De Laurentiis</author>
	  <year>2005</year>
	  <price>30.00</price>
	</book>
</bookstore>

 

方法1:

path="/bookstore/book/title"
var nodes=xml.selectNodes(path);

for (i=0;i<nodes.length;i++)
  {
  document.write(nodes[i].childNodes[1].nodeValue + "<br>");
  }
}

 

方法2:

path="/bookstore/book/title/text()"
var nodes=xml.selectNodes(path);

for (i=0;i<nodes.length;i++)
  {
  document.write(nodes[i].nodeValue + "<br>");
  }
}

  

结果都为Everyday Italian

 

 ========================================================================

 Scrapy中使用XPath:

<html>
 <head>
  <base href='http://example.com/' />
  <title>Example website</title>
 </head>
 <body>
  <div id='images'>
   <a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>
   <a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>
   <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>
   <a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>
   <a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>
  </div>
 </body>
</html>

 

构造选择器(selectors)

Scrapy selector是以 文字(text) 或 TextResponse 构造的 Selector 实例。 其根据输入的类型自动选择最优的分析方法(XML vs HTML):

 

>>> from scrapy.selector import Selector

>>> from scrapy.http import HtmlResponse

 

以文字构造:

>>> body = '<html><body><span>good</span></body></html>'

>>> Selector(text=body).xpath('//span/text()').extract()

[u'good']

 

以response构造:

>>> response = HtmlResponse(url='http://example.com', body=body)

>>> Selector(response=response).xpath('//span/text()').extract()

[u'good']

 

为了方便起见,response对象以 .selector 属性提供了一个selector, 您可以随时使用该快捷方法:

>>> response.selector.xpath('//span/text()').extract()

[u'good']

 

 

Scrapy提供了两个实用的快捷方式: response.xpath() 及 response.css():

 

>>> response.xpath('//title/text()')

[<Selector (text) xpath=//title/text()>]

 

>>> response.css('title::text')

[<Selector (text) xpath=//title/text()>]

 

 

 

>>> response.xpath('//base/@href').extract()

[u'http://example.com/']

 

>>> response.css('base::attr(href)').extract()

[u'http://example.com/']

 

>>> response.xpath('//a[contains(@href, "image")]/@href').extract()

[u'image1.html',

 u'image2.html',

 u'image3.html',

 u'image4.html',

 u'image5.html']

 

>>> response.css('a[href*=image]::attr(href)').extract()

[u'image1.html',

 u'image2.html',

 u'image3.html',

 u'image4.html',

 u'image5.html']

 

>>> response.xpath('//a[contains(@href, "image")]/img/@src').extract()

[u'image1_thumb.jpg',

 u'image2_thumb.jpg',

 u'image3_thumb.jpg',

 u'image4_thumb.jpg',

 u'image5_thumb.jpg']

 

>>> response.css('a[href*=image] img::attr(src)').extract()

[u'image1_thumb.jpg',

 u'image2_thumb.jpg',

 u'image3_thumb.jpg',

 u'image4_thumb.jpg',

 u'image5_thumb.jpg']

 

 

>>> links = response.xpath('//a[contains(@href, "image")]')

>>> links.extract()

[u'<a href="image1.html">Name: My image 1 <br><img src="image1_thumb.jpg"></a>',

 u'<a href="image2.html">Name: My image 2 <br><img src="image2_thumb.jpg"></a>',

 u'<a href="image3.html">Name: My image 3 <br><img src="image3_thumb.jpg"></a>',

 u'<a href="image4.html">Name: My image 4 <br><img src="image4_thumb.jpg"></a>',

 u'<a href="image5.html">Name: My image 5 <br><img src="image5_thumb.jpg"></a>']

 

 

使用相对XPaths

记住如果你使用嵌套的选择器,并使用起始为 / 的XPath,那么该XPath将对文档使用绝对路径,而且对于你调用的 Selector 不是相对路径。

 

比如,假设你想提取在 <div> 元素中的所有 <p> 元素。首先,你将先得到所有的 <div> 元素:

>>> divs = response.xpath('//div')

 

开始时,你可能会尝试使用下面的错误的方法,因为它其实是从整篇文档中,而不仅仅是从那些 <div> 元素内部提取所有的 <p> 元素:

>>> for p in divs.xpath('//p'):  # this is wrong - gets all <p> from the whole document

...     print p.extract()

 

下面是比较合适的处理方法(注意 .//p XPath的点前缀):

>>> for p in divs.xpath('.//p'):  # extracts all <p> inside

...     print p.extract()

 

另一种常见的情况将是提取所有直系 <p> 的结果:

>>> for p in divs.xpath('p'):

...     print p.extract()

 

 

 

 

分享到:
评论

相关推荐

    爬虫解析库:XPath

    所以在做爬虫时完全可以使用 XPath 做相应的信息抽取。 1. XPath 概览     XPath 的选择功能十分强大,它提供了非常简洁明了的路径选择表达式。另外,它还提供了超过 100 个内建函数,用于字符串、数值、时间的...

    Python爬虫解析XPATH讲义

    Python爬虫解析XPATH讲义 Python爬虫解析XPATH讲义是使用Python语言进行网络爬虫开发时,使用XPATH语言来提取HTML和XML文档中的信息的技术讲义。在本讲义中,我们将学习XPATH语言的基本概念、安装方法、路径表达式...

    XPath Helper:chrome爬虫网页解析工具

    1. **快速选取元素**:在浏览器中浏览网页时,点击XPath Helper图标,然后选择网页上的任何元素,它将自动为你生成对应的XPath路径。这在尝试定位特定元素时非常方便。 2. **测试XPath表达式**:输入一个XPath...

    Python爬虫Chrome网页解析工具-XPath Helper插件

    在Python爬虫开发中,XPath Helper是一款非常实用的Chrome浏览器插件,它为开发者提供了便捷的方式来解析和测试网页结构,特别是在处理XML或HTML文档时。XPath(XML Path Language)是一种在XML文档中查找信息的语言...

    爬虫利器:Python + Xpath Helper插件

    在使用XPath表达式时,我们可以先通过谷歌浏览器安装XPath插件,随后在爬虫程序中调用XPath表达式,解析网页排版结构,从而准确地定位到需要爬取的内容。 在获取网页图片链接后,可以通过Python进行批量下载。图片...

    一个简单的爬虫demo使用了一些Xpath技术

    总结,这个爬虫demo是学习和实践Xpath技术的良好起点,它揭示了如何使用Python和Xpath来提取网页数据,这对于数据分析、信息监控或者构建定制化的信息获取系统都是非常有价值的技能。同时,理解并熟练掌握Xpath可以...

    爬虫解析_xpath基本应用(解析本地文件和服务器响应).zip

    常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...

    24期爬虫-03-xpath数据解析1-陈麟.py

    24期爬虫-03-xpath数据解析1-陈麟.py

    火狐老版本+xpath插件(适合python+xpath爬虫使用)

    火狐老版本与XPath插件的组合在Python网络爬虫领域具有重要的应用价值。XPath是一种在XML文档中查找信息的语言,对于数据提取和解析尤其有效。在这个压缩包中,我们找到了火狐的老版本浏览器和一个专门针对XPath的...

    Python爬虫入门教程:超级简单的Python爬虫教程.zip

    你可以学习如何通过CSS选择器或XPath表达式定位元素,以及如何提取文本、属性值等信息。 此外,爬虫还需要考虑反爬虫策略。网站可能会设置各种限制,如IP封锁、User-Agent检测、验证码等。教程会教你如何设置代理、...

    java爬虫登录验证码解析.zip

    常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...

    爬虫_8 xpath的使用 好段子爬取_爬虫_python_

    在Python的网络爬虫开发中,XPath是一种非常重要的数据提取工具...总之,XPath是Python爬虫开发者的重要工具,掌握其用法能够帮助你更高效地解析和提取网页数据。不断实践和学习,你将能够应对各种复杂的网页抓取任务。

    Google浏览器爬虫xpath插件.zip

    在爬虫技术中,XPath被广泛用于解析和定位网页元素,以便提取所需数据。 ### XPath插件安装步骤 1. **下载Chrome扩展程序**: 首先,你需要访问Chrome Web Store,搜索XPath相关的插件。常见的XPath插件有"Selector...

    python爬虫之xpath入门(csdn)————程序.pdf

    Python 爬虫之 XPath 入门 Python 爬虫是指使用 Python 语言来进行网络爬虫的操作,而 XPath 则是 XML 文档中搜索内容的一门语言。由于 HTML 是 XML 的一个子集,因此 XPath 也可以用于解析 HTML 文档。 在 Python...

    24期爬虫-03-xpath数据解析-邓苏杭-歌曲排名.py

    24期爬虫-03-xpath数据解析-邓苏杭-歌曲排名.py

    电商网站python爬虫(selenium+xpath+peewee)

    2. beautifulsoup4解析结果dom,提取有用字段 3. peewee存结果到数据库 4. 同时以PIL增加一份结果到excel表格 运行步骤: # 爬虫(浏览器类) ## justfashionnow [justfashionnow](https://www.justfashionnow.com) ...

    爬虫解析_jsonpath的基本使用和爬取淘票票的城市.zip

    常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...

    XPath Helper 2.0.2网页插件

    XPath Helper 2.0.2 是一款非常实用的网页插件,主要针对的是网页数据抓取和解析领域。XPath(XML Path Language)是一种在XML文档中查找信息的语言,它允许我们通过路径表达式来选取XML文档中的节点,包括元素、...

    爬虫技术-Xpath解析数据.pptx

    爬虫技术是网络数据抓取的重要手段,而Xpath则是爬虫中用于解析HTML或XML文档的关键技术。Xpath全称为XML Path Language,它设计用于在XML和HTML文档中查找、选取特定的信息。通过学习和掌握Xpath,我们可以高效地从...

Global site tag (gtag.js) - Google Analytics