思路分析
- 用reuqests发送GET请求,发现抓取的信息的数据源(url)包含在返回的HTML中,获取该数据源(url),再用requests库发送GET请求获取数据;(这个不同于AJAX,因为数据源不用在Chrome debugger中查看XHR对象获取。网站的原理是从数据源获取数据,然后用JS渲染。数据源的API在返回的HTML中就可以找到,很方便。)
- 获取的数据其实是一个JS对象(var x = {}),里面包含了每段新闻的JSON字符串; 并不是单纯一个JSON字符串,所以要用re正则表达式提取;
- 遍历每一条的新闻,将新闻JSON字符串转换为Python字典,那就可以用get方法获取所要的信息。
源码
https://github.com/janetat/Python-toys/tree/master/8.spider-sina-hotnews