当前位置:   article > 正文

基于Python爬虫对当当网图书信息采集(10w条数据)+代码_爬取当当网python书籍

爬取当当网python书籍
  • 柱状图展示不同价格区间的图书数量。
出版社排名图
  • 折线图展示出版社的图书数量排名。
作者出书数量图
  • 条形图展示作者的出书数量。
评论热力图
  • 热力图展示图书评论的分布情况。

结论

通过对10万条当当图书网数据的采集和分析,我们能够深入理解当前图书市场的动态,为出版社、作者和读者提供有价值的市场洞察。


在这里插入图片描述在这里插入图片描述
在这里插入图片描述

完整代码

def get\_page\_tree(url):
    from requests.adapters import HTTPAdapter
    page = requests.session()
    page.mount('http://',HTTPAdapter(max_retries=80))
    page.mount('https://',HTTPAdapter(max_retries=80))
    page = page.request("GET",url=url,timeout=120)
    print('page ' , page ,page.text)

    tree = etree.HTML(page.text)
    return tree


# xpath语法 获取li对象 因为li标签不只一个 所以用lis
def get\_lis(tree):
    lis = tree.xpath('//\*[@id="search\_nature\_rg"]/ul/li')
    return lis


def deal\_save(url , pressN,page_index):
    global sum
    global row
    tree = get\_page\_tree(url)
    # 获取到lis对象
    lis = get\_lis(tree)
    # time.sleep(random.randint(1,3))
    print("正在爬取...", url)
    # 遍历lis 返回index下标和item
    try:
        for c, i in enumerate(lis):
            # 根据xpath规则提取图书标题
            name = i.xpath('a/@title')
            name = str(name[0])
            name = name.strip()
            # 根据xpath规则提取图书描述
            desc = i.xpath('p[2]/text()')
            # 根据xpath规则提取图书价格和该书电子书的价格
            price_normal = i.xpath('p[3]/span[1]/text()')  # 纸质书的价格

            price_normal = price_normal[0]
            price_net = i.xpath('p[3]/a/i/text()')  # 电子书的价格
            # 根据xpath规则提取图书的作者
            author = i.xpath('p[@class="search\_book\_author"]/span[1]/a/text()')  # 作者
            if len(author) == 0:
                author = '没有作者'
            else:
                author = author[0]
            # 根据xpath规则提取图书出版时间
            press_time = i.xpath('p[@class="search\_book\_author"]/span[2]/text()')
            if len(press_time) == 0:
                press_time = '出版时间为空'
            else:
                press_time = press_time[0][2:]
            # 根据xpath规则提取图书出版社
            press = i.xpath('p[@class="search\_book\_author"]/span[3]/a/text()')
            if len(press) == 0:
                press = '出版社为空'
            else:
                press = press[0]
            if len(desc) != 0:
                desc = desc[0]
            else:
                desc = "null"
            if len(price_net) != 0:
                price_net = price_net[0]
            else:
                price_net = "暂无电子书"
            sum += 1
            # 输出信息
            print('第{}页--第{}条数据--累计爬取{}条:'.format(page_index, c, sum))
            print('书名:《{}》'.format(name))
            print('图书价格:{}'.format(price_normal))
            print('电子书价格:{}'.format(price_net))
            print('作者:{}'.format(author))
            print('出版社:{}'.format(press))
            print('出版时间:{}'.format(press_time))
            print('\*' \* 25)
            time.sleep(0.1)
            # 保存信息
            sheet.write(row, 0, name)
            sheet.write(row, 1, desc)
            sheet.write(row, 2 , price_normal)
            sheet.write(row, 3 , price_net)
            sheet.write(row, 4 , author)
            sheet.write(row, 5 , press_time)
            sheet.write(row, 6 , press)
            row = row + 1

    except Exception as e:
        print(e)



# 主要爬虫程序  遍历给定出版社 所有的图书
def start (url , pressN):
    # 获取page的etree
    new_url = url.format(press_name, 1)
    tree = get\_page\_tree(new_url)
    # 获取该出版社展示图书总页数
    total = tree.xpath('//\*[@id="12810"]/div[5]/div[2]/div/ul/li[9]/a/text()')[0]
    print('{}一共{}页'.format(pressN,total))
    # 全局变量的sum 总数
    global sum
    # time.sleep(2)
    # 线程保存的数组
    threads = [ ]
    # 遍历所有页面 从1到total
    for page_index in range(1, int(total) + 1):
        time.sleep(0.2)
        temp_url = url.format(pressN,page_index)
        temp\_t = Thread(target=deal_save , args = ( temp_url,press_name,page_index, ))
        threads.append(temp\_t)
        temp\_t.start()
    for index, t in enumerate(threads):
        t.join()


if __name__ == '\_\_main\_\_':
    # 通过file读取所有出版社 保存为list数组
    s = time.time()
    press = []


    with open('Press.txt' , 'r' , encoding='utf-8') as f :
        a = f.read()
        f.close()
    # 拆封数据
    press = a.split('\n')
    url = 'http://search.dangdang.com/?key={}&page\_index={}'
    # 遍历所有出版社
    for press_name in press:
        start(url , press_name)
        print('正在采集{}'.format(press_name))

    end = time.time()
    book.save('当当网图书汇总.xlsx')
    print(  '共花费:' ,str((end-s) ) , 's ,共计爬取:{}条'.format(sum))

 **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/c832257990e34528d758bcbd9d4481a3.png)

![img](https://img-blog.csdnimg.cn/img_convert/4071f1327cd28f9b9d1be2cd0e71cbda.png)

![img](https://img-blog.csdnimg.cn/img_convert/8a8932d2aef3941c7074e35fe00a2794.png)

![img](https://img-blog.csdnimg.cn/img_convert/9975a56b6ba08cddfac3367835b858db.png)

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)**

8edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)**

<img src="https://img-community.csdnimg.cn/images/fd6ebf0d450a4dbea7428752dc7ffd34.jpg" alt="img" style="zoom:50%;" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/809531
推荐阅读
相关标签
  

闽ICP备14008679号