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

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

时间:2024-07-22 21:26:31浏览次数:15  
标签:rs 批量 title url get request BeautifulSoup headers dict

文章目录

代码

#-*- 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 '未找到'

控制台输出结果

在这里插入图片描述

标签:rs,批量,title,url,get,request,BeautifulSoup,headers,dict
From: https://blog.csdn.net/WwLK123/article/details/140603009

相关文章

  • 深度学习——批量归一化处理
    1.为什么要进行归一化处理1.对于我们输入而言,标准化输入是一项重要的步骤,例如预测房间时,我们让特征值方差为1,均值为0,可以使我们的参数量级做到统一2.对于典型的多层感知机而言,有些层输出的范围可能与输入的范围存在过大的区别,导致我们的模型收敛速度过慢3.越深的模型,越容易......
  • mybatis使用foreach批量插入
    创建表createtablepublic."match"(match_datedatenotnull,match_namecharactervarying(20)notnull,match_seasoncharactervarying(10)notnull,match_roundnumeric(2)notnull,home_teamcharactervarying(30)notnull,away_teamcharact......
  • 如何批量上传到Remini?
    因此,我必须使用Android上的Remini应用程序来增强上千张不同的图像。我尝试手动处理这些图像,但每张图像都花费了我30秒的时间和大量的精力。问题是我总是需要从图库中选择不同的图像,然后等到它得到增强,然后我可以将其保存到我的图库中。遗憾的是,Remini不允许您批量上传......
  • 使用 beautifulsoup python 更改内部标签的文本
    我想更改使用Beautifulsoup获得的HTML中标签的内部文本。示例:<ahref="index.html"id="websiteName">Foo</a>变成:<ahref="index.html"id="websiteName">Bar</a>我已经设法通过其id获取标签:HTMLDocument.find(id......
  • sqlalchemy.exc.InvalidRequestError
    我收到此错误,但我不明白如何解决它。当我使用uvicorn运行FastApi时出现此错误。要注意利用循环模型导入的错误,我使用了TYPE_CHEKINGsqlalchemy.ext.InvalidRequestError:Oneormoremappersfailedtoinitialize-can'tproceedwithinitializationofotherm......
  • 用SqlBulkCopy批量插入数据 遇到的错误
    原文链接:https://www.cnblogs.com/wz327/archive/2011/07/05/2098356.html错误一:来自数据源的String类型的给定值不能转换为指定目标列的类型nvarchar。还有其他的错误如:AddTime不能为DBNull(这个应该是目标表中AddTime要求不许为null) 可能的原因有两种可能是有"'"(单引......
  • linux-批量修改文件内容
    1.批量修改文件内容$find.-typef-execsed-i's/oldname/newname/g'{}+#此命令含义:在当前目录及其所有子目录中查找所有文件,并对这些文件执行sed命令,将文件内容中的所有oldname字符串替换为newname。#find.:从当前目录(.)开始查找文件。#typef:指定查找的类型为文......
  • Python - requests
    前言:介绍:安装及验证:使用:连续接口请求:传参方式: 前言:当你上班无聊的时候,你做什么,说实话有人让我写个requests的教程,教程我觉得网上已经有很多教程了,也很全面,我还是不要献丑了介绍:哎,我认为就是一个接口请求的仓库,不过requests属于第三方库,......
  • Beautifulsoup:.find() 和 .select() 之间的区别
    当您使用BeautifulSoup抓取网站的某个部分时,您可以使用soup.find()和soup.findAll()或soup.select().find()和||之间有区别吗?|方法?(例如在性能或灵活性等方面)或者它们是相同的吗?.selec......
  • 腾讯课堂视频批量下载
    腾讯课堂视频下载重要通知腾讯课堂将于2024年8月1日起停止所有在线课程的访问服务,用户将无法访问新的课程内容,但可继续观看【课程表】中的历史免费课程内容。腾讯课堂将于2024年10月1日停止运营,届时全面停止所有平台服务,感谢各位用户多年以来的支持与陪伴。腾讯......