Python数据分析----Python3操作Excel-以豆瓣图书Top250为例
本文利用Python3爬虫抓取豆瓣图书Top250,并利用xlwt模块将其存储至excel文件,图片下载到相应目录。旨在进行更多的爬虫实践练习以及模块学习。
工具
1.Python 3.5
2.BeautifulSoup、xlwt模块
开始动手
首先查看目标网页的url: https://book.douban.com/top250?start=0, 然后我尝试了在代码里直接通过字符串连接仅改变”start=“后面的数字的方法来遍历所有的250/25 = 10页内容,但是后来发现不行,那样的话出来的永远是第一页,于是通过浏览器的F12开发者工具检查,发现start是要post上去的,如下图:
(图1)
所以建立一个postData的dict:
1 |
|
每次将其post上去即可解决返回都是第一页的问题。
分析网页可知,一本书的罗列信息以及要爬取的点如下图:
(图2)
从上到下需要爬取的信息有:
1.图书链接地址
2.封面图片链接 我到时候会将此链接打开,下载图片到本地 (download_img函数)
3.书名 要注意的是这里书名取title的内容而不去a标签中的string信息,因为string信息可能包含诸如空格、换行符之类的字符,给处理造成麻烦,直接取title格式正确且无需额外处理。
4.别名 这里主要是副标题或者是外文名,有的书没有这项,那么我们就写入一个“无”,千万不可以写入一个空串,否则的话会出现故障,我下面会提到。
5.出版信息 如作者、译者、出版社、出版年份、价格, 这也是重要信息之一,否则有多本书名字一致可能会无法分辨
6.评分
7.评价人数
除此之外,我还爬取一个“标签”信息,它在图书链接打开之后的网页中,找到它的位置如下:
(图3)
爬到标签以后将它们用逗号连接起来作为标签值。
好了,既然明确了要爬的指标,以及了解了网页结构以及指标所在的html中的位置,那么就可以写出如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
|
通过xlwt模块存入xls文件及其问题
爬取下来了以后当然要考虑存储,这时我想试试把它存到Excel文件(.xls)中,于是搜得python操作excel可以使用xlwt,xlrd模块,虽然他们暂时只支持到excel2003,但是足够了。xlwt为Python生成.xls文件的模块,而xlrd为读取的。由于我想的是直接生成xls文件,不需用到xlrd,所以先安装xlwt。
直接进入Python目录使用如下命令即可安装xlwt:
1 |
|
安装完后写出操作代码,这里同时也写入txt文件,方便比较:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
满以为这样就可以了,但是还是出现了一些错误。
比如曾经出现了写着写着就写不下去了的情况(以下并非以上代码产生的结果):
(图4)
这时我把不是str的都改成str了,不该str的尽量用数字(int,float),然后又遇到了下面的情况:
(图5)
写到第64项又写不下去了,但是那些int,float都写完了,‘无’也是断断续续显示几个,我想,既然找不到问题,那么慢慢套吧。首先极大可能是中文编码的问题,因为我把一些可以不为str类型的都赋成非str类型以后都正确地显示了,而且上图中的显示在图片路径名那里断了,所以我让那一列都不显示,居然,成功了!
(图6)
如图,除了不显示的那一列,其它完全正常,可以断定就是下面这里出现的错误:
1 |
|
我的图片路径那里是直接字符串拼接而成的,所以可能会有编码的错误。那么稍微改一下试试:
1 2 |
|
好吧,还是不行,还是出现图5的问题,但是打印在Python IDLE里面又都是正确的。
既然如此,把图片链接全部改成一样的英文试一下:
1 2 |
|
又是正确的:('无'已改为'None')
(图7)
所以说,还是图片路径的问题,那我们索性将图片路径那列换成图片链接,采取消极应对方法,反正这项是图片链接还是图片路径无关紧要,反正图片路径里面有图片就可以了。此外我还加了一个计时的代码,计算总爬取时间,因为我觉得这样干爬太慢了,没有个将近10分钟完不成,考虑利用多线程去爬,这里先记录一下时间以观后效。然后发现还是不行!现在成了只要imageurl固定(中文也行),就能够顺利输出到xls中,否则就不行。很诡异。于是我又尝试了缩短imageurl,实验得知,当取imageurl[:-6]时是可以的,但imageurl[:-5]就不行了。后面又干脆不写入imageurl这一列,可以,不写入别名或者不写入图书链接都是正常的,但是不写入标号就不行。至今仍不得解。初步猜测莫非是写入的字符数受限制了?还得靠更多的实验才能确定。而且也说不定就是Windows下的编码问题,这又得靠在Linux下进行实验判断。所以要做的事情还很多,这里先把正确的绝大部分工作做了再说。
于是干脆不要图书地址一列,最后得出如下最终代码:
View Code
运行(7分多钟):
(图8)
还是断了,那就真不知道怎么办才好了。再改变方法,先写到TXT文本文件再导入到xls中,就先不管本文标题了。
运行:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
在.txt中是正确的:
(图9)
然后在xls文件中选择数据->导入数据即可得到最终结果:
(图10)
封面图片:
(图11)
问题先解决到这,后面的问题有待深入研究。
后期可改进
1.采用多进程/多线程加快爬取速度
2.可考虑采用xlutis模块分多步写入到excel中
3.可考虑改换excel处理模块
3.考虑在Linux环境下进行试验
Python数据分析----Python3操作Excel-以豆瓣图书Top250为例相关推荐
- python爬虫1——获取网站源代码(豆瓣图书top250信息)
# -*- coding: utf-8 -*- import requests import re import sys reload(sys) sys.setdefaultencoding('utf ...
- python获取网站代码_python爬虫1——获取网站源代码(豆瓣图书top250信息)
# -*- coding: utf-8 -*- import requests import re import sys reload(sys) sys.setdefaultencoding('utf ...
- 【Python数据分析】Python3操作Excel(二) 一些问题的解决与优化
[Python数据分析]Python3操作Excel(二) 一些问题的解决与优化 参考文章: (1)[Python数据分析]Python3操作Excel(二) 一些问题的解决与优化 (2)https: ...
- python3操作excel(xls与xlsx版本的爱恨情仇)
python3操作excel 背景 大概操作说明 操作xls的代码 背景 本来一直是使用go来搞的.毕竟我不会py.但是excel文件格式比较久,是xls的.目前go语言操作xls存在问题,就是某单元 ...
- Python读取和操作Excel(.xlsx)文件
Python读取和操作Excel(.xlsx)文件 使用openpyxl库来控制excel文件(即.xlsx为后缀的文件).这里介绍一下excel数据的结构. 打开excel文件后生成一个workbo ...
- python爬取豆瓣图书Top250
平台 python3.5 windows 10 目标结构 最近想学习一下python爬虫,所以目标定在豆瓣读书top250.结构简单,没有js加载的内容等,感觉比较适合入门新手来爬取. 首先看一下to ...
- Python——爬取目标豆瓣图书TOP250
目标网址:https://book.douban.com/top250?start=0 参考资料: Requests: http://docs.python-request ...
- Python中xlrd操作excel单元格
学习目标 Python中xlrd操作excel单元格 学习内容 1.获取工作表 sheet=data.sheet_by_index(0) 2.返回单元格对象 sheet.cell(1,2) #返回第二 ...
- python爬豆瓣top250书籍_Python——爬取目标豆瓣图书TOP250
目标网址:https://book.douban.com/top250?start=0 导入模块: import requests from bs4 import BeautifulSoup 添加he ...
- python爬虫获取豆瓣图书Top250
在上一篇博客<python爬虫获取豆瓣电影TOP250>中,小菌为大家带来了如何将豆瓣电影Top250的数据存入MySQL数据库的方法.这次的分享,小菌决定再带着大家去研究如何爬取豆瓣图片 ...
最新文章
- Kubernetes 网络排错指南
- 清华自动驾驶前沿报告!解密六大关键技术,全球人才分布【附下载】| 智东西内参...
- Java代码统计某个字符串出现的次数
- WPF中的动画——(二)From/To/By 动画
- 2013年7月29日周一
- Python小游戏(消消乐)
- 判断一个数是否是素数,为什么只要除到根号那个数就够了
- 二、Merge sort
- 奇葩的UI引用LayoutInflater.from问题
- 7-114 吉老师的回归 (15 分)
- 使用Python自由切分pdf文件提取任意页面
- 用matlab仿真0到9十个数字的语音识别
- 基于汇编的 C/C++ 协程 - 实现
- BitPlots包简介
- 最全面的Fiddler 4教程讲解(界面)
- Dev-Cpp 切换界面语言中文
- 计算机专业排名2017教育部,软件工程专业大学排名最新版(教育部2017学科排名数据整理)...
- KafkaConsumer实现精确的latest(结尾)开始消费
- html页脚的话,HTML页脚footer标记
- 几何分布及其期望计算