在我写爬虫最早的时候,我是比较喜欢用正则的,尤其是正则有一个比较牛X的表达式,用过正则
的朋友应该都会知道,就是——万能正则表达式“(.*?)”
(开个小玩笑——→如果你不知道证明你还不了解正则)
我有做过爬虫相关的工作,是每天都是重复着同样的工作——写爬虫的抓取规则,这时候我是使用的
是Xpath,而不是正则,事实是我在正常工作中(写爬虫的时候)也很少用到正则,并不是因为他不
好,而是效率不高,换一种说法是上手难易程度比较高吧(我给满分五星的大概四星的难度)
好了,开始介绍用法:
常用的方法有:
- @ :属性选择 例如 a[@href] 代表选择带有 href 属性的所有 a 标签,*[@id] 这个是选择所有带有 id 属性的标签(这个 “ * ” 慎用)
- /:路径选择 例如 /a[@href] 从html 标签下查找他的第一代子标签中是a标签并且含有 href 这个属性
- //:也是路径选择 例如 //a[@href] 是选择当前在html标签下所有含有 href 这个属性的a标签
- .(一个英文状态下的句号) :选择当前标签 例如 /html/body/. 意思是选择body标签
…(两个英文状态下的句号) :选择父标签 例如 /html/body/… 意思是选择html标签
仅仅这些还是不能满足所有的需求,接下来用一些特定的场景来继续介绍Xpath的用法
比如说:
1. contains()函数
参数:contains(attr,keywords)
使用方法:
我们要选择name属性中含有“word”字样的标签,表达式为:
*[contains(@name,“word”)] (ps:字符串使用单引号,双引号均可)
2. not()函数
使用方法:
如果选择不包含“word”字样的标签,表达式为*[not(contains(@name,“word”))]
3. substring-before()函数
参数:substring-before(str1,str2)
使用方法:
选取文章标题Python爬虫需要的技能:Xpath的使用中“:”前的部分,函数用于返回字符串str1中位于字符串str2之前的部分,表达式为:substring-before(“Python爬虫需要的技能:Xpath的使用”,“:Xpath的使用”)
返回的结果是 Python爬虫需要的技能
4.substring-after()函数
参数:substring-after(str1,str2)
使用方法: 选取文章标题Python爬虫需要的技能:Xpath的使用中“:(冒号)”后的部分,函数用于返回字符串str1中位于字符串str2之后的部分,表达式为:substring-after(“Python爬虫需要的技能:Xpath的使用”,“Python爬虫需要的技能:”)
返回的结果是 Xpath的使用
5. starts-with()
参数:starts-with(attr,keywords)
使用方法: 查找name属性中开始位置包含’user’关键字的标签,表达式为:starts-with(@name,“user”)
6.在Xpth的使用过程还可以是关系运算符
例如同时选择 a 标签和 p 标签,表达式为: //a | //p