码迷,mamicode.com
首页 > 其他好文 > 详细

第六篇 xpath的用法

时间:2017-09-30 10:07:13      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:tor   sele   logs   过滤   使用   方法   col   blog   project   

技术分享

技术分享

技术分享

技术分享

 使用pycharm debug调试效率会比较慢,因为每次调试都需要向url发送请求,等返回信息,scrapy提供一种方便调试的功能,如下:

>>>(third_project) bigni@bigni:pachong$ scrapy shell http://blog.jobbole.com/112239/
>>> title = response.xpath(‘//*[@id="post-112239"]/div[1]/h1‘)
>>> title
[<Selector xpath=‘//*[@id="post-112239"]/div[1]/h1‘ data=‘<h1>谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征</h1>‘>]
>>> title.extract()
[‘<h1>谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征</h1>‘]
>>> title = response.xpath(‘//*[@id="post-112239"]/div[1]/h1/text()‘)
>>> title
[<Selector xpath=‘//*[@id="post-112239"]/div[1]/h1/text()‘ data=‘谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征‘>]

extract()方法可以取到select list里的date,text()方法可以取到内容。

In [37]: title2 = response.xpath("//*[@id=‘post-112239‘]/div[1]/h1").extract()

In [38]: title2
Out[38]: [‘<h1>谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征</h1>‘]

In [39]: title2 = response.xpath("//*[@id=‘post-112239‘]/div[1]/h1")

In [40]: title2
Out[40]: [<Selector xpath="//*[@id=‘post-112239‘]/div[1]/h1" data=‘<h1>谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征</h1>‘>]

In [41]: title2 = response.xpath("//*[@id=‘post-112239‘]/div[1]/h1/text()").extr
    ...: act()

In [42]: title2
Out[42]: [‘谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征‘]

In [43]: 

 

PS:在chrome里,按F12看到的代码是加载完所有插件后的,比如JS,如果通过通过根路径来定位要找的内容是容易出错的,因为xpath搜索的不会把js等生成的元素计算在内,这个可以通过鼠标右键查看源码来判断哪些是js生成的,然后过滤掉。

对于属性里有多个值的情况,比如class 里有多个值:

技术分享

可以使用scrapy内置的contains方法:

In [44]: ret = response.xpath("//div[contains(@class,‘post-112239‘)]")

In [45]: ret
Out[45]: [<Selector xpath="//div[contains(@class,‘post-112239‘)]" data=‘<div class="post-112239 post type-post s‘>]

 

第六篇 xpath的用法

标签:tor   sele   logs   过滤   使用   方法   col   blog   project   

原文地址:http://www.cnblogs.com/laonicc/p/7446553.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!