scrapy需要的xpath知识点
来源:互联网 发布:邮件地址搜索软件 编辑:程序博客网 时间:2024/06/05 01:51
(1)优先遵循“自底向上”原则,即从所要爬取的字段节点出发,层层向上,向父节点去遍历,找到其他爬取的字段。
这样的好处在于,首先从自己必然要的字段出发,不会发生任何歧义或其他问题命中该字段,再从该节点出发再去层层向父元素方向去延伸,绑定要爬取的其他的字段,尤其适用于爬取的各个字段处于并列关系。如果按父元素到子元素向下的方向爬取,在嵌套层次比较深的情况下,容易爬取到其他字段而不宜发现问题所在,比如:
<a>
<strong>
<p><em/>
</p>
</strong>
<div>
<div id=''post">
<em></em>
</div>
</div>
div里的em标签是我们想要爬取的字段,但是strong标签的下面也藏了一个em标签,在页面层次结构比较复杂时,不容易被发现,此时如果按照从上到下,的写法就很容易取到第一个em里的内容,如:xpath("//a/descendant::em/text()").extract(),这样的结果并不是我们想要的,如果直接从想要的节点出发就会避免这种情况发生,xpath("//div[@id='post'/em/text()]").extract(),再从该节点出发去找其他的节点;
(2)善于利用xpath的定位功能
寻找父元素:://DDD/parent::* DDD节点的所有父节点
寻找祖先节点:ancestor::BOOK[1] 离当前上下文节点最近的book祖先节点
寻找孩子节点:/child::AAA 等价于/AAA
寻找兄弟节点:following-sibling::div[@class='pct']
current.xpath("ancestor::div[@class='pi']").xpath("following-sibling::div[@class='pct']").xpath("descendant::td[@class='t_f']/text()").extract()
上句的含义是寻找当前节点current的祖先节点div[@class='pi'的兄弟节点div[@class='pct的后代节点:td[@class='t_f']/的文本内容
(3) 其他常用的定位语句
1. //NODE[not(@class)] 所有节点名为node,且不包含class属性的节点
2. //NODE[@class and @id] 所有节点名为node,且同时包含class属性和id属性的节点
3. //NODE[contains(text(),substring] 所有节点名为node,且其文本中包含substring的节点//A[contains(text(),\"下一页\")] 所有包含“下一页”字符串的超链接节点
//A[contains(@title,"文章标题")] 所有其title属性中包含“文章标题”字符串的超链接节点4. //NODE[@id="myid"]/text() 节点名为node,且属性id为myid的节点的所有直接text子节点
5. BOOK[author/degree] 所有包含author节点同时该author节点至少含有一个的degree孩子节点的book节点6. AUTHOR[.="Matthew Bob"] 所有值为“Matthew Bob”的author节点
7. //*[count(BBB)=2] 所有包含两个BBB孩子节点的节点
8. //*[count(*)=2] 所有包含两个孩子节点的节点
9. //*[name()='BBB'] 所有名字为BBB的节点,等同于//BBB
10. //*[starts-with(name(),'B')] 所有名字开头为字母B的节点
11. //*[contains(name(),'C')] 所有名字中包含字母C的节点
12. //*[string-length(name()) = 3] 名字长度为3个字母的节点
13. //CCC | //BBB 所有CCC节点或BBB节点
14. /child::AAA 等价于/AAA
15. //CCC/descendant::* 所有以CCC为其祖先的节点
16. //DDD/parent::* DDD节点的所有父节点
17. //BBB[position() mod 2 = 0] 偶数位置的BBB节点
18. AUTHOR[not(last-name = "Bob")] 所有不包含元素last-name的值为Bob的节点
19. P/text()[2] 当前上下文节点中的P节点的第二个文本节点
20. ancestor::BOOK[1] 离当前上下文节点最近的book祖先节点
21. //A[text()="next"] 锚文本内容等于next的A节点
(4)利用firefox的xpath checker插件检查xpath语法
- scrapy需要的xpath知识点
- scrapy的xpath语法
- scrapy 元素的相对xpath
- 【scrapy】xpath
- scrapy xpath
- Scrapy下xpath基本的使用方法
- Scrapy下xpath基本的使用方法
- scrapy学习——xpath的学习
- xpath知识点
- scrapy xpath提取标签
- scrapy测试xpath
- scrapy xpath text拼接
- 关于scrapy网络爬虫的xpath书写经验总结
- scrapy中使用xpath遇到的中文问题
- scrapy-response.xpath中无法获取标签内容的问题
- Scrapy匹配xpath时tbody标签的问题
- scrapy shell 可以用于测试xpath的响应
- 需要掌握的知识点
- C# 集合的原理
- 山东省第八届省赛 sdut 3896(找规律+组合数取模)
- 多关键字排序
- 什么是雪碧图,怎么用?
- JDK之Boolean源码解析
- scrapy需要的xpath知识点
- 移动端页面自适应大小
- Popwindow 设置宽高无效的原因和解决方案
- c++常见面试题30道
- 利用有道翻译Api实现英文翻译功能
- Android 项目开发填坑记
- 【android】View的事件体系1-基础
- 深入分析ConcurrentHashMap
- Linux adb 命令(之后会不断更新)