python爬虫日记本爬虫进化日记Python3自学 爬虫实战

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

2017-05-07  本文已影响29人  Spareribs

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

推荐看一篇博客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()

代码要点:

在shell中使用

scrapy chell "www.baidu.com"

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

遇到的主要问题

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

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

上一篇下一篇

猜你喜欢

热点阅读