利用request + BeautifulSoup 模块批量爬取内容,实现批量获取书名对应的豆瓣评分

文章目录

  • 代码
  • 代码解释
  • 控制台输出结果

代码

#-*- coding:utf-8 -*-
from bs4 import BeautifulSoup
import requests, time, json

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"}


def get_detail(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"}
    # url = "https://book.douban.com/subject/34869428/"
    web_data = requests.get(url, headers=headers)
    soup = BeautifulSoup(web_data.text, 'lxml')
    dom = soup.select('#interest_sectl > div > div.rating_self.clearfix > strong')
    if dom:
        rank = dom[0].get_text().strip()
        return rank
    else:
        return '未找到'


def get_book(title):
    url = "https://book.douban.com/j/subject_suggest?q=%s" % title
    rsp = requests.get(url, headers=headers)
    rs_dict = json.loads(rsp.text)
    # print(rs_dict)
    if rs_dict:
        url_ = rs_dict[0]['url']
        return title, get_detail(url_)
    else:
        return title, '未找到'


if __name__ == '__main__':
    book_list = [
        "持续增长:从零搭建企业新媒体运营体系",
        "客户成功:持续复购和利润陡增的基石",
        "企业IT架构转型之道",
        "商业的本质",
        "本质",
        "SaaS创业路线图",
        "数字化转型的道与术",
        "赋能:打造应对不确定性的敏捷团队",
        "商业的力量",
        "联盟:互联网时代的人才变革",
        "重新定义公司:谷歌是如何运营的",
        "影响力(珍藏版)",
        "深度思考:不断逼近问题的本质",
        "责任病毒:如何分派任务和承担责任",
        "凤凰项目:一个IT运维的传奇故事 修订版",
        "创业维艰:如何完成比难更难的事",
        "掌控:开启不疲惫、不焦虑的人生",
        "高效休息法",
        "商业银行IT运维智能化方法与实践",
        "数据赋能:IT团队技术管理实战",
        "心",
        "卓有成效的管理者",
        "销售运营管理:世界500强如何运筹帷幄、决胜市场",
        "关键对话:如何高效能沟通(原书第2版)(珍藏版)",
        "领导梯队:全面打造领导力驱动型公司(原书第2版)(珍藏版)",
    ]
    for i in book_list:
        name, rank = get_book(i)
        print(name, rank)

代码解释

def get_book(title):
    url = "https://book.douban.com/j/subject_suggest?q=%s" % title
    rsp = requests.get(url, headers=headers)
    rs_dict = json.loads(rsp.text)
    # print(rs_dict)
    if rs_dict:
        url_ = rs_dict[0]['url']
        return title, rs_dict[0]['pic'], get_detail(url_)
    else:
        return title, '未找到封面图', '未找到评分'

根据书本名称title,通过requests.get获取书本内容,包括书本的titleurlpic等,如下图
在这里插入图片描述
接着我们把获取到的titleurlpic返回,通过方法get_detail(url)进行接收,通过url进一步获取书本的评分get_details(url)方法如下:

def get_detail(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"}
    # url = "https://book.douban.com/subject/34869428/"
    web_data = requests.get(url, headers=headers)
    soup = BeautifulSoup(web_data.text, 'lxml')
    dom = soup.select('#interest_sectl > div > div.rating_self.clearfix > strong')
    if dom:
        rank = dom[0].get_text().strip()
        return rank
    else:
        return '未找到'

控制台输出结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/843268.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

初识godot游戏引擎并安装

简介 Godot是一款自由开源、由社区驱动的2D和3D游戏引擎。游戏开发虽复杂,却蕴含一定的通用规律,正是为了简化这些通用化的工作,游戏引擎应运而生。Godot引擎作为一款功能丰富的跨平台游戏引擎,通过统一的界面支持创建2D和3D游戏。…

jmeter-beanshell学习11-从文件获取指定数据

参数文件里的参数可能过段时间就不能用了,需要用新的参数。如果有多个交易,读不同的参数文件,但是数据还是一套,就要改多个参数文件。或者只想执行参数文件的某一行数据,又不想调整参数文件顺序。 第一个问题目前想到…

Transformer 翻译

Attention Is All You Need Ashish Vaswani∗ Google Brain avaswanigoogle.com Noam Shazeer∗ Google Brain noamgoogle.com Niki Parmar∗ Google Research nikipgoogle.com Jakob Uszkoreit∗ Google Research uszgoogle.com Llion Jones∗ Google Research lliongoogle.c…

mysql字符类型字段设置默认值为当前时间

-- 2024-07-22 10:22:20 select (DATE_FORMAT(CURRENT_TIMESTAMP, %Y-%m-%d %H:%i:%s)); ALTER TABLE tablename MODIFY COLUNN CREATE_DATE varchar (23) DEFAULT(DATE_FORMAT(CURRENT_TIMESTAMP, %Y-%m-%d %H:%i:%s)) COMMENT "创建日期;

力扣最热一百题——2.字母异位词分组

目录 题目链接:49. 字母异位词分组 - 力扣(LeetCode) 题目 示例 提示 解法一:哈希表排序 思路 代码实现 解法二:记录字母出现的次数哈希表 思路 代码实现 总结 话不多说直接上题目。 题目链接:…

spring MVC 简单案例(3)我的书架管理系统

一、创建项目 最后修改以下 spring 版本 为 2.7.17 Java 版本为 8 同时在 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instanc…

[Python库](3) Arrow库

目录 1.简介 2.安装 3.函数 3.1.获取当前UTC时间( 世界协调时时间 ) 3.2.格式化日期 3.3.创建Arrow对象 3.4.时间改变 3.5.获取时间戳 3.6.时区改变 4.小结 1.简介 Arrow库是一个Python库&#xff0c;提供了一套用于处理日期和时间的API。Arrow库特别适合在需要进行大…

【算法专题】双指针算法之611. 有效三角形的个数(力扣)

欢迎来到CILMY23的博客 &#x1f3c6;本篇主题为&#xff1a;双指针算法之611. 有效三角形的个数&#xff08;力扣&#xff09; &#x1f3c6;个人主页&#xff1a;CILMY23-CSDN博客 &#x1f3c6;系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 | 贪心算法 | Li…

web安全之跨站脚本攻击xss

定义: 后果 比如黑客可以通过恶意代码,拿到用户的cookie就可以去登陆了 分类 存储型 攻击者把恶意脚本存储在目标网站的数据库中(没有过滤直接保存)&#xff0c;当用户访问这个页面时&#xff0c;恶意脚本会从数据库中被读取并在用户浏览器中执行。比如在那些允许用户评论的…

Android APP 基于RecyclerView框架工程(知识体系积累)

说明&#xff1a;这个简单的基于RecyclerView的框架作用在于自己可以将平时积累的一些有效demo整合起来&#xff08;比如音视频编解码的、opengles的以及其他也去方向的、随着项目增多&#xff0c;工程量的增加&#xff0c;后期想高效的分析和查找并不容易&#xff09;&#xf…

java题目之评委打分

public class Main5 {public static void main(String[] args) {//在唱歌比赛中&#xff0c;有6名评委打分&#xff0c;分数范围是[0-100]之间的整数//选手的最后得分为&#xff1a;去掉最高分&#xff0c;最低分后的4个评委的平均分&#xff0c;请完成上述过程中并计算选手的得…

python实现责任链模式

把多个处理方法串成一个list。下一个list的节点是上一个list的属性。 每个节点都有判断是否能处理当前数据的方法。能处理&#xff0c;则直接处理&#xff0c;不能处理则调用下一个节点&#xff08;也就是当前节点的属性&#xff09;来进行处理。 Python 实现责任链模式&#…

若依前后端获取当前用户

后端 Autowired private TokenService tokenService;LoginUser loginUser tokenService.getLoginUser(); sysInquiry.setCreateBy(loginUser.getUsername()); sysInquiry.setCreateTime(DateUtils.getNowDate()); 前端 获取使用 const nickName this.$store.state.user.nick…

为什么有网工刚毕业工资就特别高?

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 你们好&#xff0c;我的网工朋友。 不知道你有没有发现这样一个现象&#xff1a; 有的老兄工作了十几年&#xff0c;还是个基层员工&#xff0c…

【深度学习入门篇 ⑧】关于卷积神经网络

【&#x1f34a;易编橙&#xff1a;一个帮助编程小伙伴少走弯路的终身成长社群&#x1f34a;】 大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; ) &#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

多租户分库分表同步数据库DDL脚本

我们在实现多租户系统的时候&#xff0c;为了数据安全和性能&#xff0c;往往会把数据库设计成一个租户一个数据库&#xff0c;如下图,主库记录了租户信息和对应的数据库地址&#xff0c;租户数据库则存储了租户相关的数据,租户数据库的表结构都是一致的&#xff0c;这种方式有…

npm 安装报错(已解决)+ 运行 “wue-cli-service”不是内部或外部命令,也不是可运行的程序(已解决)

首先先说一下我这个项目是3年前的一个项目了&#xff0c;中间也是经过了多个人的修改惨咋了布置多少个人的思想&#xff0c;这这道我手里直接npm都安装不上&#xff0c;在网上也查询了多种方法&#xff0c;终于是找到问题所在了 问题1&#xff1a; 先是npm i 报错在下面图片&…

全新AI工具——PaintsUndo:一键自动还原图像绘画过程!

ControlNet 作者 Lvmin Zhang 又开始整活了&#xff01;这次发布的PaintsUndo 只需要上传一张图片&#xff0c; 就能够一键生成绘画过程&#xff01;快来了解学习&#xff01; 1、核心技术 PaintsUndo 是一项突破性的技术&#xff0c;旨在通过输入静态图像&#xff0c;自动生…

SpringCloudAlibaba-Seata2.0.0与Nacos2.2.1

一、下载 ## 下载seata wget https://github.com/apache/incubator-seata/releases/download/v2.0.0/seata-server-2.0.0.tar.gz## 解压 tar zxvf seata-server-2.0.0.tar.gz二、执行sql文件 ## 取出sql文件执行 cd /seata/script/server/db/mysql ## 找个mysql数据库执行三、…

分布式服务框架zookeeper+消息队列kafka

一、zookeeper概述 zookeeper是一个分布式服务框架&#xff0c;它主要是用来解决分布式应用中经常遇到的一些数据管理问题&#xff0c;如&#xff1a;命名服务&#xff0c;状态同步&#xff0c;配置中心&#xff0c;集群管理等。 在分布式环境下&#xff0c;经常需要对应用/服…