这个是Posts目录
新浪滚动新闻爬虫
新浪滚动新闻按日期爬虫脚本 本文参考知乎专栏文章 https://zhuanlan.zhihu.com/p/71925619 新浪的滚动新闻 链接是 https://news.sina.com.cn/roll/#pageid=153&lid=2509&k=&num=50&page=1,这个滚动新闻页如果要爬取新闻标题,#pageid=153&lid=2509&k=&num=50&page=1 是用于在 news.sina.com.cn/roll/ 这个页面内定位特定位置或执行某些客户端脚本的信息,而不是用于向服务器请求不同的内容。 # 开头的 URL 是前端 hash router生成的虚假链接,用这个构造url是请求不了的。新闻是动态加载进去的,通过像后端发请求,后端返回一个json回来,再加载出新闻页面。用f12监控网络请求,会发现选择某个日期时,都发送了这样的请求:https://feed.mix.sina.com.cn/api/roll/get?pageid=153&lid=2516&etime=1746374400&stime=1746460800&ctime=1746460800&date=2025-05-05&k=&num=50&page=1&r=0.4315126633969012&callback=jQuery111209184950013789029_1747390433128&_=1747390433138 这就是真正的后端请求 以下代码来自知乎文章。这个就是滚动新闻当天最新时刻的请求。lid填入不同的数字,相当于底下勾选不同的类型新闻。r可能是随机数。 base_url = 'https://feed.mix.sina.com.cn/api/roll/get?pageid=153&lid={}&k=&num=50&page={}&r={}' # "2509": "全部", # "2510": "国内", # "2511": "国际", # "2669": "社会", # "2512": "体育", # "2513": "娱乐", # "2514": "军事", # "2515": "科技", # "2516": "财经", # "2517": "股市", # "2518": "美股", # "2968": "国内_国际", # "2970": "国内_社会", # "2972": "国际_社会", # "2974": "国内国际社会" 如果要爬取指定日期,根据我们得到的请求格式,多了etime、stime、ctime、date这几个参数 其中,etime、stime、ctime是unix时间戳。先用硬编码的链接,看看这样的请求能否得到一个和网页内容对应的返回内容。 url="https://feed.mix.sina.com.cn/api/roll/get?pageid=153&lid=2516&etime=1725984000&stime=1726070400&ctime=1726070400&date=2024-09-11&k=&num=50&page=2&r=0.08198643836947861&callback=jQuery111209184950013789029_1747390433128&_=1747390433139" response = requests.get(url, headers=headers, timeout=15) response是得到的响应。得到响应后,首先要根据状态判断是否正常收到了响应。这个响应有可能是html,有可能是json。要对响应内容进行解析。根据响应的内容类型(HTML、JSON、XML 等)进行解析。 ...