[爬虫系列(二)]爬取豆瓣读书Top250,并保存每本书
来源:互联网 发布:数据新闻案例 编辑:程序博客网 时间:2024/04/29 07:02
这里我们要爬起豆瓣读书Top250,并保存每本书的书名,信息,简要介绍和作者信息.
这里,仍然分为三步:
1.url分析
2.数据分析
3.爬取数据
1.url分析
豆瓣读书Top250的url分析和豆瓣电影Top250类似:
豆瓣读书Top250的url基本都是这样的:
http://book.douban.com/top250?start=
所以,同样我也是利用urlparse的urljoin函数来拼接自己所需要的url,传入urlopen()
2.数据分析
利用urlopen,我们得到response对象,接着传入BeautifulSoup得到BeautifulSoup对象.接下来便分析数据了.
查看源代码,我们发现每本书的名字都包含在具有title属性的a标签中,同时令我们惊喜的时,a标签中还有href属性,这样我们就可以直接获取这本书的名字和它所对应豆瓣网页,为我们接下来获取这本书的详细介绍打下基础.
于是,我们可以利用find_all()函数来查找所有具有title属性的a标签.同样,在这里find_all()函数也是在html文档树中从上到下查找,所以我们也不需要担心Top顺序,找到之后,我们还可以判断a标签是否含有href属性,如果有的话,就可以提取href属性对应的url来获取这本书的详细介绍了
代码介绍
在我的代码里,我主要声明了两个函数,Parse_Page()和Parse_Book().Parse_Page()负责上面的工作:找到所有的符合要求的a标签,提取对应的url,然后将该url传入给Parse_Book().Parse_Book()则负责处理url,爬取每本书的具体数据.可以说Parse_Page()和Parse_Book()这两个函数业务都比较清晰的,而且也不是很难.
下面说说Parse_Book()是如何工作的:
book_bsObj=BeautifulSoup(response,"lxml") book_title=book_bsObj.h1 book_info=book_bsObj.find("div",{"id":"info"}) intro=book_bsObj.find_all("div",{"class":"intro"})
book_title和book_info对应书的名字和信息.但是,因为书籍简介和作者信息都是对应在相同标签中:即具有class=intro的div标签中.所以暂时无法区分这两个,只好先把全部具有class=intro的div标签找到.
但是,找到intro后,不能认为书籍介绍就是对应的是intro[0],而作者信息就是对应的是intro[1].
比如,对红楼梦这本书来说,如果我们得到intro,并打印intro[0],那么我们得到的是下面这个内容:
那如果我们打印intro[1],又是什么情况呢?答案是这样:
有什么区别呢?实际上intro[1]对应的是intro[0]展开全部的内容,即我们在豆瓣网页点击展开全部得到的内容.为什么会这样呢?因为在豆瓣网页里,展开全部有js交互,所以intro[1]对应的就是intro[0]展开全部的内容了.那么,利用这一特点,我们也可以取巧.可以不与js交互,而是判断当前文本是否含有展开全部
这四个子;如果有,说明下一个元素才是我们需要的详细文本,如果没有,说明当前就是完整的文本了.这一特点同样也适用作者信息的提取
判断代码在此: if intro[0].get_text().encode('utf-8').find('展开全部')!=-1:
book_intro=intro[1]
if intro[2].get_text().encode('utf-8').find('展开全部')!=-1:
author_intro=intro[3]
else:
author_intro=intro[2]
else:
book_intro=intro[0]
if intro[1].get_text().encode('utf-8').find('展开全部')!=-1:
author_intro=intro[2]
else:
author_intro=intro[1]
3.爬取数据
数据分析完成后,那么接下来爬取数据,写入文本都是很容易的事了.
最后,爬取数据在此
源代码在此
- [爬虫系列(二)]爬取豆瓣读书Top250,并保存每本书
- 用Python爬虫爬取豆瓣电影、读书Top250并排序
- Python3之爬虫爬取豆瓣读书Top250
- Python爬虫系列之----Scrapy(八)爬取豆瓣读书某个tag下的所有书籍并保存到Mysql数据库中去
- python爬虫|爬取豆瓣电影TOP250并写入txt中
- Python 爬虫 抓取豆瓣读书TOP250
- 用Python爬虫爬取豆瓣TOP250电影
- Python 采用Scrapy爬虫框架爬取豆瓣电影top250
- [python爬虫入门]爬取豆瓣电影排行榜top250
- 爬虫框架scrapy,爬取豆瓣电影top250
- Python3爬虫入门之爬取豆瓣Top250电影名称
- python爬虫实战 | 爬取豆瓣TOP250排名信息
- 【go语言爬虫】go语言爬取豆瓣电影top250
- python3[爬虫基础入门实战] 爬取豆瓣电影排行top250
- [Python/爬虫]利用xpath爬取豆瓣电影top250
- Python爬虫实战(一):爬取豆瓣电影top250排名
- php爬虫爬取豆瓣电影top250内容
- 简单爬虫学习---爬取豆瓣电影top250
- .Net后台使用RegisterClientScriptBlock和RegisterStartupScript调用前台的JS 区别
- hdu 4857 逃生
- 【数据结构实验】校园游览导图系统
- 矩阵乘法经典应用之置换
- 类似微信的界面
- [爬虫系列(二)]爬取豆瓣读书Top250,并保存每本书
- 2.ORM思想
- 真是瞎了我的狗眼啊
- 面向对象设计6大原则之一(单一职责原则)
- 如何分叉以太坊并变成私链?
- 英雄
- hdu4606 计算几何+二分+二分图匹配+最短路
- JS固定侧边栏教程总结
- Codeforces AIM-TECH round div2 624AB 623ABC