近期由于工作原因,需要一些数据来辅助业务决策,又无法通过外部合作获取,所以使用到了爬虫抓取相关的数据后,进行分析统计。在这个过程中,也看到很多同学爬虫相关的文章,对基础知识和所用到的技术分析得很到位,只是缺乏快速的实战系统搭建指导。
本文将简单归纳网页爬虫所需要的基础知识,着重于实现一套完整可用的小型网页爬取、分析系统,方便大家在有需要时,能够快速搭建系统,以用到实践中去。
关于网页爬虫的定义和用途,想必做技术的都有所了解,这里就不再赘述。目前, 大家使用爬虫的目的除搜索引擎属于无差别爬取外,其他多用于垂直领域或特定网站内容的爬取,本文以特定网站内容爬取作为切入点,当然,也可以应用于垂直领域。
一套合格的网页爬取、分析系统,大致分为:网页抓取、网页分析与链接发现、任务去重与调度、数据预处理与存储、防反爬虫策略、进度展示等几个重要方面。下边逐一做简单归纳介绍。
一、基础知识
(1)网页爬取
网页读取,即读取给定网页的完整内容,包含异步加载的内容,也就是完整地呈现到浏览器窗口的内容。
随着智能手机的普及,网页普遍分为 PC 端 和 移动设备端,由于不同端的网速、流量、设备速度、屏幕大小等原因,移动设备端多采用异步加载的方式来优化用户体验,timeline 类型的无缝翻页就是最佳的例子。这导致常用的 python requests, python urlib, wget, curl 等获取到的网页内容不完整,只有网页的骨架而无内容,内容需要等待 JS 异步加载。
这种问题的解决,我们一般使用带 JS 执行引擎的浏览器驱动来执行网页内的异步加载 JS,解决异步加载问题。常见的解决方案是 selenium 自动化浏览器测试组件配合 chromedriver 或 firfoxdriver 这些有界面浏览器来使用,如果是 linux 服务器命令行下,则可配合 phantomjs 这款无界面浏览器。
python selenium 安装:pip install selenium
phantomjs 下载地址:http://phantomjs.org/download.html
这里附上简单的应用示例代码:
from selenium import webdriver
browser = webdriver.Chrome() # 使用 ChromeDriver,需要安装
browser.get("http://www.baidu.com")
browser.find\_element\_by\_id("kw").send\_keys("selenium")
browser.find\_element\_by\_id("su").click()
dir( browser ) # 查看所有属性和方法
print browser.page\_source # 网页源码
browser.quit()
(2)网页分析与链接发现
网页分析,即将爬取到的网页内容进行