简单的用python爬虫爬豆瓣图书TOP250
一个无聊的下午
思考人生,
有什么简单内容可以爬:
突然发现了这个网页:
(https://book.douban.com/top250?start=0 “豆瓣图书”)
看起来挺不错的

然后
开始~

先导一下会用到的模块:

import requests
from bs4 import BeautifulSoup
import pandas

requests 用来请求
bs4 是 用来提取标签中的内容,比正则简单一些
pandas用来将所获取到的数据存入excel中

如果之前没有使用过bs4和pandas,
那么bs4 和 pandas 都需要通过pip安装一下
大家可以百度一下怎么安装呦

res = requests.get('https://book.douban.com/top250?start=0')soup = BeautifulSoup(res.text , 'html.parser') 

请求这个豆瓣的地址,用res接收请求的结果
用BeautifullySoup将获取的数据进行解析,解析成了html代码,为了之后提取标签中的内容做准备。
然后在豆瓣图书界面F12,然后审查元素,如图所示

知道了这个页面的大部分信息在一个class为item的tr中存在

for news in soup.select('.item'): 

遍历soup中class为item的内容,即所以的tr标签中的内容
以下为我取出的内容,作为一个例子

<tr class="item">
<td valign="top" width="100">
<a class="nbg" href="https://book.douban.com/subject/1770782/" onclick="moreurl(this,{i:'0'})">
<img src="https://img3.doubanio.com/mpic/s1727290.jpg" width="90"/>
</a>
</td>
<td valign="top">
<div class="pl2">
<a href="https://book.douban.com/subject/1770782/" onclick="&quot;moreurl(this,{i:'0'})&quot;" title="追风筝的人">追风筝的人</a><img alt="可试读" src="https://img3.doubanio.com/pics/read.gif" title="可试读"/>
<br/>
<span style="font-size:12px;">The Kite Runner</span>
</div>
<p class="pl">[美] 卡勒德·胡赛尼 / 李继宏 / 上海人民出版社 / 2006-5 / 29.00元</p>
<div class="star clearfix">
<span class="allstar45"></span>
<span class="rating_nums">8.9</span>
<span class="pl">(289413人评价)</span>
</div>
<p class="quote" style="margin: 10px 0; color: #666">
<span class="inq">为你,千千万万遍</span>
</p>
</td>
</tr>

接下来我们把需要的信息一点一点取出来
首先我们想知道书的名字:

title = news.select('a')[1].text.replace(' ','')

取出这段文字中第二个a标签的内容(下标从0开始),并且使用replace(’ ‘,”)将多余的空格去除,便于阅读。

由于作者,出版社,时间,价格等很多内容在一个p标签中,我们要想办法将其分割开

        a = news.select('p')[0].textprice = a.split('/')[-1]time = a.split('/')[-2]store = a.split('/')[-3]

我们先找到这个p段落中的内容:
想办法将其分隔开,但是问题来了,作者的人数为1个或者2个,无法确定,那么怎么才能分别取出来呢?我想了一个机智的办法,从后面往前取不就好了么~
将其根据(‘/’)符号分割,取出倒数第一个内容为价格,倒数第二个内容为出版时间,倒数第三个内容为出版社

name1 = news.select('p')[0].text.split('/')[:-3][0]
        name2 = ""
        try:
            name2 = "," + news.select('p')[0].text.split('/')[:-3][1]
        except:
            pass;

然后我们要取作者的名字了 ,有的作者有一个名字,有的作者是一个外国作者和一个中国译者,为了解决这个问题,我们先根据(‘/’)分割,取出[0:-3]的内容,即出版社之前的内容。
用name1 接收所取出的第一个元素,也就是第一个名字。
第二个名字不一定存在,怎么办呢,我们先默认它为空 :””
然后用try,except语句将接下来的内容进行包括,将有第二个名字的取出,没有的则pass掉。如果不用try语句,则会出现下标越界,程序出错。
然后要取出书籍的简介如图:

可以找到它的类名为inq,但是运行的时候会有错,提示下标越界,运行了几次之后我发现每次都在一个地方停止,如图:

什么鬼,250本书里居然藏着一个没有简介的,坑啊,于是机智的我又做了一个try来取出这个简介语句如下:

jianjie = ""try:jianjie = news.find_all(class_='inq')[0].text except:pass;

为了世界和平,我还给豆瓣发了个e-mail,提醒他们这个错误 : )
最后需要取出的是评价的人数

person = news.find_all(class_='pl')[1].text.replace(' ','')

依然用这一条语句,并且去除多余的空格
以上终于完成了内容的取出,那么将取出的内容放在哪里呢?
答案是一个字典数组~,你可以在这个整个代码的import 之下创建一个数组

newsary = []

然后回到我们刚才所写的地方,向数组中通过append添加内容:

newsary.append({'title': title , 'name': name1 + name2 , 'person':person , 'jianjie': jianjie , 'price' : price , 'time' : time , 'store' : store })

这里大家应该都可以看懂~需要注意的是name 的value 为name1 + name2
然后在循环的外面
由于我们现在获得的只是一页的内容,那么怎么获得下一页的内容呢?
我们经过测试可以得到下一页的链接是:
https://book.douban.com/top250?start=25
下下页是
https://book.douban.com/top250?start=50
明白了么?

for i in range(10):res = requests.get('https://book.douban.com/top250?start=' + str(i*25))

我们只需要这样的一个循环,并且多次向douban发送请求,就可以获得到完整的250条数据了!

之后写:

newsdf = pandas.DataFrame(newsary)
newsdf.to_excel('doubanbook1.xlsx')

使用pandas的DataFrame方法处理newsary,
并且将newsdf的内容存入doubanbook1.xlsx(excel表格)中,
记得提前在这个py文件的同级创建一个doubanbook1.xlsx文件哦。
然后运行这个py文件,等待它运行完成,打开doubanbook1.xlsx文件,就可以看到以下内容:

这个简单的爬虫就结束了~
以下附源码供大家参考:

import requests
from bs4 import BeautifulSoup
import pandasnewsary = []for i in range(10):res = requests.get('https://book.douban.com/top250?start=' + str(i*25))soup = BeautifulSoup(res.text , 'html.parser') for news in soup.select('.item'): #定位person = news.find_all(class_='pl')[1].text.replace(' ','')title = news.select('a')[1].text.replace(' ','')jianjie = ""try:jianjie = news.find_all(class_='inq')[0].text except:pass;name = news.select('p')[0].texta = news.select('p')[0].textprice = a.split('/')[-1]time = a.split('/')[-2]store = a.split('/')[-3]# author = a.split('/')[-4]# name = a.split('/')[:-4]name1 = news.select('p')[0].text.split('/')[:-3][0]name2 = ""try:name2 = "," + news.select('p')[0].text.split('/')[:-3][1]except:pass;newsary.append({'title': title , 'name': name1 + name2 , 'person':person , 'jianjie': jianjie , 'price' : price , 'time' : time , 'store' : store })newsdf = pandas.DataFrame(newsary)
newsdf.to_excel('doubanbook1.xlsx')

谢谢大家的观看,我只是一个初学者,有什么不足的地方欢迎大家指教和批评~
我的github地址是https://github.com/dangsh
欢迎大家来py哦 : )

简单的python爬虫爬豆瓣图书TOP250相关推荐

  1. python爬虫获取豆瓣图书Top250

    在上一篇博客<python爬虫获取豆瓣电影TOP250>中,小菌为大家带来了如何将豆瓣电影Top250的数据存入MySQL数据库的方法.这次的分享,小菌决定再带着大家去研究如何爬取豆瓣图片 ...

  2. 利用python爬取知乎评论_一个简单的python爬虫,爬取知乎

    一个简单的python爬虫,爬取知乎 主要实现 爬取一个收藏夹 里 所有问题答案下的 图片 文字信息暂未收录,可自行实现,比图片更简单 具体代码里有详细注释,请自行阅读 项目源码: 1 # -*- c ...

  3. python爬虫实战—豆瓣电影TOP250

    系列文章目录 python爬虫实战 前言 本文主要用python爬取豆瓣电影TOP250数据并将爬取到的数据保存到MySQL中.同时也介绍了该项目中遇到的问题. 爬取内容:电影名称,电影别名,导演,主 ...

  4. 第一期:【python爬虫】豆瓣电影top250

    1.首先看最后的爬取结果 还有电影的信息,我保存的是csv文件.可以学到爬虫的相关知识和数据保存的信息. 删除信息,直接上代码. 红色圆点旁边的是清空.(如上图所示) 下面请求中的第一个或者前几个(如 ...

  5. java爬虫爬豆瓣图书,十一. 爬虫实战(Xpath)- 豆瓣图书TOP250的数据

    爬取网址:https://book.douban.com/top250 爬取信息:书名.书名链接,评价.评价人数.一句话点评 爬书名时,直接复制xpath会遇到一个坑. 这是由于chrome.Fire ...

  6. Python爬虫获取豆瓣电影TOP250

    最近在学python,研究了下,写了两个爬虫成功爬取了一些东西.有一个很黄很暴力,就不放出来了,还有一个比较绿色,简单,适合初学者学习,思路也比较清晰,也方便我以后再捡起来,注释写的很清楚,特把源码放 ...

  7. 把url地址复制到粘贴板上_写个简单的python爬虫爬取堆糖上漂亮的小姐姐

    简单的爬虫入门实战 最近刚学了python的爬虫,刚好可以用来爬取漂亮的图片作为壁纸,网上美图网站有很多,比如:花瓣,堆糖.它们请求图片数据的方式差不多类似,都是通过用户不断下滑加载新的图片,这种请求 ...

  8. 简单的python爬虫--爬取Taobao淘女郎信息

    最近在学Python的爬虫,顺便就练习了一下爬取淘宝上的淘女郎信息:手法简单,由于淘宝网站本上做了很多的防爬措施,应此效果不太好! 爬虫的入口:https://mm.taobao.com/json/r ...

  9. 简单使用Python爬虫爬取淘宝网页商品信息

    最近在学习爬虫,本人还是入门级的小白,自己跟着老师写了一些代码,算是自己的总结,还有一些心得,跟大家分享一下,如果不当,还请各位前辈斧正. 这是代码: # 导入库 import requests im ...

  10. Python 爬虫爬豆瓣美女图片

    目前以面向过程式来编写,改日重构成面向对象.代码有注释,就不解释各函数的功能了. createNewSet 传入终止的页码,就可以开爬了,抓取过程是从各页的页面得到美女们的地址,存入集合中(集合可以去 ...

最新文章

  1. Tableau必知必会之学做 饼图 和 折线图 的组合图表
  2. eclipse maven jetty启动修改默认端口
  3. python中变量的命名和关键字和变量的命名规则
  4. 如何把html转换cad,Tab2Xls插件(捷克版)将AutoCAD表格转换为XLS、CSV或HTML。
  5. PHP服务器端语言是什么意思,PHP作为服务器端语言,有哪些优点?
  6. CSS3自定义浏览器滚动条样式
  7. NLP+句法结构(三)︱中文句法结构(CIPS2016、依存句法、文法)
  8. python pillow库画图_Pillow画图
  9. cygwin解压linux软件,如何在Cygwin上安装unzip | 望天博客
  10. sam卡和sim卡区别_什么是PSAM卡、SAM卡、SIM卡
  11. Android仿同花顺自选股列表控件
  12. 宝付国际跨境知识小课堂 | 人民币外汇市场是个啥?
  13. C语言解约瑟夫环问题(随机密码版)
  14. 关于压缩工具7-zip的7z脚本用法
  15. PMP到底是啥,你竟然还不知道?
  16. 织梦获取当前栏目的顶级栏目名称。
  17. Anchor-free方法分类整理:阅读导航
  18. 南京邮电大学数据结构实验四(各种排序算法)
  19. Java异步编程指南
  20. java穷举密码_穷举算法和递推算法(Java)

热门文章

  1. 企业微信最全17种获客+4种自动转化玩法
  2. 游戏辅助原理与制作02-植物大战僵尸03-冷却时间基址
  3. java-第十三章-类的无参方法(一)-模拟一个简单的购房商贷月供计算器
  4. axure灯箱效果_将时尚的灯箱效果添加到WordPress画廊
  5. 计算机网络分组交换特点,分组交换技术在计算机网络技术中的作用及特点是什么?...
  6. 仿“当当网”首页-Flash图片轮换
  7. 用计算机制作母亲贺卡,母亲节电子贺卡制作
  8. 桌面图标有蓝底处理刚才
  9. 计算机英语四六级考试时间,2019年12月英语四六级考试时间
  10. plt.plot()有无分号结果不同