爬取起点网站图书信息(书名、作者、简介、图片url)

2023-11-11

# 爬取qidian网站图书信息(书名、作者、简介、图片url)
import requests
from lxml import etree
import json

class BookSpider(object):
    def __init__(self):
        self.url = 'https://www.qidian.com/finish?action=hidden&orderId=&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=2&page={}'
        self.headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
        }
        self.data_list = []
    # 1、构建所有url
    def get_url_list(self):
        url_list = []
        for i in range(1,6):
            url = self.url.format(i)
            url_list.append(url)
        return url_list
    # 2、发请求
    def send_request(self,url):
        data = requests.get(url,headers=self.headers).content.decode()
        print(url)
        return data
    # 3、解析数据 xpath
    def parse_xpath_data(self,data):
        parse_data = etree.HTML(data)
        # 1、解析出所有的书
        book_list = parse_data.xpath('//div[@class="book-img-text"]/ul/li')
        # 2、解析出每本书的信息
        for book in book_list:
            book_dict = {}
            # 1、书名字
            book_dict['book_name'] = book.xpath('.//div[@class="book-mid-info"]/h4/a/text()')[0]
            # book_name = book.xpath('//div[@class="book-mid-info"]/h4/a/text()') # //div前不加 . 解析(查找)的是全部范围  ,加 . 是再上一次解析(book)基础上继续解析(查询)
            # 2、书的图片url
            book_dict['book_img_url'] = book.xpath('.//div[@class="book-img-box"]/a/img/@src')[0]
            # 3、书的作者
            book_dict['book_author'] = book.xpath('.//div[@class="book-mid-info"]/p[@class="author"]/a[@class="name"]/text()')[0]
            # 4、书的简介
            book_dict['book_info'] = book.xpath('.//div[@class="book-mid-info"]/p[@class="intro"]/text()')[0].strip() #加strip()去空格
            self.data_list.append(book_dict)
    # 4、保存数据
    def save_data(self):
        json.dump(self.data_list,open('book.json','w'))
    # 5、统筹调用
    def start(self):
        url_list = self.get_url_list()
        # 循环遍历,发送请求
        for url in url_list:
            data = self.send_request(url)
            self.parse_xpath_data(data)
            self.save_data()
BookSpider().start()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

爬取起点网站图书信息(书名、作者、简介、图片url) 的相关文章

随机推荐

  • MySql的增删改查操作(初学者个人心得)

    引言 在上周粗略的学习了有关MySql的相关基础内容 为了方便自己复习 特写下这篇个人心得 来记录MySql有关增删改查操作的内容 MySql学习中最重要的一部分 启动数据库 DOS命令进入mysql的bin文件夹 net start my
  • Linux服务器安全 SSH 用户密钥认证登录

    一 SSH基本简介 SSH 提供两种安全验证方式 1 基于口令 客户端使用账号和口令登录服务器 所有传输数据都会被加密 但可能存在伪造服务器冒充真正的服务器与客户端进行交互 不能避免中间人攻击 2 基于密钥 使用一对密钥 私钥 公钥 将公钥
  • ReentrantLock的使用和原理详解

    文章目录 一 ReentrantLock 小例子 二 ReentrantLock的优点 1 可重入 其实synchronized 也是可重入的 2 可中断 3 可限时 3 公平锁 一 ReentrantLock 小例子 import jav
  • 1 - 选择排序与冒泡排序

    排序算法 选择排序 选择排序的思路 依次遍历数组 每次遍历数组的时候 记录当前未排序的最小值的索引 让最小值的索引和待排序的数组的第一个元素进行交换 然后继续重复操作 直到所有元素都排序 public class SelectionSort
  • 关于JavaScript中map和reduce的分析

    以前看js都是云里雾里的 后来学了一些Java感觉稍微能看懂一些 恰逢又回头看到了以前关于js在有道云上的一些笔记 决定做一个关于map和reduce的分析 map map一般来说针对数组进行操作 但是进行了一个很好的封装使得读者可以清晰的
  • PHP获取二维数组中指定Key的重复Value

  • C++获取类私有成员指针

    获取类首地址 根据成员定义顺序去计算想要的私有成员地址 class A private int a float b public A a 1 b 1 public float getB return b void test A a floa
  • 图书管理系统2.0——mysql数据库

    目录 一 简要介绍 1 使用技术 2 简要功能 3 源码 二 需求文档 1 登录 2 注册 3 用户菜单 3 1 借阅图书 3 1 归还图书 3 2 个人中心 3 2 1 查看所有借阅记录 3 2 2 查看借阅中的图书 3 2 3 签到领积
  • 线程基础篇(十五)之使用ReentrantLock实现消费者生产者

    author Dora date 2020 4 8 9 55 public class QueueLearn 使用读写锁 实现队列的消费 实现一个队列 static ConcurrentLinkedQueue queue new Concu
  • 解决eclipse中出现BASE64Encoder cannot be resolved to a type

    在eclipse中 在进行文件下载时控制台出现 BASE64Encoder cannot be resolved to a type情况导致文件无法下载 针对以上的情况可以试试以下方法 第一种 然后重新运行一下项目 看是否成功 如果不可以就
  • 泰勒公式回顾贴

    泰勒公式 sinx 和 arcsinx 第二项符号不同 sinx x 1 6 x 3 arcsinx x 1 6 x 3 sinx 和 cosx的区别 sinx的系数是奇数阶乘 1 3 5 cosx的系数是偶数阶乘 2 4 6 tanx 和
  • 服务器主机本地系统开机,本地主机启动tomcat v9.0服务器错误

    我试图启动一个tomcat v9 0服务器在本地主机上春天STS但它会弹出以下错误 本地主机启动tomcat v9 0服务器错误 本地主机起tomcat服务器V9 0遇到了问题 没有使用的端口8080 所以这不应该是8080端口没有任何进程
  • Mac 10.15下安装brew

    在Mac下初次使用brew命令会出现 bash brew command not found 随后找了各大博客 要在命令行输入如下命令 bin zsh c curl fsSL https gitee com cunkai HomebrewC
  • 历年研究生数学建模优秀论文汇总

    全国研究生数学建模竞赛 National Post Graduate Mathematical Contest in Modeling 是 全国研究生创新实践系列活动 的主题赛事之一 一般位于九月中旬 历时四天 竞赛题目一般来源于工程与管理
  • 卷积神经网络实现人脸表情识别

    文章目录 一 实现过程 二 运用训练的模型实现表情识别 一 实现过程 1 1 下载数据集 https github com truongnmt smile detection 1 2 根据猫狗数据集训练的方法来训练笑脸数据集 coding
  • HBase介绍(列存储)

    HBase介绍 列存储 2013 11 26 23 25 5871人阅读 评论 2 收藏 举报 分类 云存储 2 Hbase简介 started by chad walters and jim 2006 11 G release paper
  • FPGA-UART串口通信

    目录 前言 1 UART串口的介绍 2 实验开始前一些参数的计算 3 UART通信的时序 4 代码部分 1 接收部分代码 2 发送部分的代码 前言 本篇文章是为了记录自己FPGA的学习过程 不完全正确 仅供参考 1 UART串口的介绍 ua
  • 02守护进程学习之创建守护进程的七步骤及其分析

    02守护进程学习之创建守护进程的七步骤及其分析 与守护进程相关的文章 01守护进程学习之会话的概念和创建会话 包含Linux下相应id的总结一览 02守护进程学习之创建守护进程的七步骤及其分析 03守护进程学习之创建守护进程的代码例子 1
  • unicode,decode,encode在python的作用

    字符串在Python内部的表示是unicode编码 因此 在做编码转换时 通常需要以unicode作为中间编码 即先将其他编码的字符串解码 decode 成unicode 再从unicode编码 encode 成另一种编码 即 其他编码 g
  • 爬取起点网站图书信息(书名、作者、简介、图片url)

    爬取qidian网站图书信息 书名 作者 简介 图片url import requests from lxml import etree import json class BookSpider object def init self s