基于pyspider的大众点评数据爬取总结


1.  数据需求

项目需要爬取大众点评网武汉市餐饮类点评数据,用于进行协同推荐实验。

 

2.  pyspider简介

  • 国人编写的开源网络爬虫系统
  • 使用python语言
  • 具有强大的webUI
  • 支持分布式架构和数据库存储

 

3. pyspider的安装

  • pyspider的开发环境为LINUX,且没有在WIN平台上做兼容测试。因此,pyspider在LINUX环境下能稳定运行,但在win下多数会出现问题。

为了顺利爬取数据,我在台式机上装了双系统,另装了一个ubantu系统。

  • pyspider的安装和启动在终端中进行,在浏览器中启动环境。pyspider中文手册中有详细步骤:http://www.pyspider.cn/book/pyspider/pyspider-Quickstart-2.html

需要注意的是,在终端中输入命令时,有时会需要系统管理员权限,因此需要在命令前加上linux系统管理指令—sudo,使用-sudo pyspider 启动终端。

 

4. 选择器

1)css选择器

    浏览器(火狐,谷歌)F12打开开发者模式后,可以查看网页中各元素的CSS选择器表达式。

    优点:速度快

    缺点:表达复杂,利用浏览器获得的css选择器表达式在pyspider中选择元素时有时候无法识别,找不到元素。(pyspider web界面本身提供了根据选中元素生成css选择器表达式的功能)

 

2)beautiful soup

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.使用他可以更加方便,清晰的获取网页中的元素。

    优点:容易构造和理解,

    缺点:速度慢

3)phantomjs

    本项目需要爬取大众点评网商家的地理数据。在大众点评网商家主页左侧有一个元素是标注了商家位置的地图(图片格式)。

    该图片由腾讯地图提供,其对应的html元素中有商家对应的腾讯地图经纬度坐标。

    我们希望获得该img元素中的经纬度坐标,但在实际爬取过程中,无论是使用css选择器还是使用beautifulsoup都无法获取该img元素。查阅资料后,可能原因为

  • 网页对该图片进行过加密处理
  • 该图片是使用js渲染的   

    于是决定尝试phantomjs,问题得到了解决。

   

    phantomjs使用步骤:

  • 安装
  • 在pyspider的self.crawl函数中添加语句fetch_type=’js’

    self.crawl(url,callback=self.address_page,  fetch_type='js')    

 

5. 源码和数据

    项目所涉及的所有源码和数据均已上传至github,项目地址如下,爬虫源码在source文件夹下,爬取的数据在data文件夹下。对应源码和数据的文件夹命名相同。

    https://github.com/JiajiaAz/20170626_pyspider_dzdp.com

6.敲黑板

在实际项目过程中,我们没有将所有想获取数据在一个项目中全部爬取,因为那样做会使得爬虫的成功率变得很低,而且爬取速度特别慢。我们采取的做法是,先爬取食神榜用户的点评记录的基本信息(如dzdp-1),包括,userId(用户ID),shopId(商家ID),shopName(用户名称),taste(用户对该商家的口味评分),environment(用户对该商家的环境评分),service(用户对该商家的服务评分)等。这些数据对应的网页元素较为简单,可以直接使用css选择器获取,不需要使用beautiful soup和phantomjs框架,可以较快的爬取到。

    然后,根据爬取的数据,统计所有获取到的用户ID和商户ID,重新建立项目,爬取感兴趣的信息,如商户对应的商圈,经度,纬度等。这些信息对应的网页元素较为复杂,需要用到beautiful soup和phantomjs框架。

    最后根据ID指将两次获取的数据合并即可。

 

 

 

   

你可能感兴趣的:(python爬虫)