我上次分享过关于爬取豆瓣电影top250的实战:BeautifulSoup爬取豆瓣电影top250信息 和 python BeautifulSoup爬取豆瓣电影top250信息并写入Excel表格 ,豆瓣网没有反爬虫机制,对于学习爬虫的小白是一个不错的学习对象,python xpath我是初步学习,对豆瓣图书 Top 250 进行实战学习,xpath的优点之一就是可以直接复制获取信息的节点,如图:
我要爬取的数据还是比较全面的,几乎都没有放过,有(排名,书名,地址,作者,翻译,星级,评分,评价,单价,出版社,出版日期,国家,评价),其中“排名”在网页上没有,需要自己加上去,相比于豆瓣电影,豆瓣图书的坑更多。
爬豆瓣图书需要注意的几个坑!!!
1、图书在top250的排名
2、从p标签中截取作者、翻译者
3、获取星级数
4、截取国家
5、评价
6、csv乱码 (其实没错,就是乱码)
下面来讲解一下我解决这几个坑的的思路:
1、图书在top250的排名
在网页中没有显示它的排名,但我们都知道它是降序排的,从1~250,所有就直接通过循环写进csv就行了,但是初始值一定不能放在循环函数内,否则它就会被重新赋值或者只输出一个值,正确方法如下:
2、从p标签中截取作者、翻译者
这些信息都在p标签中,但国外的著作和国内的排布不一样,国外的会有翻译者在其中,中国的就只有作者一个,排名31的《倾城之恋》就没有作者。
2.1、国外著作p标签内容为:
<p class="pl">[国家] 作者 / 翻译者 / 出版社 /出版日期 / 价格</p>
获取的方法:
2.2、国内著作p标签内容为:
<p class="pl">作者 / 出版社 /出版日期 / 价格</p>
获取的方法:
2.3、没有作者的情况:
获取的方法:
(1)先对p标签分割成字符串
(2)len(p1.split(’/’)) 算出字符串的长度,这里的3是我先计算出来的,如果字符串长度等于3,说明它没有作者。
elif len(p1.split('/'))==3:
author = ' '
3、获取星级数
注意: 字符串不能直接被除,需要转化为int型
4、截取国家
只要会截取作者和翻译者,这个问题就不大了。也是通过“[外国]”来判断它的国籍的,中国的都没有写出来,所有没有“[ ]”的,我全部默认为中国,包括没有作者的。
#截取国家
if '[' in p1:
country = p1.split('[')[1]