我上次分享过关于爬取豆瓣电影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].split(']')[0]else:country = '中' #没有国家的我默认为“中国”

5、评价

评价不是没有本书都有,所有必须要进行判断,才能获取

代码实现方式:
(1)先获取评价在的位置
(2)通过字符串长度判断它是否存在,如果字符串长度不等于0,就截取comments[0],否则为空。

#评价
comments = t.xpath('./tr/td/p/span/text()')
comment = comments[0] if len(comments) != 0 else ""

6、csv乱码


注意:这并不是编码方式不对。我重新更换保存在csv的方法,没有解决,后来我把我电脑的编码的方式也调成了默认utf-8,也没有解决问题。

成功的解决方法:
(1)新建一个Excel文件并打开
(2)数据>自文本>找到刚爬取的.csv文件导入
(3)弹出框,勾选“分隔符号”>下一步>取消“Tab键”,勾选“逗号”>下一步>勾选“常规”>完成>确定

完美显示内容!!!

完整源代码如下:

#!/usr/bin/env python3
#-*-coding:utf-8-*-
import requests,time,re,csv
from lxml import etree#创建CSV文件,并写入表头信息
fp = open('G:\doubanbookTop250_utf8.csv','a',newline='',encoding='utf-8')
writer = csv.writer(fp)
writer.writerow(('排名','书名','地址','作者','翻译','星级','评分(分)','评价(人)','单价(元)','出版社','出版日期','国家','评价'))rank=0
for i in range(0,250,25):print('正在爬取第' +str(i) +'页')url = f'https://book.douban.com/top250?start={i}'res = requests.get(url).texttxt = etree.HTML(res)file = txt.xpath('//*[@id="content"]/div/div[1]/div/table')for t in file:rank=rank+1 #排名,rank=0必须放在主函数的前面,rank才不会被重新赋值title = t.xpath('./tr/td[2]/div[1]/a/@title')[0]href = t.xpath('./tr/td[2]/div[1]/a/@href')[0]#获取p1标签的字符串p1 = t.xpath('./tr/td[2]/p[1]/text()')[0]#截取作者if '[' in p1:author = p1.split(']')[1].split('/')[0].replace(" ","")elif len(p1.split('/'))==3:author = ' 'elif '[' not  in p1: author = p1.split('/')[-4].replace(" ","")else:author = ' '#获取翻译者if '[' in p1:translator = p1.split('/')[-4].replace(" ","")elif len(p1.split('/'))==3:translator = ' 'else:translator = ' '#获取星级数str1 = t.xpath('./tr/td[2]/div[2]/span[1]/@class')[0].replace("allstar","")num = int(str1)star = num/10#获取评分score = t.xpath('./tr/td[2]/div[2]/span[2]/text()')[0]#获取评价人数n = t.xpath('./tr/td[2]/div[2]/span[3]/text()')[0]people = re.sub("\D","",n)#截取单价if '元' in p1:price = p1.split('/')[-1].split('元')[0]else:price = p1.split('/')[-1]#截取出版社publisher = p1.split('/')[-3]#截取出版时间time = p1.split('/')[-2]#截取国家if '[' in p1:            country = p1.split('[')[1].split(']')[0]else:country = '中' #没有国家的我默认为“中国”#评价comments = t.xpath('./tr/td/p/span/text()')comment = comments[0] if len(comments) != 0 else ""# 写入数据writer.writerow((rank,title,href,author,translator,star,score,people,price,publisher,time,country,comment))#  关闭文件
fp.close()

python xpath爬取豆瓣图书Top 250存入csv文件并解决csv乱码问题相关推荐

  1. Requests+Xpath 爬取豆瓣读书TOP并生成txt,csv,json,excel文件

    说明: ##来源:https://www.cnblogs.com/yizhiamumu/p/10270926.html 1 Requests+Xpath 爬取豆瓣读书TOP ''' Requests+ ...

  2. 爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP

    爬虫1:Requests+Xpath 爬取豆瓣电影TOP [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]: ...

  3. python定时器爬取豆瓣音乐Top榜歌名

    python定时器爬取豆瓣音乐Top榜歌名 作者:vpoet 日期:大约在夏季 注:这些小demo都是前段时间为了学python写的,现在贴出来纯粹是为了和大家分享一下 #coding=utf-8im ...

  4. Python3爬取豆瓣图书Top250并写入txt文件当中

    首先简单介绍一下过程 1.解析url 2.获得html文件 3.解析数据 4.写入txt文本(按页写入) 5.上传代码 转载前可以备注一下ytouch的名字 '''爬取豆瓣图书前250名''' #au ...

  5. python爬虫爬取豆瓣图书

    爬取豆瓣图书top250的第一页 我最终爬取的是图书的书名,链接 先要做个说明,如果你是编程高手的话,这边文章你就不用看了,如果你是个python爬虫小白的话,可以看看这篇原创 我将用到的软件是pyc ...

  6. 使用Python爬取豆瓣电影 Top 250

    目录 前言 一.大致思路 1.导入第三方库 2.简单需求分析 二.代码解析 三.代码实现 四.总结一下 实现Python爬虫的基本思路: 1. 确定需求 2. 网站分析 3. 单一数据提取 4. 提取 ...

  7. 【Python爬虫】爬取豆瓣电影Top 250

    豆瓣电影 Top 250 导入第三方包 urllib模块介绍 引入模块 import urllib.request,urllib.parse,urllib.error 获取一个get请求 respos ...

  8. 爬虫练习-爬取豆瓣电影 Top 250信息并存储于本地

    文章目录 思路 使用环境 一.请求网页 二.解析网页 三.获取信息 四.实现翻页 附录 A.所得数据截图 B.完整代码 思路 请求网页 翻页 开始 解析电影Top250页面 获取信息 使用环境 pyt ...

  9. Python3爬取豆瓣图书Top250并存入csv文件中

    本文抓取豆瓣图书Top250中的相关资讯,可以练习对于网页结构的分析及提取. 下面先导入相关的包,并伪装成浏览器访问: import requests from lxml import etree i ...

最新文章

  1. mlcc激光雷达与相机外参标定初体验
  2. 网站优化之如何提升快照的更新时间?
  3. 不同虚拟机局域网Vlan之间访问
  4. Android开发之自定义view进行旋转动画
  5. 【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第三节 栈与堆,值类型与引用类型
  6. baidumap vue 判断范围_vue 数据渲染
  7. linux redis 主从配置,redis集群(主从配置)
  8. Nature:给博士研究生的四条箴言Four golden lessons,颜宁:写的真好!
  9. (四)Raspberry Pi上的人工智能人脸检测
  10. HDU-2084(简单DP)
  11. ppt转flash kindeditor上传视频全屏问题
  12. 计算机维修不是事儿光盘视频,硬盘维修及数据恢复不是事儿配套光盘视频教程...
  13. 如何修改pdf文件内容
  14. U盘启动BIOS设置
  15. 43套高质量PPT模板—创意风格主题
  16. Error Code: 1318. Incorrect number of arguments for PROCEDURE student.new_procedure; expected 0, got
  17. PHP有没有 原子性,PHP程序的原子性和PHP的文件锁
  18. pancake bot夹子机器人
  19. 如何让产品卖的更好提升运营能力(淘宝篇)-刘英
  20. 使用avilib库进行avi文件的读写

热门文章

  1. 【电子文件制作攻略】(仅供参考)
  2. Matplotlib--用Python创建各种数据可视化图形
  3. Java 封装介绍之猫狗案例
  4. 表格法---大整数乘法
  5. delphi出现‘尚未调用CoInitialize’异常
  6. 欧拉Gamma函数、Beta函数、余元公式
  7. 【转载】新浪微博数据挖掘方案
  8. 《Steam平台热销VR商品》(Yanlz+Unity+XR+VR+AR+MR+SteamVR+Valve+Oculus+Vive+热销商品+排行榜+推荐商品+Top+立钻哥哥+==)
  9. {软件设计师之路}程序员道路的经验之谈
  10. 后门制作及安装技术(全)