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中强大的命令行库click入门教程
Dec 26 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
Mar 01 Python
python实现AES加密解密
Mar 28 Python
Python绘制频率分布直方图的示例
Jul 08 Python
Pytorch实现各种2d卷积示例
Dec 30 Python
python3 配置logging日志类的操作
Apr 08 Python
Python格式化输出--%s,%d,%f的代码解析
Apr 29 Python
完美解决jupyter由于无法import新包的问题
May 26 Python
python 读txt文件,按‘,’分割每行数据操作
Jul 05 Python
为什么说python更适合树莓派编程
Jul 20 Python
Python中常见的导入方式总结
May 06 Python
Python学习之包与模块详解
Mar 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
推荐文章系统(一)
2006/10/09 PHP
php 面试碰到过的问题 在此做下记录
2011/06/09 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
PHP MYSQL实现登陆和模糊查询两大功能
2016/02/05 PHP
Node.js中HTTP模块与事件模块详解
2014/11/14 Javascript
详解浏览器渲染页面过程
2017/02/09 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
详解node child_process模块学习笔记
2018/01/24 Javascript
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
用python分割TXT文件成4K的TXT文件
2009/05/23 Python
python OpenCV学习笔记之绘制直方图的方法
2018/02/08 Python
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
Python学习笔记之集合的概念和简单使用示例
2019/08/22 Python
Python实现TCP通信的示例代码
2019/09/09 Python
tensorflow 限制显存大小的实现
2020/02/03 Python
Python Selenium安装及环境配置的实现
2020/03/17 Python
python3.x中安装web.py步骤方法
2020/06/23 Python
红色连衣裙精品店:Red Dress Boutique
2018/08/11 全球购物
吉列剃须刀英国官网:Gillette英国
2019/03/28 全球购物
Auguste The Label官网:澳大利亚一家精品女装时尚品牌
2020/06/14 全球购物
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
北京某科技有限公司C# .net笔试题
2014/09/27 面试题
期末总结的个人自我评价
2013/11/02 职场文书
贺卡寄语大全
2014/04/11 职场文书
外贸业务员求职信
2014/06/16 职场文书
新兵入伍心得体会
2014/09/04 职场文书
2014年涉外离婚协议书范本
2014/11/20 职场文书
晚会闭幕词
2015/01/28 职场文书
2015年社区中秋节活动总结
2015/03/23 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
2016年过年放假安排通知
2015/08/18 职场文书