Python实现isbn查询书籍详细信息

简介: Python实现通过isbn码查询书籍详细信息

如有错误,请疯狂打脸没关系,希望能够指出来。

0. 开始的开始

一直想做一个图书漂流软件,最近入手(入坑)了微信小程序,添加图书时需要用到isbn查询书籍信息的API(不用也可以,但用户会非常麻烦,强迫症晚期的我又跳入了isbn查询API的坑),但发现别人的API都很贵,豆瓣也收回了API的使用权,估计是要收费了。
所以,与其在坑里苦苦挣扎,不如。。。。再挖一个更大的坑,自己做一个。。。

1. 开始

首先打算用python写个爬虫(能力与知识有限,现在只能想到这个办法,如前辈们有更好的办法,请砸过来)。
搜索了几个可以用isbn查书籍信息的网站,最后还是选择了豆瓣。
豆瓣isbn查书籍信息的流程为:

  1. 打开豆瓣读书的首页

    20191013134450510.png

  2. 在搜索框输入isbn码

    20191013134508154.png

  3. 回车或点击小放大镜,书籍的信息出来了

    20191013134545522.png

本来想的很好,就这样一路闪电带火花把核心代码写了,然而,总有不尽人意的地方。就在第3步,本来打算在这里把信息给爬了,却发现爬回来是空的,也不知道什么原因(查html代码,发现有一级标签id为root,可能豆瓣设置了权限,猜的,具体原因不知道)。

2. 爬取内容

虽然人生不尽人意,但还是要走下去。在第3步的页面,点击书名或图片会出来更详细的信息。

20191013142023353.png

果然,这里的信息可以爬取,要什么有什么。

2.1 获取书籍信息页面的链接地址

思路:
打开豆瓣读书首页,模拟浏览器填写isbn码,进行搜索,跳转到搜索结果页面,读取a标签href链接,即书籍信息页面的链接地址。
代码如下:

def isbn_search(isbn):
    """
        输入:isbn
        输出:豆瓣搜索结果的书籍链接
    """
    # 创建浏览器对象
    browser = webdriver.PhantomJS()
    # 请求网址
    browser.get("https://book.douban.com/subject_search?search_text=" + isbn + "&cat=1001")
    # 解析网页信息
    soup = BeautifulSoup(browser.page_source, "lxml")
    # 读取标签内容
    tags = soup.select("#root > div > div > div > div > div > div > a")
    # 正则查找href链接
    link_list = re.findall(r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')", str(tags[0]))
    # 关闭浏览器
    browser.close()
    return link_list[0]

2.2 爬取书籍详细信息

思路:
打开2.1获取的页面,找到书籍信息块代码,爬回并清洗,得到需要的信息。
代码如下:

def book_info(douban_link):
    """
        输入:豆瓣书籍链接
        输出:书籍信息
    """
    # 请求网址
    g=requests.get(douban_link)
    # 解析网页信息
    soup=BeautifulSoup(g.content,"lxml")
    # 由于书名和其他信息不在一起,单独处理书名
    title = "书名: 《" + re.sub('[\f\n\r\t\v]','',re.sub('<([^>]+?)>','',str((soup.select("#wrapper > h1 > span"))[0]))) + "》"
    # 存储书籍信息
    infos = [title]
    # 返回特定区域的html代码块
    span_list = soup.findChild('div',{
   
   'id':'info'})

    for item in str(span_list).split('<br/>'): # 将信息按项目分割,每个item是一个信息项
        # 用两次正则,一次去掉多余html代码,一次去掉制表换行等字符
        # .split(":")以:分割每个信息项目
        info_item = re.sub('[\f\n\r\t\v]','',re.sub('<([^>]+?)>','',item)).split(":")
        info_temp = [] # 存放以“/”分隔的item
        for info_item_item in info_item:
            sprit = info_item_item.partition("/") # 以“/”分隔info_item_item
            for sprit_item in sprit:
                info_temp += sprit_item.partition("]") # 以“/”分隔sprit_item, 并将处理后的列表合并

        # info_temp 存储单项信息的列表
        # 以单项信息为操作单位去除空格
        # temp_list 存储去空格处理后的单项信息
        temp_list = []
        for temp in info_temp:
            ddd=temp.strip() # 去掉字符左右的空格
            # 过滤掉因去掉空格而产生的空字符串
            if ddd != '':
                temp_list.append(ddd)
            else:
                continue
            # 在书籍属性后加“:”
            info = temp_list[0] + ': '
            for i in range(1, len(temp_list)):
                info += temp_list[i] # 拼接每个信息项目

        # 判断temp_list是否为空,为空则info为错误值,不存入infos
        if temp_list:
            pass
        else:
            continue 

        infos.append(info)

    return infos

3. 效果

20191014112041629.png


20191014112452864.png

这里使用PhantomJS浏览器,但会报UserWarning,Selenium最新版不支持PhantomJS了,我用的Selenium 3.141.0,UserWarning建议使用谷歌或火狐浏览器的无头模式,但我没成功,如有大佬成功了希望交流一下。

4. 完整代码下载

由于csdn下载积分随下载次数不断增加,如积分不够,可私聊我,如果有积分还是希望赞助一下。

仅供学习,勿作商用,如有违反,我也不管 >-<
不知道豆瓣有一天会不会把这个方法给ban掉。

相关文章
|
3月前
|
前端开发 数据安全/隐私保护 Python
虚拟物流单号生成器, 虚拟快递单号假物流信息, 虚拟快递单号在线生成【python框架】
这个虚拟物流单号生成系统包含以下功能:支持多种主流快递公司的单号生成
|
3月前
|
数据安全/隐私保护 数据格式 Python
快递单号模拟生成器, 虚拟物流信息在线生成,虚假快递单号生成器【python】
支持多种主流快递公司生成符合各快递公司规则的快递单号自动生成收发件人信息
|
3月前
|
JSON 前端开发 API
快递单号生成器在线, 快递单号模拟生成器, 虚拟物流信息在线生成【python】
项目包含三个主要模块:快递单号生成器核心逻辑、Flask Web应用程序和前端HTML页面
|
3月前
|
JSON API 数据安全/隐私保护
车辆五项信息查询 API 的实践指南:通过Python调用赋能车辆信息标准化
本API通过车牌号快速获取车辆五项核心信息,包括品牌、登记日期、车架号等,助力二手车评估、维修、保险等场景实现数字化转型。数据源自权威公安交管库,日更同步,毫秒级响应,满足高并发需求,符合隐私保护规范,是推动汽车后市场智能化的重要工具。
161 0
|
4月前
|
API Python
VIN码查询API的实战指南:获取二手车信息以Python为例
随着机动车保有量上升,中国二手车市场迎来发展机遇。本文介绍如何通过VIN码查询API获取车辆详细信息,提升交易透明度与安全性。
81 1
|
4月前
|
数据采集 存储 数据可视化
Python爬取招标信息并生成可视化分析报告
Python爬取招标信息并生成可视化分析报告
|
8月前
|
存储 算法 API
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
1162 82
|
6月前
|
存储 监控 API
【Azure App Service】分享使用Python Code获取App Service的服务器日志记录管理配置信息
本文介绍了如何通过Python代码获取App Service中“Web服务器日志记录”的配置状态。借助`azure-mgmt-web` SDK,可通过初始化`WebSiteManagementClient`对象、调用`get_configuration`方法来查看`http_logging_enabled`的值,从而判断日志记录是否启用及存储方式(关闭、存储或文件系统)。示例代码详细展示了实现步骤,并附有执行结果与官方文档参考链接,帮助开发者快速定位和解决问题。
170 23
|
10月前
|
存储 小程序 Python
农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序
### 农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序 该程序通过`lunardate`库实现公历与农历的日期转换,支持闰月和跨年处理,用户输入农历节日名称后,可准确计算距离该节日还有多少天。功能包括农历节日查询、倒计时计算等。欢迎使用! (239字符)
538 86
|
7月前
|
数据库 Python
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断

热门文章

最新文章

推荐镜像

更多