`
backsnow
  • 浏览: 130908 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

抽取豆瓣小组文章的程序

 
阅读更多

很悲催,python常用的正则表达式一点都不熟,写了个漏洞百出的只看楼主的代码,先贴上来,有空再完善。

# -*- coding: utf8 -*-
import urllib2
import re
#from BeautifulSoup import BeautifulSoup
##def (i,title)=ExtractTitle(rawdata):
##    buf=[]
####    print rawdata[0]
##    i=0
##    while(rawdata[i]):
##        m = rawdata[i].find('<title>')
##        i=i+1
##        rawdata[i]
##        i++
##    while (m==-1)
##
##         if m!=-1:
##             i=i+1
##             print rawdata[i]

def Extract(rawdata):
    author=[]
    title=[]
    i=0
    content=[]
    link=[]
    while i < len(rawdata):   
        m = rawdata[i].find('<title>')
        if m!=-1:
            title=rawdata[i+1]
            print title
###find the author
        tmpline = rawdata[i].find('topic-doc')
        if tmpline!=-1:
            print rawdata[i-2]
            posBeg=rawdata[i-2].find('alt=')
            posEnd=rawdata[i-2].find('/>')
            author = rawdata[i-2][posBeg+5:posEnd-1]
            print "author: "+author
            i=i+1
            ## find the content written by the author
            while i < len(rawdata):
                contentLine = rawdata[i].find('alt=\"'+author+'\"')
                if contentLine!=-1:
                    while i< len(rawdata):
                        pLine = rawdata[i].find('<p>')
                        if pLine!=-1:
                            while i< len(rawdata):
                                pEndLine=rawdata[i].find('</p>')
                                if pEndLine !=-1:
                                    print rawdata[i]
                                    content.append(rawdata[i])
                                    break
                                i+=1
                            break
                        i+=1
                i+=1
        i=i+1
            
def ExtractLink(rawdata,start):
    i=start
    links=[]
    while i< len(rawdata):
        line = rawdata[i].find('paginator')        
        if line!=-1:
            tmpRow = rawdata[i]
            posBeg=tmpRow.find("href=")
            if posBeg!=-1:
                tmpRow=tmpRow[posBeg+6:-1]
                posBeg=0
            while posBeg!=-1:                
                posEnd=tmpRow.find(">")
##                print posBeg
##                print posEnd
##                print tmpRow[posBeg:posEnd]
                links.append(tmpRow[posBeg:posEnd-1])
                posBeg=tmpRow.find("href")
                if posBeg==-1:
                    break            
                tmpRow=tmpRow[posBeg+6:-1]
                posBeg=0
            break        
        i+=1
    links=links[0:len(links)-1]
    return links


def ExtractAuthorContent(rawdata):
    author=[]
    title=[]
    pos=0
    pEnd=0
    print len(rawdata)
    title,pos=findTitle(rawdata,pos)
    author,pos=findAuthor(rawdata,pos)
    ## find the content written by the author
    content,pEnd=extractAllSections(rawdata,author,pos)
    return author

##    print content
##    print pEnd
##

def ExtractContent(rawdata,author):
    pos=0
    print len(rawdata)
    print author
    ## find the content written by the author
    content,pEnd=extractAllSections(rawdata,author,pos)


def extractSection(rawdata,start):
    i=start
    content=[]
    done=0
    while i< len(rawdata):
        pBeginLine = rawdata[i].find('<p>')
        if pBeginLine!=-1:
            break
        i+=1
    while i< len(rawdata):
        pEndLine=rawdata[i].find('</p>')
        content.append(rawdata[i])
        if pEndLine !=-1:
            print rawdata[i]
            break
        i+=1
    return (content,i)
    
def extractAllSections(rawdata,author,start):
    i=start
    content=[]
    pEnd=0
    count=0
    while i < len(rawdata):
        contentLine = rawdata[i].find('alt=\"'+author+'\"')
        if contentLine!=-1:
            tmpContent,i=extractSection(rawdata,i)
            content.append(tmpContent)
            if i!=rawdata:
                count+=1
                pEnd=i
                i+=1
        i+=1
    return (content,pEnd)
        
def findTitle(rawdata,start):
    i=start
    
    while i < len(rawdata):
        m = rawdata[i].find('<title>')
        if m!=-1:
            title=rawdata[i+1]
            print title
            break
        i+=1        
    return(title,i)
  
def findAuthor(rawdata,start):
    i=start
    author=0
    while i < len(rawdata):
        tmpline = rawdata[i].find('topic-doc')
        if tmpline!=-1:
            posBeg=rawdata[i-2].find('alt=')
            posEnd=rawdata[i-2].find('/>')
            author = rawdata[i-2][posBeg+5:posEnd-1]
            print "author: "+author
            break
        i+=1
    return (author,i)
    

#data=file('E:/petrelli/play/crawl_douban/douban_2.htm','r').readlines()
#soup = BeautifulSoup(data)
#print soup.prettify()
#Extract(data)

data = urllib2.urlopen('http://www.douban.com/group/topic/9737262/').readlines()
links=ExtractLink(data,0)
author=ExtractAuthorContent(data)
for link in links:
    print link
##    data = urllib2.urlopen(link).readlines()
##    ExtractContent(data,author)
    
#ExtractAuthorContent(data)

#for line in data:
#    print line
    
 

 

分享到:
评论

相关推荐

    自己写的随机抽取的小程序

    这个“自己写的随机抽取的小程序”是一个实用工具,主要用于在有限资源的分配中进行随机选择。根据描述,我们可以推断该程序具备以下功能: 1. **自定义抽取内容**:用户可以根据需求设置需要随机抽取的元素类型,...

    python豆瓣电影数据爬虫+可视化分析项目源码+部署说明(高分项目)

    python豆瓣电影数据爬虫+可视化分析项目源码+部署说明(高分项目)python豆瓣电影数据爬虫+可视化分析项目源码+部署说明(高分项目)python豆瓣电影数据爬虫+可视化分析项目源码+部署说明(高分项目)python豆瓣电影...

    c#随机抽取数字抽奖程序

    在C#编程环境中,开发一个随机抽取数字的抽奖程序是一项常见的任务,特别是在各种活动和竞赛中。本项目基于Microsoft Visual Studio 2005(简称VS2005)进行开发,利用C#语言的强大功能,实现了从一组预设的数字中...

    自动抽取文章的中心思想

    在IT行业中,自动抽取文章中心思想是一项重要的自然语言处理任务,它涉及到文本挖掘、信息检索以及人工智能等多个领域。这项技术的主要目标是从大量的文本数据中快速提取出关键信息,帮助读者理解文章的核心要点,...

    一个简单的抽取数字的抽奖小程序

    【标题】:“一个简单的抽取数字的抽奖小程序” 这个标题揭示了我们讨论的是一款基于编程语言C#开发的小型软件,它的主要功能是进行数字抽取,用以实现抽奖或随机选择等目的。这样的程序通常适用于小型活动,比如...

    C编写的时域基2抽取的FFT算法程序[文].pdf

    在本文档中,我们将讨论一个使用 C 语言编写的时域基 2 抽取的 FFT(Fast Fourier Transform)算法程序。该程序的主要功能是对输入信号进行快速傅立叶变换,从而获得信号的频域表示。 FFT 算法的原理 FFT 算法是-...

    PPT抽奖程序-名单抽取

    《PPT抽奖程序-名单抽取》 在许多活动中,抽奖环节常常用来增加互动性和趣味性。这个PPT抽奖程序提供了一种简单而直观的方式来进行名单抽取。以下将详细解析该程序的工作原理和关键代码。 首先,为了运行宏,用户...

    随机数抽取小程序 VC++编写

    本项目“随机数抽取小程序 VC++编写”是一个使用Visual C++编写的程序,它具备手动和自动两种模式,允许用户自定义随机数的范围,以满足各种需求。 首先,我们要理解随机数生成的基础知识。在计算机科学中,由于...

    随机抽取程序

    在这个场景中,我们有一个名为"随机抽取程序"的应用,它主要用于教育环境中进行随机点名或者题目选择。这个程序是用Java编程语言编写的,Java是一种广泛使用的面向对象的编程语言,以其跨平台的特性而著名,能够运行...

    随机抽取数名学生JAVA程序.docx

    JAVA随机抽取数名学生程序设计 本文旨在介绍一个使用JAVA语言设计的随机抽取数名学生程序,旨在解决在实际教学场景中需要随机抽取学生的需求。该程序使用了JAVA语言的多种特性,如数组、集合、随机数生成等,实现了...

    EXCEL自定义字段抽取VBA程序

    【EXCEL自定义字段抽取VBA程序】是一个实用的Excel工具,主要针对企业用户,它利用VBA(Visual Basic for Applications)编程语言,允许用户自定义需要抽取的字段,将源数据表中的特定信息高效地提取到目标工作表中...

    ChineseNER-实体抽取_实体抽取工具_文章实体抽取_自然语言处理_ChineseNERMSRA_

    《中文实体抽取:深入理解ChineseNERMSRA与实体识别技术》 在当今的自然语言处理(NLP)领域,实体抽取是一项至关重要的技术。它旨在从文本中识别并分类出具有特定意义的词汇,如人名、地名、组织名等,这些词汇被...

    中文网页文本抽取源程序

    在网页文本抽取领域,主要的目标是从结构复杂的HTML文档中筛选出纯净、有意义的文本内容,如文章正文、标题、作者信息等。这个源码可能包含了以下关键功能: 1. HTML解析:源码可能使用了自定义的解析器或者第三方...

    【精品小工具】 易语言程序随机抽取器软件

    为了满足这一需求,一款名为【精品小工具】易语言程序随机抽取器软件的简易版工具应运而生。该软件虽然没有进行复杂的特殊处理,却能够满足一般用户的使用需求,不仅操作简单,还充分体现了中文编程语言易语言的便捷...

    C编写的时域基2抽取的FFT算法程序.doc

    C语言实现的时域基2抽取的FFT算法程序 本文档提供了一个使用C语言实现的时域基2抽取的FFT(Fast Fourier Transform)算法程序。该程序使用时域基2抽取的方法来计算FFT,具有高效和准确的特点。 FFT算法是信号处理...

    C语言随机抽取小程序

    在C语言中,随机抽取小程序的设计是通过利用C标准库中的随机数生成函数来实现的。这个程序可以广泛应用于各种场景,例如抽奖、模拟实验、数据分析等。让我们深入探讨一下如何在C语言中构建这样的随机抽取功能。 ...

    微信小程序基本的开发框架抽取

    "微信小程序基本的开发框架抽取"这一主题旨在探讨和解析微信小程序的基础架构和开发流程,帮助开发者理解和掌握其核心概念。 1. **框架介绍**:微信小程序的开发框架是基于JavaScript的,它引入了一种新的声明式...

    时域抽取法基2FFT源程序

    基于时域抽取法的基二fft源程序!MATLAB语言!

    小程序web-view调用H5页面发起小程序抽取微信地址示例代码

    小程序web-view调用H5页面发起小程序抽取微信地址示例代码。 这接口是我熬夜写出来的,可以用于ECtouch的H5发起小程序调用微信收货地址,如果看不懂的话,可以进微信&gt;&gt;发现&gt;&gt;小程序搜索:“春意谷成人用品商城”进...

    小飞侠随机抽取程序,随机选择

    “小飞侠随机抽取程序”是一款专注于随机选择的软件,它能够随机抽取名字、数字或其他项目,并且保证每个项目被选中的概率均等,从而避免了人为选择带来的偏倚和不公。在教育领域,教师可以使用它进行课堂点名,随机...

Global site tag (gtag.js) - Google Analytics