最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python網(wǎng)絡(luò)爬蟲項(xiàng)目:內(nèi)容提取器的定義

 更新時(shí)間:2016年10月25日 15:38:52   作者:fullerhua  
本篇文章主要介紹了Python網(wǎng)絡(luò)爬蟲項(xiàng)目,這能有效的節(jié)省程序員的時(shí)間,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。

1. 項(xiàng)目背景

在python 即時(shí)網(wǎng)絡(luò)爬蟲項(xiàng)目啟動(dòng)說明中我們討論一個(gè)數(shù)字:程序員浪費(fèi)在調(diào)測(cè)內(nèi)容提取規(guī)則上的時(shí)間,從而我們發(fā)起了這個(gè)項(xiàng)目,把程序員從繁瑣的調(diào)測(cè)規(guī)則中解放出來,投入到更高端的數(shù)據(jù)處理工作中。

2. 解決方案

為了解決這個(gè)問題,我們把影響通用性和工作效率的提取器隔離出來,描述了如下的數(shù)據(jù)處理流程圖:

圖中“可插拔提取器”必須很強(qiáng)的模塊化,那么關(guān)鍵的接口有:

  1. 標(biāo)準(zhǔn)化的輸入:以標(biāo)準(zhǔn)的HTML DOM對(duì)象為輸入
  2. 標(biāo)準(zhǔn)化的內(nèi)容提?。菏褂脴?biāo)準(zhǔn)的xslt模板提取網(wǎng)頁內(nèi)容
  3. 標(biāo)準(zhǔn)化的輸出:以標(biāo)準(zhǔn)的XML格式輸出從網(wǎng)頁上提取到的內(nèi)容
  4. 明確的提取器插拔接口:提取器是一個(gè)明確定義的類,通過類方法與爬蟲引擎模塊交互

3. 提取器代碼

可插拔提取器是即時(shí)網(wǎng)絡(luò)爬蟲項(xiàng)目的核心組件,定義成一個(gè)類: gsExtractor

python源代碼文件及其說明文檔請(qǐng)從 github 下載

使用模式是這樣的:

  1. 實(shí)例化一個(gè)gsExtractor對(duì)象
  2. 為這個(gè)對(duì)象設(shè)定xslt提取器,相當(dāng)于把這個(gè)對(duì)象配置好(使用三類setXXX()方法)
  3. 把html dom輸入給它,就能獲得xml輸出(使用extract()方法)

下面是這個(gè)gsExtractor類的源代碼

#!/usr/bin/python
# -*- coding: utf-8 -*-
# 模塊名: gooseeker
# 類名: gsExtractor
# Version: 2.0
# 說明: html內(nèi)容提取器
# 功能: 使用xslt作為模板,快速提取HTML DOM中的內(nèi)容。
# 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()
  # 返回當(dāng)前xslt
  def getXslt(self):
    return self.xslt
  # 提取方法,入?yún)⑹且粋€(gè)HTML DOM對(duì)象,返回是提取結(jié)果
  def extract(self , html):
    xslt_root = etree.XML(self.xslt)
    transform = etree.XSLT(xslt_root)
    result_tree = transform(html)
    return result_tree

4. 用法示例
下面是一個(gè)示例程序,演示怎樣使用gsExtractor類提取GooSeeker官網(wǎng)的bbs帖子列表。本示例有如下特征

  1. 提取器所用的xslt模板提前放在文件中:xslt_bbs.xml
  2. 僅作為示例,實(shí)際使用場(chǎng)景中,xslt來源有多個(gè),最主流的來源是GooSeeker平臺(tái)上的api
  3. 在控制臺(tái)界面上打印出提取結(jié)果

下面是源代碼,都可從 github 下載

#-*_coding:utf8-*-
# 使用gsExtractor類的示例程序
# 訪問集搜客論壇,以xslt為模板提取論壇內(nèi)容
# xslt保存在xslt_bbs.xml中
from urllib import request
from lxml import etree
from gooseeker import gsExtractor

# 訪問并讀取網(wǎng)頁內(nèi)容
url = "http://www.gooseeker.com/cn/forum/7"
conn = request.urlopen(url)
doc = etree.HTML(conn.read())

# 生成xsltExtractor對(duì)象
bbsExtra = gsExtractor()
# 調(diào)用set方法設(shè)置xslt內(nèi)容
bbsExtra.setXsltFromFile("xslt_bbs.xml")
# 調(diào)用extract方法提取所需內(nèi)容
result = bbsExtra.extract(doc)
# 顯示提取結(jié)果
print(str(result))

提取結(jié)果如下圖所示:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 用Python實(shí)現(xiàn)大文本文件切割的方法

    用Python實(shí)現(xiàn)大文本文件切割的方法

    今天小編就為大家分享一篇用Python實(shí)現(xiàn)大文本文件切割的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python合并列表、字典、字符串、CSV文件、多文件技巧

    Python合并列表、字典、字符串、CSV文件、多文件技巧

    在 Python 中,有多種方法可以實(shí)現(xiàn)數(shù)據(jù)合并,無論是合并列表、合并字典、合并字符串、合并CSV文件還是合并多個(gè)文件夾中的文件,都可以使用簡(jiǎn)單而強(qiáng)大的Python技巧來實(shí)現(xiàn),通過合并數(shù)據(jù),可以更方便地進(jìn)行數(shù)據(jù)處理和分析
    2024-03-03
  • Python中異常重試的解決方案詳解

    Python中異常重試的解決方案詳解

    這篇文章主要給大家介紹了在Python中異常重試的解決方案,文中介紹的非常詳細(xì),相信對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編一起來看看吧。
    2017-05-05
  • Python3.5 Pandas模塊缺失值處理和層次索引實(shí)例詳解

    Python3.5 Pandas模塊缺失值處理和層次索引實(shí)例詳解

    這篇文章主要介紹了Python3.5 Pandas模塊缺失值處理和層次索引,結(jié)合實(shí)例形式詳細(xì)分析了Python3.5 Pandas模塊缺失值處理和層次索引的原理、處理方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-04-04
  • python實(shí)現(xiàn)決策樹

    python實(shí)現(xiàn)決策樹

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)決策樹的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • python刪除列表元素的三種方法(remove,pop,del)

    python刪除列表元素的三種方法(remove,pop,del)

    這篇文章主要介紹了python刪除列表元素的三種方法(remove,pop,del),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • pandas數(shù)據(jù)處理清洗實(shí)現(xiàn)中文地址拆分案例

    pandas數(shù)據(jù)處理清洗實(shí)現(xiàn)中文地址拆分案例

    因?yàn)楹罄m(xù)數(shù)據(jù)分析工作需要用到地理維度進(jìn)行分析,所以需要把login_place字段進(jìn)行拆分成:國(guó)家、省份、地區(qū)。感興趣的可以了解一下
    2021-06-06
  • python對(duì)象銷毀實(shí)例(垃圾回收)

    python對(duì)象銷毀實(shí)例(垃圾回收)

    今天小編就為大家分享一篇python對(duì)象銷毀實(shí)例(垃圾回收),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python如何實(shí)現(xiàn)定時(shí)器功能

    Python如何實(shí)現(xiàn)定時(shí)器功能

    在本篇文章里小編給大家分享的是關(guān)于Python中的簡(jiǎn)單定時(shí)器實(shí)例及代碼,需要的朋友們可以學(xué)習(xí)下。
    2020-05-05
  • Python input()函數(shù)案例教程

    Python input()函數(shù)案例教程

    在 Python 中,input() 函數(shù)用于獲取用于的輸入,并給出提示。input() 函數(shù),總是返回 string 類型,因此,我們可以使用 input() 函數(shù),獲取用戶輸入的任何數(shù)據(jù)類型 ,這篇文章主要介紹了Python input()函數(shù)案例詳解,需要的朋友可以參考下
    2023-01-01

最新評(píng)論

融水| 上饶县| 永川市| 波密县| 宜阳县| 海晏县| 内乡县| 黄陵县| 肇源县| 大英县| 纳雍县| 苗栗市| 龙井市| 和平县| 兴业县| 三台县| 岳池县| 平南县| 嘉禾县| 新密市| 平遥县| 和田市| 新蔡县| 宿迁市| 安平县| 泽普县| 宾阳县| 上杭县| 肃宁县| 永靖县| 林周县| 建始县| 武川县| 荔浦县| 黑龙江省| 安塞县| 弋阳县| 新竹市| 万宁市| 杭州市| 老河口市|