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 相关文章推荐
MySQLdb ImportError: libmysqlclient.so.18解决方法
Aug 21 Python
python基础教程之对象和类的实际运用
Aug 29 Python
Python 40行代码实现人脸识别功能
Apr 02 Python
python爬取w3shcool的JQuery课程并且保存到本地
Apr 06 Python
pandas apply 函数 实现多进程的示例讲解
Apr 20 Python
Python3.5内置模块之time与datetime模块用法实例分析
Apr 27 Python
python利用7z批量解压rar的实现
Aug 07 Python
利用Python的turtle库绘制玫瑰教程
Nov 23 Python
YUV转为jpg图像的实现
Dec 09 Python
基于python实现文件加密功能
Jan 06 Python
Python configparser模块操作代码实例
Jun 08 Python
Python爬虫之Selenium下拉框处理的实现
Dec 04 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作的文本留言本的例子(二)
2006/10/09 PHP
php set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
PHP Session 变量的使用方法详解与实例代码
2013/09/11 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
2017/05/20 PHP
User Scripts: Video Download by User Scripts
2007/05/14 Javascript
jquery div 居中技巧应用介绍
2012/11/24 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
js实现选中复选框文字变色的方法
2015/08/14 Javascript
AngularJS  ng-table插件设置排序
2016/09/21 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
2017/02/27 Javascript
Vue响应式原理详解
2017/04/18 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
webpack打包js的方法
2018/03/12 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
JS实现li标签的删除
2019/04/12 Javascript
微信小程序云开发之使用云存储
2019/05/17 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
2020/02/24 Javascript
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
Python中使用SAX解析xml实例
2014/11/21 Python
Python Sphinx使用实例及问题解决
2020/01/17 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
python高级特性简介
2020/08/13 Python
python爬取youtube视频的示例代码
2021/03/03 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
CSS3实现点击放大的动画实例代码
2017/02/27 HTML / CSS
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
canvas环形倒计时组件的示例代码
2018/06/14 HTML / CSS
我爱我校演讲稿
2014/05/21 职场文书
2014年小学图书室工作总结
2014/12/09 职场文书
《雪域豹影》读后感:父爱的伟大
2019/12/23 职场文书
只需要这一行代码就能让python计算速度提高十倍
2021/05/24 Python