平常我们查看新闻、资讯都是通过相关软件获取的,有时候推送给我们的新闻、资讯并不是我们所要关注的,特别是对做投资的人来说,每天需要关注的信息量很大,国家政策、市场信息、监管新闻、央行动作等等,当然如果一个个网站去打开当然可以实现目的,但是随着关注面越来越广,这个过程既费时又不一定满足需求,笔者之前看李笑来老师的文章中提到,笑来老师很久之前就实现资讯定制化功能了,就是把自己需要关注的信息、网站通过爬虫维护起来,每天一打开电脑,这些信息通过爬虫自动完成收集工作,我们要做的就是基于某些个别信息深入查看下,基于这个思路,笔者尝试做一个爬取政府网(www.gov.cn)上政策栏目下面的信息,其他网站也类似。
本项目所有的代码都已经存放到github上了,感兴趣的读者可以到github上获取。
这里我们选择的python环境下的scrapy框架,通过pip install scrapy
安装scrapy,然后在pycharm命令行中创建资讯项目info_crawler,如下:
在项目的spiders目录下我们需要建立一个资讯爬取的主程序info_spider.py,主要定义爬取的网站和需要抓取的数据,文件内容如下:
需要注意的是name和response.css和response.xpath这几个关键地方,name在启动的时候需要指定正确,否则会找不到相应爬虫,response.css和response.xpath是从网站中去获取所需要的数据。
通过政府网的观察,我们可以看到在政策专栏下面,所有的政策资讯都在ul标签下,每个资讯对应一个li,所以通过css选择器,我们先选择class='h120’的ul,然后再遍历其下的li元素,最终通过text获取li中的内容。
在settings.py文件同目录下创建main.py文件,我们可以通过这个文件调用scrapy程序执行,而不用通过命令行去实现。命令行下执行是这样的:scrapy runspider xxx_spider.py -o xxx.json
,如果通过main.py文件来实现,只要把相关参数存放进去就可以了,具体内容如下:
第3个参数就是刚才在info_spider.py定义的name。
配置数据存储文件,我们通过爬虫抓取到的数据最终是持久化到本地的,也就是说要找个地方把数据保存下来,一般就是写入数据库或者文件,笔者这里是采用文件的方式,所以需要在pipelines.py文件中配置相应的信息,代码如下:
配置settings.py,跟scrapy相关的所有配置几乎都可以在settings.py中配置,我们这里主要配置两个参数。
5.1 DEFAULT_REQUEST_HEADERS:头文件,因为有的时候我们爬取网站的信息要像浏览器发送请求一样,才能获取到我们需要的信息,我们这里的操作只要打开相应的注释就可以了。
5.2 ITEM_PIPELINES:刚才在pipelines.py文件中我们配置了数据的保存方式,接下来我们需要在settings.py文件中打开这个开关才能生效,最终配置的效果如下:
执行main.py文件,上面的文件配置好之后,右键执行爬虫程序,如下:
控制台输出的信息如下:
执行完之后,我们可以看到在同目录下生成一个info_file.json文件
里面保存的内容如下,跟政府网上政策栏目下七条资讯刚好对应:
参考文献
1.Github代码库
2.scrapy官网
3.Scrapy爬虫入门教程一 安装和基本使用
4.Python爬虫学习8-css选择器使用
5.Python爬虫(17)在Windows中安装及使用Scrapy
6.python爬虫:scrapy框架xpath和css选择器语法