1. 爬取和分析京东网站数据; 2. 用自己的学号作为项目名称; 3. 用搜索关键字爬取“京东网站”,并爬取“笔记本”商品的下列数据:商品名、价格、店铺名、评价数; 4. 将数据保存到 mongodb数据库中; 5. 用pandas工具包读取数据库中的数据进行下列分析,并用matplotlib可视化输出: a. 读取数据库中“笔记本”数据。 b. 预处理:将价格转换为浮点数,将评价数转换为整数。 c. 分析笔记本价格分布:直方图(x轴表示价格、y轴表示该价格区间的商品数量),添加样本总数说明。 d. 分析联想各型号笔记本的销售量和均价,绘制两个柱状图:x轴表示笔记本型号、y轴表示该笔记本销量或均价,并标明销量或均价值。


项目名称:学号_京东笔记本数据分析 爬虫部分 ```python import requests from bs4 import BeautifulSoup import pymongo import re # MongoDB连接 client = pymongo.MongoClient('mongodb://localhost:27017/') db = client['学号_京东笔记本数据'] collection = db['notebooks'] def get_product_info(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') products = [] items = soup.find_all('li', class_='gl-item') for item in items: name = item.find('div', class_='p-name').a.em.text.strip() price = item.find('strong', class_='J_price').i.text.strip() shop = item.find('a', class_='curr-shop').text.strip() comments = item.find('a', class_='J_comment').text.strip() # 数据清洗 price = float(re.sub(r'[^\d.]', '', price)) comments = int(re.sub(r'\D', '', comments)) product = { 'name': name, 'price': price, 'shop': shop, 'comments': comments } products.append(product) return products def save_to_mongodb(products): collection.insert_many(products) def main(): url = 'https://search.jd.com/Search?keyword=笔记本&enc=utf-8' products = get_product_info(url) save_to_mongodb(products) print(f'已爬取 {len(products)} 条数据并保存到 MongoDB') if __name__ == '__main__': main() ``` 数据分析部分 ```python import pandas as pd import matplotlib.pyplot as plt # 连接 MongoDB client = pymongo.MongoClient('mongodb://localhost:27017/') db = client['学号_京东笔记本数据'] collection = db['notebooks'] # 读取数据 data = list(collection.find()) df = pd.DataFrame(data) # 数据预处理 df['price'] = df['price'].astype(float) df['comments'] = df['comments'].astype(int) # 价格分布直方图 plt.figure(figsize=(10, 6)) plt.hist(df['price'], bins=30, edgecolor='black') plt.title('笔记本价格分布') plt.xlabel('价格') plt.ylabel('数量') plt.text(0.95, 0.95, f'总样本数: {len(df)}', ha='right', va='top', transform=plt.gca().transAxes) plt.show() # 联想笔记本分析 lenovo_df = df[df['name'].str.contains('联想')] model_sales = lenovo_df.groupby('name')['comments'].sum().sort_values(ascending=False) model_prices = lenovo_df.groupby('name')['price'].mean() # 销售量柱状图 plt.figure(figsize=(12, 6)) model_sales.plot(kind='bar') plt.title('联想笔记本销售量') plt.xlabel('型号') plt.ylabel('销量') for i, v in enumerate(model_sales): plt.text(i, v + 10, str(v), ha='center', va='bottom') plt.show() # 均价柱状图 plt.figure(figsize=(12, 6)) model_prices.plot(kind='bar', color='skyblue') plt.title('联想笔记本均价') plt.xlabel('型号') plt.ylabel('均价') for i, v in enumerate(model_prices): plt.text(i, v + 10, f'{v:.2f}', ha='center', va='bottom') plt.show() ``` 需要注意的逻辑点: 1. 反爬虫机制:京东网站有反爬虫机制,频繁请求可能会被封 IP。可以考虑使用代理 IP 或者设置合理的请求间隔时间。 2. 数据清洗:在爬取数据时,商品名、价格、店铺名、评价数等字段可能包含特殊字符或空格,需要进行适当的清洗处理。 3. 异常处理:在爬取和处理数据时,可能会遇到网络请求失败、解析错误等情况,建议添加异常处理机制,确保程序的健壮性。 [2024-12-12 00:20:07 | AI写代码神器 | 968点数解答]
- 1. 爬取和分析京东网站数据; 2. 用自己的学号作为项目名称; 3. 用搜索关键字爬取“京东网站”,并爬取“笔记本”商品的下列数据:商品名、价格、店铺名、评价数; 4. 将数据保存到 mongodb数据库中; 5. 用pandas工具包读取数据库中的数据进行下列分析,并用matplotlib可视化输出: a. 读取数据库中“笔记本”数据。 b. 预处理:将价格转换为浮点数,将评价数转换为整数。 c. 分析笔记本价格分布:直方图(x轴表示价格、y轴表示该价格区间的商品数量),添加样本总数说明。 d. 分析联想各型号笔记本的销售量和均价,绘制两个柱状图:x轴表示笔记本型号、y轴表示该笔记本销量或均价,并标明销量或均价值。(968点数解答 | 2024-12-12 00:20:07)159
- 实验目的: 1.巩固理解java的面向对象程序设计概念 2.理解java封装的含义 3.理解static, final等关键字的含义及应用实验内容: 定义 book类,给每一本书自动赋上索书号 is sn1, issn2... 声明一个图书类,其数据成员为书名、编号(利用静态变量实现自动编号“issn1” “is sn2”) 书价,册数和静态属性图书的总册数,在构造方法中利用静态变量为对象的编号赋值,在主方法中 定义对象数组,并求出总册数。运行效果如下: 【书名]:java程序书名]:java程序书名]:ava程序 书名j:c语言程序设计书名]:c语言程序设计书名]:null 书名]:nul1 [书名]:nu11 【价格]:35.6 【价格]:35.6 【价格]:35.6 [价格]:42.6 [价格]:42.6 [价格]:8.日 [价格]:8.8 [价格]:8.0 [图书線号]:issn1图书编号]:issn2[图书编号):issn3[图书编号j:issn4图书编号]:issn5图书線号】:issn6[图书線号]:issn7[图书編号]:issn8 [本书的册数]:3 [本书的册数]:(1469点数解答 | 2024-04-02 10:20:41)319
- - ItemId: 12720 #道具id A级赛车 雷诺 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 127758 #道具id 宠物 冰凤 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 21980 #道具id 效率宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 - ItemId: 21986 #道具id 重生宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 这种文本文件如何用易语言读入并显示到超级列表框内 (571点数解答 | 2025-08-23 20:54:40)86
- - ItemId: 12720 #道具id A级赛车 雷诺 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 127758 #道具id 宠物 冰凤 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 21980 #道具id 效率宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 - ItemId: 21986 #道具id 重生宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 这种文本文件如何用易语言读入并显示到超级列表框内,并且可以增加新的一样的文本(1317点数解答 | 2025-08-23 20:58:40)97
- 某班级共有45位同学,分别叫做“第i位学生”(i取值为1至45),每位学生有4次成绩,分别是期中考试成绩,期末考试成绩,平时成绩和作业成绩。假设期中成绩分布在[80,98]区间,期末成绩分布在[40,100]区间,平时成绩分布在[85,97]区间,作业成绩分布在[88,100]区间。通过调用random模块给每位同学录入对应的四次成绩。 定义一个名为cheng_ji的函数,不接收任何参数。按照第1位学生,第2位学生,…,第45位学生的顺序,将学生名字、期中考试成绩、期末考试成绩、平时成绩和作业成绩用return语句依次输出。调用该函数时,函数值显示结果如下: ([],[],[],[],[])(477点数解答 | 2024-12-17 17:00:35)258
- 某班级共有45位同学,分别叫做“第i位学生”(i取值为1至45),每位学生有4次成绩,分别是期中考试成绩,期末考试成绩,平时成绩和作业成绩。假设期中成绩分布在[80,98]区间,期末成绩分布在[40,100]区间,平时成绩分布在[85,97]区间,作业成绩分布在[88,100]区间。通过调用random模块给每位同学录入对应的四次成绩。 定义一个名为cheng_ji的函数,不接收任何参数。按照第1位学生,第2位学生,...,第45位学生的顺序,将期中考试成绩,期末考试成绩,平时成绩和作业成绩用return语句输出。 实践内容2:统计总评成绩 将本班45位同学的成绩按照如下比例统计出总评成绩:期中考试成绩占30%,期末考试成绩占40%,平时成绩占10%,作业成绩占20%。 定义一个名为zong_ping的函数,不接收任何参数,用return语句输出该班同学的总评成绩(结果取整),按照第1位学生,第2位学生,…,第45位学生的顺序。 输出结果举例:([86,58,…89])。 实践内容3:统计最高分,最低分和平均成绩 统计本班45位同学总评成绩中的最低分,最高分和平均成绩。 定义一个名为san_fen的函数,不接收任何参数,用return语句输出最低分,最高分,和平均分(均取整)。 输出格式如下: (第34位学生,58,第26位学生,93,78)(579点数解答 | 2024-12-21 11:55:01)139
- 某班级共有45位同学,分别叫做“第i位学生”(i取值为1至45),每位学生有4次成绩,分别是期中考试成绩,期末考试成绩,平时成绩和作业成绩。假设期中成绩分布在[80,98]区间,期末成绩分布在[40,100]区间,平时成绩分布在[85,97]区间,作业成绩分布在[88,100]区间。通过调用random模块给每位同学录入对应的四次成绩。 定义一个名为cheng_ji的函数,不接收任何参数。按照第1位学生,第2位学生,…,第45位学生的顺序,将学生名字、期中考试成绩、期末考试成绩、平时成绩和作业成绩用return语句依次输出。调用该函数时,函数值显示结果如下: ([],[],[],[],[]),语言方向:Python(441点数解答 | 2024-12-21 21:02:22)154
- 某班级共有45位同学,分别叫做“第i位学生”(i取值为1至45),每位学生有4次成绩,分别是期中考试成绩,期末考试成绩,平时成绩和作业成绩。假设期中成绩分布在[80,98]区间,期末成绩分布在[40,100]区间,平时成绩分布在[85,97]区间,作业成绩分布在[88,100]区间。通过调用random模块给每位同学录入对应的四次成绩。 定义一个名为cheng_ji的函数,不接收任何参数。按照第1位学生,第2位学生,...,第45位学生的顺序,将期中考试成绩,期末考试成绩,平时成绩和作业成绩用return语句输出。 实践内容2:统计总评成绩 将本班45位同学的成绩按照如下比例统计出总评成绩:期中考试成绩占30%,期末考试成绩占40%,平时成绩占10%,作业成绩占20%。 定义一个名为zong_ping的函数,不接收任何参数,用return语句输出该班同学的总评成绩(结果取整),按照第1位学生,第2位学生,…,第45位学生的顺序。 输出结果举例:([86,58,…89])。 实践内容3:统计最高分,最低分和平均成绩 统计本班45位同学总评成绩中的最低分,最高分和平均成绩。 定义一个名为san_fen的函数,不接收任何参数,用return语句输出最低分,最高分,和平均分(均取整)。 输出格式如下: (第34位学生,58,第26位学生,93,78) import random def cheng_ji(): def zong_ping(): def san_fen(): qi_mo = [] qi_zhong = [] ping_shi = [] zuo_ye = [] zongping = [] xue_sheng = [] for i in range(45):(688点数解答 | 2024-12-22 10:14:17)153
- mongodb - com.mongodb.mongobulkwriteexception: bulk write operation error on server 172.17.134.159:3717. write errors: [bulkwriteerror{index=0, code=11000, message='e11000 duplicate key error collection: imlaw_analyst.qtf_test_question index: _id_ dup key: { : objectid('65d41c36f57700003b004d21') }', details={ }}]. 2024-02-20 11:43:55 [analysisstatistics.analysisstatisticslog-53] at com.mongodb.connection.bulkwritebatchcombiner.geterror(bulkwritebatchcombiner.java:176)(397点数解答 | 2024-02-20 11:59:14)266
- datax mongodb - com.mongodb.mongobulkwriteexception: bulk write operation error on server 172.17.134.159:3717. write errors: [bulkwriteerror{index=0, code=11000, message='e11000 duplicate key error collection: imlaw_analyst.qtf_test_question index: _id_ dup key: { : objectid('65d41c36f57700003b004d21') }', details={ }}]. 2024-02-20 11:43:55 [analysisstatistics.analysisstatisticslog-53] at com.mongodb.connection.bulkwritebatchcombiner.geterror(bulkwritebatchcombiner.java:176)(134点数解答 | 2024-02-20 11:59:27)287
- c语音 定义一个结构体student,其中包含的成员为char no[10];char name[10];float score。设有5个学生,从键盘输入其信息,按成绩的升序排序。并输出这5个学生排序后的信息。 输入格式: "%s%s%f" 输出格式: "请输入第%d位同学的信息:姓名 学号 成绩\n" "%s,%s,%.0f\n" 输入样例: 张三 10001 98↙ 李四 10002 100↙ 王五 10003 95↙ 赵六 10004 99↙ 钱七 10005 93↙ 输出样例: 请输入第1位同学的信息:姓名 学号 成绩↙ 请输入第2位同学的信息:姓名 学号 成绩↙ 请输入第3位同学的信息:姓名 学号 成绩↙ 请输入第4位同学的信息:姓名 学号 成绩↙ 请输入第5位同学的信息:姓名 学号 成绩↙ 钱七,10005,93↙ 王五,10003,95↙ 张三,10001,98↙ 赵六,10004,99↙ 李四,10002,100↙(373点数解答 | 2024-10-30 00:37:20)293
- 定义一个结构体student,其中包含的成员为char no[10];char name[10];float score。设有5个学生,从键盘输入其信息,按成绩的升序排序。并输出这5个学生排序后的信息。 输入格式: "%s%s%f" 输出格式: "请输入第%d位同学的信息:姓名 学号 成绩\n" "%s,%s,%.0f\n" 输入样例: 张三 10001 98 李四 10002 100 王五 10003 95 赵六 10004 99 钱七 10005 93 输出样例: 请输入第1位同学的信息:姓名 学号 成绩 请输入第2位同学的信息:姓名 学号 成绩 请输入第3位同学的信息:姓名 学号 成绩 请输入第4位同学的信息:姓名 学号 成绩 请输入第5位同学的信息:姓名 学号 成绩 钱七,10005,93 王五,10003,95 张三,10001,98 赵六,10004,99 李四,10002,100(354点数解答 | 2024-10-30 18:45:58)229