字体
关灯
上一章 目录 下一页 进书架
    第77章 爬虫抓取的第一份数据:教辅价格 (4 / 8)

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

        df.to_csv('jd_math_books_page1.csv', index=False, eng='utf-8-sig')

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

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

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

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

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

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

        # 价格清洗

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

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

  The content is not finished, continue reading on the next page
  • 上一章 目录 下一页