Python网络爬虫项目:内容提取器的定义


Posted in Python onOctober 25, 2016

1. 项目背景

在python 即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间,从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端的数据处理工作中。

2. 解决方案

为了解决这个问题,我们把影响通用性和工作效率的提取器隔离出来,描述了如下的数据处理流程图:

Python网络爬虫项目:内容提取器的定义

图中“可插拔提取器”必须很强的模块化,那么关键的接口有:

  1. 标准化的输入:以标准的HTML DOM对象为输入
  2. 标准化的内容提取:使用标准的xslt模板提取网页内容
  3. 标准化的输出:以标准的XML格式输出从网页上提取到的内容
  4. 明确的提取器插拔接口:提取器是一个明确定义的类,通过类方法与爬虫引擎模块交互

3. 提取器代码

可插拔提取器是即时网络爬虫项目的核心组件,定义成一个类: gsExtractor

python源代码文件及其说明文档请从 github 下载

使用模式是这样的:

  1. 实例化一个gsExtractor对象
  2. 为这个对象设定xslt提取器,相当于把这个对象配置好(使用三类setXXX()方法)
  3. 把html dom输入给它,就能获得xml输出(使用extract()方法)

下面是这个gsExtractor类的源代码

#!/usr/bin/python
# -*- coding: utf-8 -*-
# 模块名: gooseeker
# 类名: gsExtractor
# Version: 2.0
# 说明: html内容提取器
# 功能: 使用xslt作为模板,快速提取HTML DOM中的内容。
# released by 集搜客(http://www.gooseeker.com) on May 18, 2016
# github: https://github.com/FullerHua/jisou/core/gooseeker.py

from urllib import request
from urllib.parse import quote
from lxml import etree
import time

class gsExtractor(object):
  def _init_(self):
    self.xslt = ""
  # 从文件读取xslt
  def setXsltFromFile(self , xsltFilePath):
    file = open(xsltFilePath , 'r' , encoding='UTF-8')
    try:
      self.xslt = file.read()
    finally:
      file.close()
  # 从字符串获得xslt
  def setXsltFromMem(self , xsltStr):
    self.xslt = xsltStr
  # 通过GooSeeker API接口获得xslt
  def setXsltFromAPI(self , APIKey , theme, middle=None, bname=None):
    apiurl = "http://www.gooseeker.com/api/getextractor?key="+ APIKey +"&theme="+quote(theme)
    if (middle):
      apiurl = apiurl + "&middle="+quote(middle)
    if (bname):
      apiurl = apiurl + "&bname="+quote(bname)
    apiconn = request.urlopen(apiurl)
    self.xslt = apiconn.read()
  # 返回当前xslt
  def getXslt(self):
    return self.xslt
  # 提取方法,入参是一个HTML DOM对象,返回是提取结果
  def extract(self , html):
    xslt_root = etree.XML(self.xslt)
    transform = etree.XSLT(xslt_root)
    result_tree = transform(html)
    return result_tree

4. 用法示例
下面是一个示例程序,演示怎样使用gsExtractor类提取GooSeeker官网的bbs帖子列表。本示例有如下特征

  1. 提取器所用的xslt模板提前放在文件中:xslt_bbs.xml
  2. 仅作为示例,实际使用场景中,xslt来源有多个,最主流的来源是GooSeeker平台上的api
  3. 在控制台界面上打印出提取结果

下面是源代码,都可从 github 下载

#-*_coding:utf8-*-
# 使用gsExtractor类的示例程序
# 访问集搜客论坛,以xslt为模板提取论坛内容
# xslt保存在xslt_bbs.xml中
from urllib import request
from lxml import etree
from gooseeker import gsExtractor

# 访问并读取网页内容
url = "http://www.gooseeker.com/cn/forum/7"
conn = request.urlopen(url)
doc = etree.HTML(conn.read())

# 生成xsltExtractor对象
bbsExtra = gsExtractor()
# 调用set方法设置xslt内容
bbsExtra.setXsltFromFile("xslt_bbs.xml")
# 调用extract方法提取所需内容
result = bbsExtra.extract(doc)
# 显示提取结果
print(str(result))

提取结果如下图所示:

Python网络爬虫项目:内容提取器的定义

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python os模块介绍
Nov 30 Python
详解使用Python处理文件目录的相关方法
Oct 16 Python
在Python的一段程序中如何使用多次事件循环详解
Sep 07 Python
ubuntu环境下python虚拟环境的安装过程
Jan 07 Python
Python 爬取携程所有机票的实例代码
Jun 11 Python
python开启摄像头以及深度学习实现目标检测方法
Aug 03 Python
解决Python一行输出不显示的问题
Dec 03 Python
Python使用pandas对数据进行差分运算的方法
Dec 22 Python
Python设计模式之策略模式实例详解
Jan 21 Python
Python学习笔记之列表推导式实例分析
Aug 13 Python
Keras官方中文文档:性能评估Metrices详解
Jun 15 Python
python 决策树算法的实现
Oct 09 Python
Python实现ssh批量登录并执行命令
Oct 25 #Python
详解Python的Lambda函数与排序
Oct 25 #Python
Python脚本实现Web漏洞扫描工具
Oct 25 #Python
python+django快速实现文件上传
Oct 24 #Python
python实现简单爬虫功能的示例
Oct 24 #Python
简单谈谈Python中的反转字符串问题
Oct 24 #Python
Python 内置函数complex详解
Oct 23 #Python
You might like
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
PHP详解ASCII码对照表与字符转换
2011/12/05 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
2013/10/29 PHP
PHP打印输出函数汇总
2016/08/28 PHP
Yii框架where查询用法实例分析
2019/10/22 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
推荐dojo学习笔记
2007/03/24 Javascript
JS网页播放声音实现代码兼容各种浏览器
2013/09/22 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
Node.js实现简单聊天服务器
2014/06/20 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
创建一般js对象的几种方式
2017/01/19 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
js中删除数组中的某一元素实例(无下标时)
2017/02/28 Javascript
Javascript获取某个月的天数
2018/05/30 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
[01:14]英雄,所敬略同——2018完美盛典宣传视频
2018/12/05 DOTA
跟老齐学Python之类的细节
2014/10/13 Python
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
Python使用smtp和pop简单收发邮件完整实例
2018/01/09 Python
Python利用splinter实现浏览器自动化操作方法
2018/05/11 Python
CSS3 新增选择器的实例
2019/11/13 HTML / CSS
TripAdvisor德国:全球领先的旅游网站
2017/12/07 全球购物
Senreve官网:美国旧金山的奢侈手袋品牌
2019/03/21 全球购物
阿联酋最好的手机、电子产品和家用电器网上商店:Eros Digital Home
2020/08/09 全球购物
大二学生职业生涯规划书
2014/02/05 职场文书
文科生自我鉴定
2014/02/15 职场文书
个人作风建设自查报告
2014/10/22 职场文书
个人自荐书怎么写
2015/03/26 职场文书
拾金不昧通报表扬范文
2015/05/05 职场文书
乱世佳人观后感
2015/06/08 职场文书