用xpath来爬取网页
标题常见爬取网页时,提取数据的方法有xpath,正则提取,对于json数据使用功能jsonpath进行提取,在scrapy使用css进行提取。
标题在这众多提取方法中这次使用xpath进行模拟我们所面对的数据,进行一般和特殊的数据提取。
网址:https://www.xiazaiba.com/android/app/
文章以该网站进行xpath提取数据。
一、对于简单的数据来说,可以直接通过检查网页源码,之后进行copy其xpath的路径(提示:7、8成网页可以这样直接提取到)
- 第一步:鼠标右键,检查网页,也可以快捷键F12
2.第二步:
点击你所想要的信息:点击后下面会自动跳到相应的位置,之后copy路径就可以
这个方法非常的快捷。准确度一般,毕竟还是自己写最准确。
墙裂推荐一个谷歌插件,xpath-helper这个插件可以实时的查看自己的xpath路径所对应的信息。
二、对于特殊的要求,xpath进行应对
- 还是这个网站,我现在想,从所有之后的分类进行爬取,我不想要所有这个模块
这是就要用到xpath中的position(位置)方法,position是处理这种情况比较快的
/html/body/div/div[1]/div[6]/div/div[3]/div[1]/div[2]/a[1]/text()
这个xpath提取的是所有
/html/body/div/div[1]/div[6]/div/div[3]/div[1]/div[2]/a[position()>1]/text()
这个xpath提取的是所有之后的模块
使用方法:正如其意思所说,position(位置),我们只需要在递归的标签中换成该字段,就可以进行选择行的提取数据
- 对网页进行翻页,提取翻页的网址
我们可以发现,网页的下一页的位置在发生在和变化,如果想要定位到它,不能使用常规的方法,因为每一页的位置都不一样。这是我们就要使用last()
/html/body/div/div[1]/div[8]/div/a[last()-1]/@href
像这样,很好理解,跟position差不多都是在递归的标签内进行修改,last()代表最后的一个标签,last()-1,代表倒数第二个标签,其余同理
- 还是翻页标签,还可以采用content()方法进行定位:
/html/body/div/div[1]/div[8]/div/a[contains(string(.),‘下一页’)]/@href
还有一些其他的方法,下回继续,有问题可留言,相互交流!!!