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登录pop3邮件服务器接收邮件的方法
Apr 30 Python
python编写爬虫小程序
May 14 Python
快速了解Python开发中的cookie及简单代码示例
Jan 17 Python
对numpy中向量式三目运算符详解
Oct 31 Python
python用post访问restful服务接口的方法
Dec 07 Python
Python使用pydub库对mp3与wav格式进行互转的方法
Jan 10 Python
对Python协程之异步同步的区别详解
Feb 19 Python
Python3爬楼梯算法示例
Mar 04 Python
实例讲解Python中整数的最大值输出
Mar 17 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
May 15 Python
Python 实现opencv所使用的图片格式与 base64 转换
Jan 09 Python
Keras保存模型并载入模型继续训练的实现
Feb 20 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
浅析is_writable的php实现
2013/06/18 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
2014/04/24 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
2015/09/29 PHP
PHP 年月日的三级联动实例代码
2017/05/24 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
js 表格隔行颜色
2009/12/02 Javascript
js验证是否为数字的总结
2013/04/14 Javascript
jquery.cookie用法详细解析
2013/12/18 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
javascritp添加url参数将参数加入到url中
2014/09/25 Javascript
Window.Open打开窗体和if嵌套代码
2016/04/15 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
jQuery插件FusionCharts绘制的2D双面积图效果示例【附demo源码】
2017/04/11 jQuery
vue.js语法及常用指令
2017/10/29 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
2017/11/29 Javascript
vue给组件传递不同的值方法
2018/09/29 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
2018/09/29 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
Webpack 4如何动态切割JS注入文件名详解
2019/07/09 Javascript
Python读取mp3中ID3信息的方法
2015/03/05 Python
Python遍历zip文件输出名称时出现乱码问题的解决方法
2015/04/08 Python
利用Python求阴影部分的面积实例代码
2018/12/05 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
python基于pdfminer库提取pdf文字代码实例
2019/08/15 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
Qoo10马来西亚:全球时尚和引领潮流的购物市场
2016/08/25 全球购物
任意存:BOXFUL
2018/05/21 全球购物
Solid & Striped官网:美国泳装品牌
2019/06/19 全球购物
医学院校毕业生自荐信范文
2014/01/01 职场文书
运动会表扬稿大全
2014/01/16 职场文书
优秀员工评语
2014/02/10 职场文书
工会主席岗位责任制
2014/02/11 职场文书
师范生自我鉴定
2014/03/20 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书