我就在这里,不离不弃
——A·May
R-98 |T-135
上次说到,当当网是一个练习爬虫的好地方,今天用Xpath解析网页,爬取图书信息。
那Xpath和CSS有什么不同呢?
可以把Xpath和CSS分别看做内燃机和蒸汽发动机,两者的作用是一样的,都是用来提供动力的,Xpath和CSS都是用来解析html文档的。但是,两种发动机的运行原理是不一致的,正如Xpath和CSS的语法是不一致的。
Xpath爬取第一步
写出正确的请求,GET或者POST,现在网站GET请求多一些,这点其实和昨天CSS的语法不一样,昨天不用做请求,直接写出html_nodes就好。而用Xpath不做请求,还是不行的。
在网页中找到对应的Refer和User-Agent,如下:
#在Values中检查相应的值
Xpath爬取第二步
通过网页的小箭头找到书的名称的路径,如下:
Xpath爬取第三步
找到以后,在R中写出相应的Xpath的路径,如下:
对应网页的中的路径
author2在网页中的路径是这样的,如下。我只写了一个节点代码,相比于昨天的CSS语句容易太多了。其中,div是节点名,div后面的class是div的一个属性值,我们可以发现网页中有许多的div,但是class=title的却只有书的标题。所以在这里,我们写出div,然后用[]写出这div的class属性,这样R就知道,我想要的这个书名了,其他的author、o_price和des可以套用,就是将class后面的属性名换掉就可以。
而关于img就不可以套用上面的格式了,为什么呢?
先看一下img的网页格式。一方面,img不和author他们一个父节点;另一方面,img节点是有两个。不是一个父节点,就需要重新确认需要哪个div节点,而img节点有两个,说明该节点下的内容需要限定,或者清洗。
但是,写路径的方式还是不变的,img的父节点可以用bookcover来限定class,然后,写出xmlGetAttr,"src",代表抓取src中的内容。
检查一下img的内容,发现连接中分成三组,1和3一类,5和其他连接也可以是一类,因为img是图片,说明除了我们要的书的封面之外,还有其他图片,就是那个推销图片,如下:
我们需要的是书的封面,所以需要对img进行一下清洗,操作如下,前两步是将另外两个的图片的连接都替换为0,然后在img中保留字符数大于1的字符串,这样0就都删除掉了。
数据整合
封面下载
封面的链接都爬下来了,顺便把图片也下载了,方法如下:
每天学习一点点,最后总会好的
我是May 明天见
领取专属 10元无门槛券
私享最新 技术干货