当前位置:   article > 正文

大数据毕业设计:图书数据爬取分析可视化系统 python爬虫 Flask框架 当当网 (附源码)✅_网络数据爬取及可视化分析---图书阅读分析

网络数据爬取及可视化分析---图书阅读分析

博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌感兴趣的可以先收藏起来,点赞、关注不迷路✌

毕业设计:2023-2024年计算机毕业设计1000套(建议收藏)

毕业设计:2023-2024年最新最全计算机专业毕业设计选题汇总

1、项目介绍

技术栈:
Python语言、Flask框架、网络爬虫技术、Echarts可视化、当当网数据、HTML

2、项目界面

(1)数据可视化大屏
在这里插入图片描述

(2)图书小说作者前十
在这里插入图片描述
(3)图书数据浏览
在这里插入图片描述

(4)图书畅销榜

在这里插入图片描述

(5)注册登录界面

在这里插入图片描述

(6)后台数据管理
在这里插入图片描述

(7)数据爬虫
在这里插入图片描述

3、项目说明

该系统是一个基于Python语言和Flask框架开发的图书数据爬取分析可视化系统。系统通过网络爬虫技术从当当网上爬取图书数据,并通过Echarts可视化库将数据以图表的形式展示出来。用户可以通过系统界面输入关键词进行图书搜索,系统将根据关键词从当当网上爬取相关的图书信息。

系统主要包括以下功能:

  1. 图书搜索功能:用户可以在系统界面输入关键词进行图书搜索,系统将从当当网上爬取相关的图书信息并展示给用户。
  2. 图书数据分析功能:系统将从当当网上爬取的图书数据进行分析,如统计不同类型图书的数量、评分、价格等信息,并通过Echarts可视化库将分析结果以图表的形式展示出来,用户可以直观地了解图书数据的分布情况。
  3. 数据导出功能:用户可以将系统分析得到的图书数据导出为HTML文件,方便用户进行进一步的数据分析和处理。

该系统的开发使用了Python语言作为主要开发语言,Flask框架用于搭建系统的Web界面,网络爬虫技术用于从当当网上爬取图书数据,Echarts可视化库用于将数据以图表的形式展示出来,HTML用于实现系统的界面展示。系统具有图书搜索、数据分析和数据导出等功能,能够方便用户进行图书数据的分析和可视化展示。

4、核心代码



import requests
import ssl
from bs4 import BeautifulSoup
import json
import traceback
ssl._create_default_https_context = ssl._create_unverified_context
from project import models
import time
import urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)



def resou():
    for i in range(1,6):
        url = 'http://api.dangdang.com/community7/faxian/hot-search-word-bang?ct=iphone&cv=9.5.1&user_client=iphone&client_version=9.5.1&union_id=537-50&permanent_id=20180417200316522357078741534625445&udid=7891F89FFBFB287CF94E92A9765A1EFB&time_code=3cf2905b201653ef3197664e5bf4cf5e&timestamp=1560409597&global_province_id=111%20%20%20%20&a=hot-search-word-bang-for-pc&c=faxian&imageSize=h&catpath=01.00.00.00.00.00&page={}&pageSize=10'.format(i)
        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"
        }
        h = requests.get(url=url,headers=headers,verify=False)
        print(h)
        for resu in h.json()['data']:
            if not models.resou_Books.query.filter(models.resou_Books.word==resu['word']).all():
                models.db.session.add(
                    models.resou_Books(
                        word=resu['word'],
                        pv=resu['pv']
                    )
                )
            else:
                res = models.resou_Books.query.filter(models.resou_Books.word==resu['word']).all()
                res[0].pv = resu['pv']
                models.db.session.commit()

def haoping():
    for iz in range(1, 25):
        url = 'http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-2-{}'.format(iz)
        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"
        }

        req = requests.get(url=url,headers=headers,verify=False)
        # print(req)
        soup = BeautifulSoup(req.text,'html.parser')
        lis = soup.select('ul.bang_list > li')
        for li in lis:
            time.sleep(0.5)
            try:
                dicts = {}
                dicts['name'] = li.select('div.name')[0].text.strip()
                dicts['pinglun'] = str(li.select('div.star > a')[0].text).strip().replace('条评论', '')
                dicts['tujian'] = li.select('div.star > span')[1].text.replace('%推荐','')
                dicts['auth'] = li.select('div.publisher_info')[0].text.split('/')[0].strip()
                dicts['shangshi'] = li.select('div.publisher_info')[0].text.split('/')[1].strip()
                dicts['chubanshe'] = li.select('div.publisher_info')[0].text.split('/')[2].strip()
                dicts['price_n'] = li.select('span.price_n')[0].text.replace('¥', '')
                dicts['price_r'] = li.select('span.price_r')[0].text.replace('¥', '')
                print(dicts)
                if not models.haoping_Books.query.filter(models.haoping_Books.name == dicts['name']).all():
                    models.db.session.add(
                        models.haoping_Books(
                            name=dicts['name'],
                            pinglun=dicts['pinglun'],
                            tujian=dicts['tujian'],
                            auth=dicts['auth'],
                            shangshi=dicts['shangshi'],
                            chubanshe=dicts['chubanshe'],
                            price_n=dicts['price_n'],
                            price_r=dicts['price_r'],
                        )
                    )
                    models.db.session.commit()
            except :
                print(traceback.format_exc())
                pass


def tushuchangxiao_count():
    for iz in range(1,25):
        url = 'http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-recent30-0-0-1-{}'.format(iz)
        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"
        }

        req = requests.get(url=url,headers=headers,verify=False)
        # print(req)
        soup = BeautifulSoup(req.text,'html.parser')
        lis = soup.select('ul.bang_list.clearfix.bang_list_mode > li')

        for li in lis:
            time.sleep(0.1)
            dicts = {}
            try:
                dicts['name'] = li.select('div.name')[0].text.strip()
                dicts['pinglun'] = str(li.select('div.star > a')[0].text).strip().replace('条评论','')
                dicts['tujian'] = li.select('div.star > span')[1].text.replace('%推荐','')
                dicts['publisher_info'] = li.select('div.publisher_info')[0].text
                dicts['publisher_info2'] = li.select('div.publisher_info')[1].text
                dicts['price_n'] = li.select('span.price_n')[0].text.replace('¥','')
                dicts['price_r'] = li.select('span.price_r')[0].text.replace('¥','')
                url = li.select('div.pic > a')[0].attrs.get('href')
                print(url)
                req2 = requests.get(url=url,verify=False,headers=headers)
                soup2 = BeautifulSoup(req2.text, 'html.parser')
                itype = soup2.select('div#breadcrumb > a')[1].text.strip()
                dicts['itype'] = itype
                if not models.changxiao_Books_count.query.filter(models.changxiao_Books_count.name == dicts['name']).all():
                    models.db.session.add(
                        models.changxiao_Books_count(
                            name=dicts['name'],
                            pinglun=dicts['pinglun'],
                            tujian=dicts['tujian'],
                            publisher_info=dicts['publisher_info'],
                            publisher_info2=dicts['publisher_info2'],
                            price_n=dicts['price_n'],
                            price_r=dicts['price_r'],
                            type=dicts['itype']
                        )
                    )
                    models.db.session.commit()
                print(dicts)
            except Exception as e:
                print(e)
                pass

def tushuchangxiao():
    result = {
        "小说":"http://bang.dangdang.com/books/bestsellers/01.03.00.00.00.00-recent30-0-0-1-{}",
        "童书":"http://bang.dangdang.com/books/bestsellers/01.41.00.00.00.00-recent30-0-0-1-{}",
        "文学":"http://bang.dangdang.com/books/bestsellers/01.05.00.00.00.00-recent30-0-0-1-{}"

    }
    for key,_value in result.items():
        for iz in range(1,25):
            url = _value.format(iz)
            print(url)
            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"
            }

            req = requests.get(url=url,headers=headers,verify=False)
            # print(req)
            soup = BeautifulSoup(req.text,'html.parser')
            lis = soup.select('ul.bang_list.clearfix.bang_list_mode > li')

            for li in lis:
                time.sleep(0.1)
                dicts = {}
                try:
                    dicts['name'] = li.select('div.name')[0].text.strip()
                    dicts['pinglun'] = str(li.select('div.star > a')[0].text).strip().replace('条评论','')
                    dicts['tujian'] = li.select('div.star > span')[1].text.replace('%推荐','')
                    dicts['publisher_info'] = li.select('div.publisher_info')[0].text
                    dicts['publisher_info2'] = li.select('div.publisher_info')[1].text
                    dicts['price_n'] = li.select('span.price_n')[0].text.replace('¥','')
                    dicts['price_r'] = li.select('span.price_r')[0].text.replace('¥','')
                    if not models.changxiao_Books.query.filter(models.changxiao_Books.name == dicts['name']).all():
                        models.db.session.add(
                            models.changxiao_Books(
                                name=dicts['name'],
                                pinglun=dicts['pinglun'],
                                tujian=dicts['tujian'],
                                publisher_info=dicts['publisher_info'],
                                publisher_info2=dicts['publisher_info2'],
                                price_n=dicts['price_n'],
                                price_r=dicts['price_r'],
                                type=key
                            )
                        )
                        models.db.session.commit()
                    print(dicts)
                except Exception as e:
                    print(traceback.format_exc())
                    pass



if __name__ == '__main__':
    resou()
    haoping()
    # tushuchangxiao()
    # tushuchangxiao_count()




  • 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
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/540852

推荐阅读
相关标签