起因:
本来想去市区玩玩,结果搜到一些相关的新闻,所以就想爬取新闻网站…
1. 爬虫部分
import os
import csv
import time
import requests
"""
# home: https://sh.eastday.com/
# 1. 标题, url, 来源,时间
"""
headers = {
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'
}
def get_data():
file_name = 'shanghai_news.csv'
has_file = os.path.exists(file_name)
# 打开文件,写入模式
with open(file_name, 'a', newline='', encoding='utf-8') as file:
# 创建一个csv.DictWriter对象,用于写入字典数据
columns = ['title', 'url', 'time','source']
writer = csv.DictWriter(file, fieldnames=columns)
# 写入表头
if not has_file:
writer.writeheader()
# 爬取数据. 20页. 每页20条。 每天大概有400个新闻。
for i in range(20):
time.sleep(0.5)
url = f"https://apin.eastday.com/apiplus/special/specialnewslistbyurl?specialUrl=1632798465040016&skipCount={i * 20}&limitCount=20"
resp = requests.get(url, headers=headers)
ret = resp.json()
junk = ret['data']['list']
for x in junk:
item = dict()
item['title'] = x["title"]
item["url"] = x["url"]
item["time"] = x["time"]
item["source"] = x["infoSource"]
# 写入数据
writer.writerow(item)
print(item)
get_data()
效果:
2. 数据分析
2.1 查看每个小时的新闻数量。 11点 – 12点 新闻数量比较少,估计吃饭去了。
2.2 查看新闻来源的分布情况。 实际上来源很多,我选择了前10个。
2.3 其他。
- 8.23日 周五, 新闻总数是119条。
- 8.25日 周日, 新闻总数是48条。
- 所以我猜测是, 毕竟是周末, 新闻工作者也要休息。