环境配置
- Ubuntu 16.04
- Python 3.5
技术框架
- Scrapy
- Selenium
- PhantomJS
需求目标
对网址http://liuyan.cjn.cn/index.html
进行数据爬取
本文爬虫有三层爬取,爬取结构层次如图所示,
- 主页面
- 列表页面,需要利用
selenium+phantomJS
模拟点击加载更多
按钮
- 详情页面
- 把
主页面
中的红框中的各区(功能区)
、政府部门
、法检及其他单位
等作为一级类保存,然后依次爬取一级类中各个分类 - 进入到
列表页面
,因为此页面是动态加载,并且是简介列表,因此需要加载完所有列表进入到详情页面。 - 进入到
详情页面
,爬取相应内容。
设计方案
动态爬取数据一般有两种方法
- 分析包,构造Request
- 通过模拟浏览器行为加载页面
通过尝试,第一种方法对于此网站不适合,采用第二种方法。
采用Scrapy+Selenium+PhantomJS
来进行动态网页的爬取。
Selenium
Selenium是一个自动化测试工具,本文用到的是其Webdriver
,用其来操作浏览器,可以操作多种主流浏览器,如Chrome,Firefox等,下文中的PhantomJS
是一种无界面的浏览器。
PhantomJS
PhantomJS是一个无界面浏览器,提供JavaScript接口。通过这个工具,可以进行页面的加载、解析、操作等。
爬取方案
- 先爬取
主页面
各个主类(如各区(功能区)
、政府部门
等)下的子类链接,如(江岸区、江夏区等) - 按照先前爬取的子类链接依次打开跳转到
列表界面
,然后利用Selenium+PhantomJS
模拟浏览器动态加载完全部列表,解析出所有列表的链接,跳转到详情页面
- 进入到
详情页面
,解析所要提取的内容
详细步骤
安装Scrapy
sudo pip3 install scrapy
安装PhantomJS
- 安装PhantomJS
sudo apt-get install phantomjs
- apt-get会安装不完整,需要安装以下