爬虫笔记(四) - 关于Scrapy页面信息定位

关于页面信息定位,我习惯用的方法有三种,这三种方法基本能通吃

  • css
  • xpath
  • re

推荐看一篇博客Python爬虫利器二之Beautiful Soup的用法
还可以去看Selectors官方文档
在定位同一个位置有多中解决方法,选择合适的才重要

xpath使用

假设有一段这样的html

<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 />![](image1_thumb.jpg)</a>
   <a href='image2.html'>Name: My image 2 <br />![](image2_thumb.jpg)</a>
   <a href='image3.html'>Name: My image 3 <br />![](image3_thumb.jpg)</a>
   <a href='image4.html'>Name: My image 4 <br />![](image4_thumb.jpg)</a>
   <a href='image5.html'>Name: My image 5 <br />![](image5_thumb.jpg)</a>
  </div>
 </body>
</html>
xpath('//title/text()').extract()
[u'Example website']

xpath('//base/@href').extract()
[u'http://example.com/']

xpath('//a[contains(@href, "image")]/@href').extract()
[u'image1.html',
 u'image2.html',
 u'image3.html',
 u'image4.html',
 u'image5.html']

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']

xpath('//header/h1[1][@class="article-title"]/a/text()').extract()

代码要点:

  • text()
  • extract()
  • a[contains(@href, “image”)]
  • h1[@class=”article-title”]
  • @href和@src

在shell中使用

scrapy chell "www.baidu.com"

sel.xpath("使用上文中的xpath语法")

遇到的主要问题

  • 标签没有闭合,用re去匹配吧
用bs4去找zhang这个标签,但是没有闭合的情况下,定位不到这个位置
<div>
  <zhang>发布于 2017:05:07
  <zhang>发布于 2017:05:07
</div>
  • 标签无法定位,用re去匹配吧
即使闭合了,你发现没有id没有name没有class,也是很难定位的
<div>
  <zhang>发布于 2017:05:07</zhang>
  <zhang>发布于 2017:05:07</zhang>
</div>

针对定位问题,我会不断总结,将经验写进这个博客,持续更新中~~~

    原文作者:Spareribs
    原文地址: https://www.jianshu.com/p/ec02f91def8b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞