第六篇 xpath的用法
2024-08-23 12:57:55
使用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 []: title2 = response.xpath("//*[@id='post-112239']/div[1]/h1").extract() In []: title2
Out[]: ['<h1>谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征</h1>'] In []: title2 = response.xpath("//*[@id='post-112239']/div[1]/h1") In []: title2
Out[]: [<Selector xpath="//*[@id='post-112239']/div[1]/h1" data='<h1>谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征</h1>'>] In []: title2 = response.xpath("//*[@id='post-112239']/div[1]/h1/text()").extr
...: act() In []: title2
Out[]: ['谷歌用两年时间研究了 180 个团队,发现高效团队有这五个特征'] In []:
PS:在chrome里,按F12看到的代码是加载完所有插件后的,比如JS,如果通过通过根路径来定位要找的内容是容易出错的,因为xpath搜索的不会把js等生成的元素计算在内,这个可以通过鼠标右键查看源码来判断哪些是js生成的,然后过滤掉。
对于属性里有多个值的情况,比如class 里有多个值:
可以使用scrapy内置的contains方法:
In []: ret = response.xpath("//div[contains(@class,'post-112239')]") In []: ret
Out[]: [<Selector xpath="//div[contains(@class,'post-112239')]" data='<div class="post-112239 post type-post s'>]
如果要爬取下面这个内容,可以这么操作:
In []: rest = response.xpath('//*[@id="post-112239"]/div[3]/div[4]/span[2]/tex
...: t()').extract()[0] In []: rest
Out[]: ' 8 收藏'
接着再用正则去掉别的信息,由于在scrapy shell中直接调用re模块会报错,那可以用ipython调试
In []: ret = re.match(r".*(\d+).*",' 8 收藏') In []: ret.group()
Out[]: ''
最新文章
- Hadoop学习笔记—20.网站日志分析项目案例(二)数据清洗
- 面试复习(C++)之直接插入排序
- Java 和C/C++的“语法”上的差异!
- 用js将从后台得到的时间戳(毫秒数)转换为想要的日期格式
- 任务太多,时间太少,GT凶猛,不留情面啊。。。
- JS练习 改变文本框状态
- HTML动画(难点)
- 中颖电子AD操作
- HTML/XML/XPATH基础
- 关于vue-router中点击浏览器前进后退地址栏路由变了但是页面没跳转
- 【Java】字节数组转换工具类
- canvas(四) Gradient- demo
- VCS双机+oracle 11gR2+ASM主机名修改
- IntelliJ IDEA2018.1、2017.3破解教程
- <;target>;.ID 和 <;source>;.ID 的属性冲突: DataType 属性不匹配
- numpy中的复合数组
- fish shell 下gopath的设置问题
- iOS-UIImage变为NSData并进行压缩
- MapReduce和yarn
- 设置网卡IP,还每次都挨个地址输入吗?批处理一下【转】