本文作者:张珍珍,河南大学经济学院
本文编辑:胡皖豫
技术总编:马梦杰
Stata and Python 数据分析
爬虫俱乐部Stata基础课程、Stata进阶课程和Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~
豆瓣网是日常生活和娱乐常用的平台,它既可以提供书籍、电影等,也能翻阅真实的评论、评分。本期推文,我们聚焦豆瓣读书中“新书速递”板块,用stata获取相关图文信息,不仅可以帮助读者获取读书清单,还为读者提供爬虫的教学。
网站:https://book.douban.com/latest?subcat=全部&p=1&updated_at=,将网址复制到浏览器中,页面如下图所示:
通过观察页面,需要提取的信息如下(以第一本书为例):
|
|
|
|
|
《世间的火:初为人母的故事》 |
|
|
张畅 / 2025-8-18 / 上海译文出版社 / 52.00 / 平装 |
评分 |
8.6 |
|
|
120 |
纸质版价格 |
33.8元 |
链接 |
https://book.douban.com/subject/37396257/ |
|
|
15 |
通过观察,我们决定爬取所有页面中的书名,以及其对应的书籍信息、链接、评分、评价人数和纸质版价格。
STEP1:将页面存储到本地
运行如下代码:
clear allcd "C:\Users\ZhangZhenZhen\Desktop\豆瓣图书"copy "https://book.douban.com/latest?subcat=全部&p=1&updated_at=" book1.txt, replace
将网页中第一页的内容以txt的格式存储到定义的路径(这里的路径需要根据自身电脑的实际情况更改,切忌照搬照抄)。
STEP2:观察页面信息
打开txt文件,如下图:
所有图书的链接前面都有“href=”,所有的书名都在“>”和“</a>”之间等。书籍的信息、纸质版的价格、评分以及评分人数都分布在书名信息的固定下“几”行,这些信息将作为提取需要信息的关键内容。
STEP3:提取需要的信息
在stata中运行如下代码(包括将book1.txt导入到stata中的代码):
infix strL v 1-100000 using book1.txt, cleargen 链接 = ustrregexs(1) if ustrregexm(v, `"href="(.*?)""')gen 书名 = ustrregexs(1) if ustrregexm(v, `">(.*?)</a>"')gen 评分 = ustrregexs(1) if ustrregexm(v, `"<span class="font-small fleft">(.*?)</span>"')gen 评价人数 = ustrregexs(1) if ustrregexm(v, `"<span class="fleft ml8 color-gray">(.*?)</span>"')gen 书籍信息 = ""replace 书籍信息 = v[_n+3] if 书名 != ""replace 评分 = 评分[_n+7] if 书名 != ""replace 评价人数 = 评价[_n+8] if 书名 != ""keep if !missing(书籍信息) | regexm(v, "纸质")gen 纸质版价格 = ""replace 纸质版价格 = v[_n+1] if 书名 != ""keep if ustrregexm(纸质版价格, "纸质")drop v
STEP4:数据再加工
为了使数据更加清晰直观,进行如下处理:(1)书名加入书名号;(2)纸质版价格只保留价格;(3)删除评价人数中的括号。
运行如下代码,保留并存储数据:
replace 书名 = "《" + 书名 + "》"replace 纸质版价格 = subinstr(纸质版价格, "纸质版", "", .)replace 评价人数 = ustrregexs(1) if ustrregexm(评价人数, "(\d+)")save "book1.dta", replace
最终呈现出的结果如下图:
在爬取多页时,由于每页代码具有相同的信息排布规律,只需在现有代码基础上嵌入循环语句,即可实现 “一次编写、批量爬取”的效果。 运行如下代码:
clear allcd "C:\Users\ZhangZhenZhen\Desktop\豆瓣图书"forvalues i = 2/15 {copy "https://book.douban.com/latest?subcat=全部&p=`i'&updated_at=" book`i'.txt, replaceinfix strL v 1-100000 using book`i'.txt, cleargen 链接 = ustrregexs(1) if ustrregexm(v, `"href="(.*?)""')gen 书名 = ustrregexs(1) if ustrregexm(v, `">(.*?)</a>"')gen 评分 = ustrregexs(1) if ustrregexm(v, `"<span class="font-small fleft">(.*?)</span>"')gen 评价人数 = ustrregexs(1) if ustrregexm(v, `"<span class="fleft ml8 color-gray">(.*?)</span>"')gen 书籍信息 = ""replace 书籍信息 = v[_n+3] if 书名 != ""replace 评分 = 评分[_n+7] if 书名 != ""replace 评价人数 = 评价[_n+8] if 书名 != ""keep if !missing(书籍信息) | regexm(v, "纸质")gen 纸质版价格 = ""replace 纸质版价格 = v[_n+1] if 书名 != ""keep if ustrregexm(纸质版价格, "纸质")drop vreplace 书名 = "《" + 书名 + "》"replace 纸质版价格 = subinstr(纸质版价格, "纸质版", "", .)replace 评价人数 = ustrregexs(1) if ustrregexm(评价人数, "(\d+)")save "book`i'.dta", replace}
运行上述代码后,会自动生成 book2 至 book15 的数据集。此时只需将 book1 到 book15 进行纵向合并,就能获得全部图书数据。运行如下代码:
clear alluse book1, clearforvalues i = 2/15{append using "book`i'.dta"}save book.dta, replaceexport excel using "book.xls", firstrow(var) replace
通过观察代码,小编将最终版数据存储了两种格式:一种是dta格式;一种是excel格式。大家可自主选择存储类型。
最终爬取的excel文件,如下图:
以第八行为例,复制链接到浏览器(或双击),如下图,页面对应的信息与excel中完全一致。
以上就是全部的图书信息了,一键即可获取读书清单。记得清洗在爬取过程中产生的垃圾文件,批量删除方法可以参考往期推文。
好啦!以上就是本期的全部内容,非常感谢您能看到这里,如果觉得文章还不错的话可以一键点赞+在看+转发,你们的支持就是我创作的不竭动力。以上就是本期的全部内容,我们下期再见!
声明:代码仅供学习使用,请勿用做任何商业行为!
重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
Seminar | 自动化对企业报告质量的影响
识别处理重复值duplicates命令
Pandas 数据筛选的多种方法
Stata入门:reshape命令---数据结构的“智能”变形
化繁为简:用高德地图API统计银行网点分布
探索 Stata 绘图:基于 S&P500 数据的可视化分析
Python Selenium爬取裁判文书网:从登录到批量下载全流程自动化
用正则表达式玩转混乱文本
Python实战-爬取政府采购网
万物皆有方程组吗?——利用deepseek构建基于极坐标下的莲花曲线
爬虫俱乐部2025暑期Stata&Python编程训练营开始报名啦!
当Stata遇上周易:数据分析师的Cyber算命指南与玄学新副业
【Python CleverCSV】让CSV文件处理更便捷
【Stata神技】Winsor2缩尾处理:3分钟拯救被"土豪"带偏的数据!
Stata矩阵 —— 开启高效数据分析的魔法之门
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
我们团队一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

