propaganda-scraper
- 仓库:
- Waaangjl/local_central-level-propaganda
- 语言:
- Python
- 年份:
- 2022 — 已归档
2022 年我写的一个 Python 爬虫,给我的本科 Signature Work 毕业论文供数据——Framing the Crisis 那篇论文背后的整条数据流水线。它从《人民日报》《环球时报》《解放日报》《新民晚报》拉文章,把那些乱七八糟的日期格式统一成 ISO,清掉 HTML,输出可以直接喂 LDA 的 CSV。
我把这个 repo 留着公开、归档,是因为关于它有两件事值得明说。
代码比我今天会写的旧
这是我写的第一份不那么 trivial 的 Python。全是 requests + BeautifulSoup,没有 async,没有像样的 rate limiting——只有一个客气的 2 秒 sleep,目录结构没有任何今天的我会替它辩护。异常处理大半是 except Exception:。还有一条硬编码的路径指向我那台 DKU 旧笔记本。
我故意没有改它。这是我作为程序员当时所在位置的一份诚实记录——那时候我急需数据,急到不顾代码质量也要把它写出来。现在回去重写,等于改写历史。
但那份数据让那篇论文成立
四份报纸,2022 年 4 月 1 日到 6 月 30 日(上海封控那一段),共 1,161 篇报道。没有这个爬虫就没有那篇论文——只有一个我没法验证的假设而已。代码很粗糙;输出经得起四个答辩委员和一次公开答辩的检阅。这种不对称——「能跑出可用数据集的代码」和「写得好的代码」之间的不对称——是写它的过程中,我学到的更有用的几件事之一。
仓库里有什么
scrapers/people_daily.py—— 处理《人民日报》存档里的按日期编址 URL。scrapers/global_times.py—— 处理 paginated 的索引页。scrapers/jiefang.py、scrapers/xinmin.py—— 两份上海本地报纸,都是同一类 CMS 的后台。clean.py—— 日期格式归一(四份报纸用了四种格式)、HTML 清洗、编码修复。out/—— 实际跑出来的 CSV,已 frozen。
关于负责任使用的一句话
这都是公开的报刊文章,爬得也很客气。没有任何东西绕开了付费墙、或者爬了你在上海图书馆读不到的内容。如果你 fork 之后把它指向不该指的地方,那是你的事。
克隆
git clone https://github.com/Waaangjl/local_central-level-propaganda
cd local_central-level-propaganda
pip install -r requirements.txt
python scrapers/people_daily.py --start 2022-04-01 --end 2022-06-30
仓库:github.com/Waaangjl/local_central-level-propaganda ↗
相关:用了这份数据的那篇毕业论文 — Framing the Crisis →