Python爬虫入门 | 4 爬取豆瓣TOP250图书信息

爬虫练习-爬取豆瓣网图书TOP250的数据 爬取豆瓣网图书TOP250的数据,书名、链接、作者、出版社、出版时间、价格、评分、评语,并将数据存储于CSV文件中 阅读详情

 
先来看看页面长啥样的:https://book.douban.com/top250

 
我们将要爬取哪些信息:书名、链接、评分、一句话评价……

 

1. 爬取单个信息

我们先来尝试爬取书名,利用之前的套路,还是先复制书名的xpath:

 
得到第一本书《追风筝的人》的书名xpath如下:

//*[@id="content"]/div/div[1]/div/table[1]/tbody/tr/td[2]/div[1]/a

 
得到xpath,我们就可以按照之前的方法来尝试一下:

 
返回的竟然是空值,这就很尴尬了。

这里需要注意,浏览器复制的 xpath 信息并不是完全可靠的,浏览器经常会自己在里面增加多余的 tbody 标签,我们需要手动把这些标签删掉。

 
修改 xpath 后再来尝试,结果如下:

切记:浏览器复制 xpath 不是完全可靠,看到 tbody 标签特别要注意。

 
分别复制《追风筝的人》、《小王子》、《围城》、《解忧杂货店》的 xpath 信息进行对比:

//*[@id="content"]/div/div[1]/div/table[1]/tbody/tr/td[2]/div[1]/a
//*[@id="content"]/div/div[1]/div/table[2]/tbody/tr/td[2]/div[1]/a
//*[@id="content"]/div/div[1]/div/table[3]/tbody/tr/td[2]/div[1]/a
//*[@id="content"]/div/div[1]/div/table[4]/tbody/tr/td[2]/div[1]/a

比较可以发现书名的 xpath 信息仅仅 table 后的序号不一样,并且跟书的序号一致,于是去掉序号(去掉 tbody),我们可以得到通用的 xpath 信息:

//*[@id=“content”]/div/div[1]/div/table/tr/td[2]/div[1]/a

 
好了,我们试试把这一页全部书名爬下来:

 

2.爬取多个信息

 
分别复制《追风筝的人》、《小王子》、《围城》、《解忧杂货店》评分的 xpath 信息进行对比:

//*[@id="content"]/div/div[1]/div/table[1]/tbody/tr/td[2]/div[2]/span[2]
//*[@id="content"]/div/div[1]/div/table[2]/tbody/tr/td[2]/div[2]/span[2]
//*[@id="content"]/div/div[1]/div/table[3]/tbody/tr/td[2]/div[2]/span[2]
//*[@id="content"]/div/div[1]/div/table[4]/tbody/tr/td[2]/div[2]/span[2]

相信你已经可以秒写出爬取全部评分的xpath了:

//*[@id=“content”]/div/div[1]/div/table/tr/td[2]/div[2]/span[2]

把评分的xpath放入之前的代码,运行:

 
现在我们再把书名和评分同时爬取下来:

 
这里我们默认书名和评分爬到的都是完全的、正确的信息,这种默认一般情况没问题,但其实是有缺陷的,如果我们某一项少爬或多爬了信息,那么两种数据的量就不一样了,从而匹配错误。比如下面的例子:

书名xpath 后的@title 改为 text(),获取的文本数量与评分数量不一致,出现匹配错位。

 
如果我们以每本书为单位,分别取获取对应的信息,那肯定完全匹配

 
书名的标签肯定在这本书的框架内,于是我们从书名的标签向上找,发现覆盖整本书的标签(左边网页会有代码包含内容的信息),把xpath 信息复制下来:

//*[@id="content"]/div/div[1]/div/table[1]

 
我们将整本书和书名的xpath进行对比

//*[@id=“content”]/div/div[1]/div/table[1]   #整本书
//*[@id=“content”]/div/div[1]/div/table[1]/tr/td[2]/div[1]/a   #书名
//*[@id=“content”]/div/div[1]/div/table[1]/tr/td[2]/div[2]/span[2]   #评分

 
不难发现,书名和评分 xpath 的前半部分和整本书的 xpath 一致的,
那我们可以通过这样写 xpath 的方式来定位信息:

file=s.xpath(“//*[@id=“content”]/div/div[1]/div/table[1]”)
title =div.xpath(“./tr/td[2]/div[1]/a/@title”)
score=div.xpath(“./tr/td[2]/div[2]/span[2]/text()”)

 
在实际的代码中来看一下:

 
刚刚我们爬了一本书的信息,那如何爬这个页面所有书呢?很简单啊,把 xpath 中

后面定位的序号去掉就ok。

 
终于看到庐山真面目了,不过,等等~

title = div.xpath("./tr/td[2]/div[1]/a/@title")[0]    
score=div.xpath("./tr/td[2]/div[2]/span[2]/text()")[0]

为什么这两行后面多了个 [0] 呢?我们之前爬出来的数据是列表,外面带个方框,看着非常难受,列表只有一个值,对其取第一个值就OK。如果不熟悉列表的知识,可以回去补补。

接下来就是按照这样的方式多爬几个元素啦!

 
有一个点需要注意的是:

num=div.xpath("./tr/td[2]/div[2]/span[3]/text()")[0].strip("(").strip().strip(")")

这行代码用了几个 strip() 方法,()里面表示要删除的内容,strip(“(”) 表示删除括号, strip() 表示删除空白符。

嗯,已经把一个页面搞定了,接下来需要,把所有页面的信息都爬下来。

 

3.翻页,爬取所有页面信息

先来看一下翻页后url是如何变化的:

https://book.douban.com/top250?start=0   #第一页
https://book.douban.com/top250?start=25   #第二页
https://book.douban.com/top250?start=50   #第三页

url 变化的规律很简单,只是 start=() 的数字不一样而已,而且是以每页25为单位,递增25,这不正是每页的书籍的数量吗?于是,我们只需要写一个循环就可以了啊。

for a in range(10):    
  url = 'https://book.douban.com/top250?start={}'.format(a*25)
  #总共10个页面,用 a*25 保证以25为单位递增

 
这里要强调一下 Python range() 函数

基本语法:range(start, stop, step)
start:计数从 start 开始。默认是从 0 开始。例如 range(5) 等价于range(0,5);
end:计数到 end 结束,但不包括 end。例如:range(0,5)是 [0,1,2,3,4] 没有5
step:步长,默认为1。例如:range(0,5) 等价于 range(0,5,1)

>>>range(10)    #从 0 开始到 10 (不包含)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

>>> range(1, 11)    #从 1 开始到 11 (不包含)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

>>> range(0, 30, 5)    #从0到30(不包含),步长为5 
[0, 5, 10, 15, 20, 25]

 
加上循环之后,完整代码如下:

from lxml import etree
import requests
import time

for a in range(10):
    url = 'https://book.douban.com/top250?start={}'.format(a*25)
    data = requests.get(url).text

    s=etree.HTML(data)
    file=s.xpath('//*[@id="content"]/div/div[1]/div/table')
    time.sleep(3)

    for div in file:
        title = div.xpath("./tr/td[2]/div[1]/a/@title")[0]
        href = div.xpath("./tr/td[2]/div[1]/a/@href")[0]
        score=div.xpath("./tr/td[2]/div[2]/span[2]/text()")[0]
        num=div.xpath("./tr/td[2]/div[2]/span[3]/text()")[0].strip("(").strip().strip(")").strip()
        scrible=div.xpath("./tr/td[2]/p[2]/span/text()")

        if len(scrible) > 0:
            print("{},{},{},{},{}\n".format(title,href,score,num,scrible[0]))
        else:
            print("{},{},{},{}\n".format(title,href,score,num))

 
来运行一下:

请务必要自己练习几遍,你觉得自己看懂了,还是会出错,不信我们赌五毛钱。

Python 的基础语法很重要,没事的时候多去看看:字符串、列表、字典、元组、条件语句、循环语句……

编程最重要的是实战,比如你已经能够爬TOP250的图书了,去试试TOP250电影呢。

好了,这节课就到这里!

白白~

如果你想有专业老师授课、有系统性知识、有实时在线答疑的老师的话,可以加入我们的课程《Python爬虫(入门+进阶)》。

下节预告:Python爬虫入门 | 5 爬取小猪短租租房信息

完整7节课程目录:
Python爬虫入门 | 1 Python环境的安装
Python爬虫入门 | 2 爬取豆瓣电影信息
Python爬虫入门 | 3 爬虫必备Python知识
Python爬虫入门 | 4 爬取豆瓣TOP250图书信息
Python爬虫入门 | 5 爬取小猪短租租房信息
Python爬虫入门 | 6 将爬回来的数据存到本地
Python爬虫入门 | 7 分类爬取豆瓣电影,解决动态加载问题

Python爬虫教程——7个爬虫小案例(附源码)_爬虫实例 爬虫的全称为网络爬虫,简称爬虫,别名有网络机器人,网络蜘蛛等等。网络爬虫是一种自动获取网页内容的程序,为搜索引擎提供了重要的数据支撑。搜索引擎通过网络爬虫技术,将互联网中丰富的网页信息保存到本地,形成镜像备份。我们熟悉的谷歌、百度本质上也可理解为一种爬虫。如果形象地理解,爬虫就如同一只机器蜘蛛,它的基本操作就是模拟人的行为去各个网站抓取数据或返回数据。 阅读详情

相关推荐

python爬虫爬取豆瓣图书

爬取豆瓣图书top250的第一页 我最终爬取的是图书的书名,链接 先要做个说明,如果你是编程高手的话,这边文章你就不用看了,如果你是个python爬虫小白的话,可以看看这篇原创 我将用到的软件是pycharm,将要用到的模块是requets, BeautifulSoup. 爬虫很关键的是对网页原代码的分析,在这里我选择的网页是https://book.douban.com/top250,用的浏览器是谷歌浏览器. 1. 我们进入网页后,按鼠标右键—检查—进入网页代码 ...

weixin_53736624的博客 3940

python爬取豆瓣图书Top250

实验要求:爬取豆瓣图书排行榜书单信息,存储到数据库中,并爬取图书评论进行数据分析,提取关键字做成词云展示。

weixin_50280512的博客 4282

Scrapy爬取豆瓣图书Top250数据,在PowerBI中可视化分析

文章目录项目说明Scrapy框架网页分析爬虫代码items![在这里插入图片描述](https://img-blog.csdnimg.cn/20200505124802151.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NvbGVpbH...

soleilxy的博客 3228

python按关键字爬取必应高清图片

通过查询前人的博客,发现必应可通过url按关键字查找图片: https://www.bing.com/images/async?q=查询关键字&first=图片编号&count=图片数量&mmasync=1 基于该url,我写了一个爬虫类,实现了按关键字下载固定数量的必应高清图片。调用时只需要一条python语句即可(由于使用了线程池并发请求图片,所以下载速度较快,一分钟300张高清图片没问题): # 关键词:电脑壁纸 # 需要的图片数量:100 # 图片保存路径:'.

澄南澄北的博客 4789

爬取豆瓣图书top250

爬取豆瓣图书top250 豆瓣网址:https://book.douban.com/top250 豆瓣图书第一页:https://book.douban.com/top250?start=0 豆瓣图书第二页:https://book.douban.com/top250?start=25 豆瓣图书第三页:https://book.douban.com/top250?start=50 豆瓣图书第四页:https://book.douban.com/top250?start=75 …… …… 从上面可以看出来.

bbW.的博客 4623

Python爬虫(十三)——Scrapy爬取豆瓣图书

文章目录Python爬虫(十三)——Scrapy爬取豆瓣图书步骤建立项目和Spider模板编写Spider编写Pipelines配置settings执行程序完整代码鸣谢 Python爬虫(十三)——Scrapy爬取豆瓣图书 这次我们爬取豆瓣图书的top250的目录后进入书籍界面爬取界面中的书籍标签。 步骤 建立项目和Spider模板 使用以下命令 scrapy startproject de...

swhite_zhang 2760

爬虫项目实战:利用爬虫模板爬取豆瓣图书Top250

利用爬虫模板来进行简单的入门项目:爬取豆瓣图书Top250。 爬虫模板、基于selenium框架的爬虫模板(包含登录与验证码问题)、爬虫项目实战:爬虫模板爬取单位净值 (动态更新网址)。

muaamua的博客 4442

neruolib全脑建模计算框架

neurolib 是一个用python编写的全脑建模计算框架,也是可扩展的、允许轻松实现自定义神经质量模型,能够在介观尺度上表示脑区平均活动。

Rootfyx的博客 1147

爬取豆瓣TOP250

第一课《爬取豆瓣TOP250》 基于html跳转

qq_46652932的博客 1万+

【Lua面试】2021年Lua面试题分享(4.25更新)

lua深拷贝和浅拷贝的区别?如何实现深拷贝? lua中ipairs和pairs的区别? 链接: link.

qq_21407523的博客 2万+

Cadence Allegro PCB文件对比实战:3分钟搞定两份设计差异(附颜色标注技巧)

本文详细介绍了如何高效使用Cadence Allegro的Design Compare功能进行PCB文件差异对比。通过实战工作流,可在3分钟内精准定位并理解两份设计在布局、布线、元件等方面的关键差异,并分享了自定义颜色标注技巧,帮助工程师快速聚焦重要修改,提升设计评审与团队协作效率。

weixin_29248653的博客 379

python爬虫从入门到围城_Python爬虫入门 | 4 爬取豆瓣TOP250图书信息

我们将要爬取哪些信息:书名、链接、评分、一句话评价……1. 爬取单个信息我们先来尝试爬取书名,利用之前的套路,还是先复制书名的xpath:得到第一本书《追风筝的人》的书名xpath如下://*[@id="content"]/div/div[1]/div/table[1]/tbody/tr/td[2]/div[1]/a得到xpath,我们就可以按照之前的方法来尝试一下:返回的竟然是空值,这就很尴尬了...

weixin_39968995的博客 151

DDR4协议规范之(一)DDR4结构和寻址

DDR4 SDRAM结构和寻址DDR4 SDRAM的封装和寻址新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 DDR4 SDRAM的封装和寻址 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习

YJFeiii的博客 3万+

为什么用xpath爬取标签是空的_Python爬虫入门 | 4 爬取豆瓣TOP250图书信息

先来看看页面长啥样的:https://book.douban.com/top250?start=25我们将要爬取哪些信息:书名、链接、评分、一句话评价……1. 爬取单个信息我们先来尝试爬取书名,利用之前的套路,还是先复制书名的xpath:得到第一本书《追风筝的人》的书名xpath如下://*[@id="content"]/div/div[1]/div/table[1]/tbody/tr/td[2]...

weixin_39940913的博客 571

电磁仿真新手必看:如何用CST Studio Suite 2023完成第一个PCB辐射仿真?

本文详细解析了如何使用CST Studio Suite 2023进行PCB辐射仿真,适合电磁仿真新手快速上手。从工程准备、求解器配置到端口设置和后处理技巧,全面覆盖三维全波电磁场仿真软件的核心操作步骤,帮助工程师精准预测和解决PCB电磁辐射问题。

y7z8a9的博客 733

微信小程序 - 真机调试调用接口报错{errno: 600001, errMsg: “request:fail -102:net::ERR_CONNECTION_REFUSED},真机运行测试请求异常

微信小程序,真机,调试测试,运行报错,API接口,服务器接口都报错了,小程序报错errno: 600001,小程序报错request:fail -102:net::ERR_CONNECTION_REFUSED,真实手机打开接口全都失效了,微信小程序真机测试失败,微信小程序{errno: 600001, errMsg: "request:fail -102:net::ERR_CONNECTION_REFUSED"},详细解决方法,https,服务器SSL证书,无法解决,服务器更换SSL证书,接口地址改了也不行

🏆 前端领域优质创作者 1万+

Python爬虫入门 | 4 爬取豆瓣TOP250图书信息

点击上方蓝色字体,关注我们先来看看页面长啥样的:https://book.douban.com/top250 我们将要爬取哪些信息:书名、链接、评分、一句话评价……1. ...

Python学习部落 1055

自学 ABAP 和自学 SAP 的差别

有朋友在我的 ABAP 学习教程里留言: > 自学SAP是不是都要搭建虚拟服务器,然后自己去官网下载新版本SAP就可以吗 对于初学者,我们要搞清楚 ABAP 和 SAP 的区别。 ABAP 是一门编程语言,SAP 首先是德国软件公司的名称,也代表这家公司开发的一系列软件。SAP 公司开发的软件,我们有时也称产品,其功能能满足客户一个或者多个领域的业务需求。这些不同领域,我们也称为不同的业务模块,比如 ERP,CRM,SRM,HR 等等。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 6862

利用scrapy爬取豆瓣top250

##前言(目的) 本文为scrapy爬虫的入门文章,作者尽量将自己刚开始学习所遇到的问题都还原出来,过程尽量写得详细详细再详细。希望通过这篇文章来记录自己刚开始学习爬虫所踩过的一些坑,同时记录下自己处理和解决问题的思路,便于和大家分享交流,同时也希望读者能仅仅只通过这一篇文章,就搭建出一个 demo 可以立马上手跑起来。 在本篇文章中,作者先简单的介绍了爬虫的基本概念和 scrapy 爬虫框架,接着以豆瓣电影TOP250为例,详细讲述 scrapy 的实际运用。由于作者水平有限,若有错误或不恰当之处,还望不

一万年太久,只争朝夕 1万+

33、嵌入式系统中的内存操作与实时操作系统

本博客详细探讨了嵌入式系统中的内存操作和实时操作系统(RTOS)的基本原理及应用。内容涵盖C、C++和MicroPython三种语言下的SDRAM读写示例,并结合机器人真空吸尘器的实际应用说明内存的使用场景。此外,还介绍了RTOS的核心概念、组件及其工作机制,包括任务、事件、互斥锁、信号量、队列等,并以FreeRTOS和Mbed OS为例展示了RTOS的配置与使用方法。最后,通过常见问题和实践项目加深对嵌入式系统开发的理解。

zz67890的博客 145

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Python爬虫之爬取豆瓣图书TOP250

爬取豆瓣图书TOP250图书信息及图书海报 写这篇主要是为了去图书馆不知道看什么书或者不知道该买些什么书的时候可以参考经过众多豆友们点评出的好书推荐,哈哈哈哈哈。 上代码(全部代码均在这里,只是分开按照步骤解释一下) 第一步:导入需要用到的包。 from bs4 import BeautifulSoup # 网页解析,获取数据 import urllib.request, urllib.error # 指定url,获取网页数据 import re

JinTian312的博客 8476

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

python爬虫获取豆瓣图书Top250

        在上一篇博客《python爬虫获取豆瓣电影TOP250》中,小菌为大家带来了如何将豆瓣电影Top250的数据存入MySQL数据库的方法。这次的分享,小菌决定再带着大家去研究如何爬取豆瓣图片的Top250信息,并将数据保存在csv文件中! 我们先根据网址https://book.douban.com/to...

大数据梦想家 6565

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

我上次也分享过关于爬取豆瓣电影top250的实战:BeautifulSoup爬取豆瓣电影top250信息 和 python BeautifulSoup爬取豆瓣电影top250信息并写入Excel表格 ,豆瓣网没有反爬虫机制,对于学习爬虫的小白是一个不错的学习对象,python xpath我是初步学习,对豆瓣图书 Top 250 进行实战学习,xpath的优点之一就是可以直接复制获取信息的节点,如图...

阿优乐扬的博客 5488

python采用requests+bs4爬取豆瓣top250图书信息

1.介绍 使用python采用requests+bs4爬取豆瓣top250图书信息,参考代码中都有注释就不详细说了。 链接:https://book.douban.com/top250?start=0 可以输出的内容:(对应上图举例) 图书封面的链接:https://img1.doubanio.com/view/subject/s/public/s1070959.jpg 书名:红楼梦 作者:[清] 曹雪芹 著 出版社: 人民文学出版社 发行年份:1996-12 价格:59.70元 评分:9.6 评价人数:

Gary的博客 3891

Scrapy框架入门实例:Scrapy爬取豆瓣图书Top250

刚学了scrapy框架,找一个东西练练手 点击此处查看网页 先在cmd创建一个项目 ,记得先切换到对应的目录下面 scrapy startproject doubanTop 要把这些信息全部爬取下来故,先在items文件里面把要提取的信息的名字写好 items.py import scrapy class DoubantopItem(scrapy.Item): # define ...

Trial & Error 4489
上一篇: Python爬虫入门 | 3 爬虫必备Python知识
下一篇: Python爬虫入门 | 5 爬取小猪短租租房信息
DataCastle
博客等级 码龄10年 870粉丝 202原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值