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中requirements.txt的一切
Mar 03 Python
Windows和Linux下Python输出彩色文字的方法教程
May 02 Python
分析Python读取文件时的路径问题
Feb 11 Python
Python实现去除列表中重复元素的方法小结【4种方法】
Apr 27 Python
python统计字母、空格、数字等字符个数的实例
Jun 29 Python
python实现自动登录
Sep 17 Python
详解python如何在django中为用户模型添加自定义权限
Oct 15 Python
pycham查看程序执行的时间方法
Nov 29 Python
Python中的十大图像处理工具(小结)
Jun 10 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
Aug 06 Python
如何使用python切换hosts文件
Apr 29 Python
浅谈Python 中的复数问题
May 19 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
php array_unique之后json_encode需要注意
2011/01/02 PHP
一个简单且很好用的php分页类
2013/10/26 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
学习面向对象之面向对象的基本概念:对象和其他基本要素
2010/11/30 Javascript
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
IE6下opacity与JQuery的奇妙结合
2013/03/01 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
js实现拉幕效果的广告代码
2015/09/02 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(一)
2015/12/10 Javascript
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
在Python的Flask框架中实现全文搜索功能
2015/04/20 Python
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
Python argv用法详解
2016/01/08 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
Django框架 querySet功能解析
2019/09/04 Python
python爬虫学习笔记之pyquery模块基本用法详解
2020/04/09 Python
Django视图、传参和forms验证操作
2020/07/15 Python
matplotlib相关系统目录获取方式小结
2021/02/03 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
HTML5 embed标签定义和用法详解
2014/05/09 HTML / CSS
HTML5实现WebSocket协议原理浅析
2014/07/07 HTML / CSS
幼师自荐信范文
2013/10/06 职场文书
行政人员工作职责
2013/12/05 职场文书
执行总经理岗位职责
2014/02/03 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
后备干部推荐材料
2014/12/24 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
消防验收申请报告
2015/05/15 职场文书
企业财务管理制度范本
2015/08/04 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书
小学班主任研修日志
2015/11/13 职场文书
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技