资讯专栏INFORMATION COLUMN

Python爬虫实战(4):豆瓣小组话题数据采集—动态网页

blastz / 1116人阅读

摘要:,引言注释上一篇爬虫实战安居客房产经纪人信息采集,访问的网页是静态网页,有朋友模仿那个实战来采集动态加载豆瓣小组的网页,结果不成功。

1, 引言

注释:上一篇《Python爬虫实战(3):安居客房产经纪人信息采集》,访问的网页是静态网页,有朋友模仿那个实战来采集动态加载豆瓣小组的网页,结果不成功。本篇是针对动态网页的数据采集编程实战。

Python开源网络爬虫项目启动之初,我们就把网络爬虫分成两类:即时爬虫和收割式网络爬虫。为了适应各种应用场景,GooSeeker的整个网络爬虫产品线包含了四类产品,如下图所示:

本实战是上图中的“独立python爬虫”的一个实例,以采集豆瓣小组讨论话题(https://www.douban.com/group/haixiuzu/discussion?start=0 )信息为例,记录整个采集流程,包括python和依赖库的安装,即便是python初学者,也可以跟着文章内容成功地完成运行。

2,Python和相关依赖库的安装

运行环境:Windows10

2.1,安装Python3.5.2

官网下载链接: https://www.python.org/ftp/python/3.5.2/python-3.5.2.exe

下载完成后,双击安装。

这个版本会自动安装pip和setuptools,方便安装其它的库

2.2,Lxml 3.6.0

Lxml官网地址: http://lxml.de/

Windows版安装包下载: http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml

对应windows下python3.5的安装文件为 lxml-3.6.0-cp35-cp35m-win32.whl

下载完成后,在windows下打开一个命令窗口,,切换到刚下载的whl文件的存放目录,运行pip install lxml-3.6.0-cp35-cp35m-win32.whl

2.3,下载网页内容提取器程序

网页内容提取器程序是GooSeeker为开源Python即时网络爬虫项目发布的一个类,使用这个类,可以大大减少数据采集规则的调试时间,具体参看《Python即时网络爬虫项目: 内容提取器的定义》

下载地址: https://github.com/FullerHua/gooseeker/blob/master/core/gooseeker.py

把gooseeker.py保存在项目目录下

2.4,安装selenium

pip install selenium

2.5,PhantomJS下载

下载地址 http://phantomjs.org/download.html

把下载得到的phantomjs-2.1.1-windows.zip解压到本机的某个文件夹下

把解压后的文件夹中的phantomjs.exe的完整路径加文件名记录下来,用来替换下面代码的 browser = webdriver.PhantomJS(executable_path="C:phantomjs-2.1.1-windowsinphantomjs.exe") 这一行中的两个单引号之间的内容。

3,网络爬虫的源代码
# _*_coding:utf8_*_
# douban.py
# 爬取豆瓣小组讨论话题

from urllib import request
from lxml import etree
from gooseeker import GsExtractor
from selenium import webdriver

class PhantomSpider:
    def getContent(self, url):
        browser = webdriver.PhantomJS(executable_path="C:phantomjs-2.1.1-windowsinphantomjs.exe")
        browser.get(url)
        time.sleep(3)
        html = browser.execute_script("return document.documentElement.outerHTML")
        output = etree.HTML(html)
        return output

    def saveContent(self, filepath, content):
        file_obj = open(filepath, "w", encoding="UTF-8")
        file_obj.write(content)
        file_obj.close()

doubanExtra = GsExtractor()   
# 下面这句调用gooseeker的api来设置xslt抓取规则
# 第一个参数是app key,请到GooSeeker会员中心申请
# 第二个参数是规则名,是通过GooSeeker的图形化工具: 谋数台MS 来生成的
doubanExtra.setXsltFromAPI("ffd5273e213036d812ea298922e2627b" , "豆瓣小组讨论话题")  

url = "https://www.douban.com/group/haixiuzu/discussion?start="
totalpages = 5
doubanSpider = PhantomSpider()
print("爬取开始")

for pagenumber in range(1 , totalpages):
    currenturl = url + str((pagenumber-1)*25)
    print("正在爬取", currenturl)
    content = doubanSpider.getContent(currenturl)
    outputxml = doubanExtra.extract(content)
    outputfile = "result" + str(pagenumber) +".xml"
    doubanSpider.saveContent(outputfile , str(outputxml))

print("爬取结束")

运行过程如下:

将上面的代码保存到douban.py中,和前面2.3步下载的提取器类gooseeker.py放在同一个文件夹中

打开Windows CMD窗口,切换当前目录到存放douban.py的路径(cd xxxxxxx)

运行 python douban.py

请注意:为了让源代码更整洁,也为了让爬虫程序更有通用性,抓取规则是通过api注入到内容提取器bbsExtra中的,这样还有另外一个好处:如果目标网页结构变化了,只需通过MS谋数台重新编辑抓取规则,而本例的网络爬虫代码不用修改。为内容提取器下载采集规则的方法参看《Python即时网络爬虫:API说明—下载内容提取器》。

4,爬虫结果

在项目目录下可以看到多个result**.xml文件,文件内容如下图所示:

5,总结

因为信息采集规则是通过api下载下来的,所以,本案例的源代码显得十分简洁。同时,整个程序框架变得很通用,因为最影响通用性的采集规则是从外部注入的。

6,集搜客GooSeeker开源代码下载源

GooSeeker开源Python即时网络爬虫GitHub源

7,文档修改历史

2016-07-15:V1.0

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38055.html

相关文章

  • python爬虫实践: 豆瓣小组命令行客户端

    摘要:主要特性前一阵重新组织了一下代码加了命令行信息用起来更方便了一些初步实现了豆瓣小组及用户相关的爬虫和请求基于和没有用高阶的诸如之类的爬虫工具所有的命令行输出都是标准的格式可以使用操作安装仅支持使用两种命令模式客户端接口调用和豆瓣模块接口 主要特性 前一阵重新组织了一下代码, 加了命令行help信息, 用起来更方便了一些 初步实现了豆瓣小组及用户相关的API爬虫和请求 基于reques...

    golden_hamster 评论0 收藏0
  • Python即时网络爬虫项目: 内容提取器的定义(Python2.7版本)

    摘要:然而,和是有区别的,即时网络爬虫项目内容提取器的定义一文的源码无法在下使用,本文将发布一个的内容提取器。 1. 项目背景 showImg(https://segmentfault.com/img/bVz5hX); 在Python即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间太多了(见上图),从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投...

    xuxueli 评论0 收藏0
  • SegmentFault 技术周刊 Vol.30 - 学习 Python 来做一些神奇好玩的事情吧

    摘要:学习笔记七数学形态学关注的是图像中的形状,它提供了一些方法用于检测形状和改变形状。学习笔记十一尺度不变特征变换,简称是图像局部特征提取的现代方法基于区域图像块的分析。本文的目的是简明扼要地说明的编码机制,并给出一些建议。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 开始之前,我们先来看这样一个提问: pyth...

    lifesimple 评论0 收藏0
  • SegmentFault 技术周刊 Vol.30 - 学习 Python 来做一些神奇好玩的事情吧

    摘要:学习笔记七数学形态学关注的是图像中的形状,它提供了一些方法用于检测形状和改变形状。学习笔记十一尺度不变特征变换,简称是图像局部特征提取的现代方法基于区域图像块的分析。本文的目的是简明扼要地说明的编码机制,并给出一些建议。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 开始之前,我们先来看这样一个提问: pyth...

    SQC 评论0 收藏0
  • 零基础如何学爬虫技术

    摘要:楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,。本文来源知乎作者路人甲链接楚江数据提供网站数据采集和爬虫软件定制开发服务,服务范围涵盖社交网络电子商务分类信息学术研究等。 楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,http://www.chujiangdata.com。 第一:Python爬虫学习系列教程(来源于某博主:htt...

    KunMinX 评论0 收藏0

发表评论

0条评论

blastz

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<