蓝翔图书

字:
关灯 护眼
蓝翔图书 > 财富圣杯 > 第77章 爬虫抓取的第一份数据:教辅价格

第77章 爬虫抓取的第一份数据:教辅价格(2/3)

)

    except AttributeErrore:

    print(f“解析错误: {e}, 跳过此项“)

    continue

    df = pd.dataFrame(books, columns=['书名','价格','店铺','评价数'])

    df.to_csv('jd_math_books_', index=False, encoding='utf-8-sig')

    短短几十行代码,他调试了大半天。问题层出不穷:标签class名不准确、某些商品信息缺失导致find返回None进而引发AttributeError、价格符号和评价文本中夹杂着“¥”、“+”等需要清洗的字符、以及最棘手的——京东的部分商品信息是通过JavaScript动态加载的,直接请求HTmL页面获取不到。他不得不学习使用requests抓取实际的接口数据(通过开发者工具查work中的XHR请求),这比解析静态HTmL复杂得多。

    第四、五天:优化、多页抓取与当当网适配。

    解决动态加载问题后,他增加了循环,尝试抓取前5页数据(约100条)。他加入了((1, 3))在每次请求之间随机休眠1-3秒,避免访问过快触发反爬。数据存储也从单页覆盖改为追加模式。

    接着,他用类似的方法分析当当网的结构,编写了适配的爬虫脚本。当当的反爬似乎弱一些,但页面结构也略有不同,需要调整选择器。

    第六天:数据清洗与初步分析。

    他成功抓取了京东156条、当当189条有效数据。但原始数据很“脏”:价格是字符串“¥39.80”,需要提取数字;评价数可能是“2万+”,需要转换为近似数值(如20000);店铺名有冗余信息。他用pandas进行了清洗:

    # 价格清洗

    df['价格'] = df['价格'].str.replace('¥', '').astype(float)

    # 评价数清洗(简化处理,将“万+”乘以10000)

    def clean_mit(x):

    if '万'str(x):

    return float(str(x).replace('万+','').replace('万','')) * 10000

    else:

    return float(str(x).replace('+',''))

    df['评价数'] = df['评价数'].apply(clean_mit)

    清洗后,他进行了快速的探索性分析:

    1. 价格分布:用df['价格'].describe和直方图查看。初中数学教辅价格主要集中在20-60元区间,均价约35元,但也有少数高端教辅(如竞赛专题)价格超过100元。

    2. 销量(评价数)与价格关系:绘制散点图,发现评价数(粗略代表销量)与价格呈微弱负相关,但高评价的爆款往往集中在30-50元这个“黄金价格带”。

    3. 店铺分析:发现销量高的店铺,除了官方自营,主要是几家大型专营教辅的图书专营店。个人小店铺销量普遍很低。

    4. 竞品初步观察:筛选出评价数最高的前20本书,查看其书名、特点。发现畅销品集中在几个系列(如“五年中考三年模拟”、“教材全解”、“实验班”等),且名称中常包含“必刷题”、“压轴题”、“冲刺”等关键词,紧扣应试痛点。

    第七天:整合与洞察。

    他将两份数据(京东、当当)合并,去重(基于书名和价格),得到一个包含312条记录的“初中数学教辅市场样本数据”。他用新学的plotly制作了交互式仪表盘雏形,可以按价格区间、店铺类型、评价数范围进行筛选和查看。

    在“商业洞察日记”中,他记录了这次爬虫实践的完整过程和主要发现:

    【技能实践:爬虫抓取教辅价格数据】

    ? 目标:获取电商平台初中数学教辅公开数据,用于市场分析。

    ? 过程:

    1. 技术路径:requests + BeautifulSoup + pandas。应对了动态加载、反爬休眠、数据清洗等典型问题。

    2. 数据量:最终获得312条有效商品记录(京东156,当当189
本章未完,请点击下一页继续阅读》》
『加入书签,方便阅读』
内容有问题?点击>>>邮件反馈