• Python网页抓取程序


    本程序用于从网页抓取文本,也就是盗墓笔记的文本提取,写得简单,大家莫笑

    ''' 

     从盗墓笔记的网站中取得各集具体内容的地址,并从各集体内容网页中提取内容并写入文件中

    '''
    #-*- encoding: gb2312 -*-
    import HTMLParser
    import urllib
    import sys
    class urlParser(HTMLParser.HTMLParser):
        def __init__(self):
            self.urllist=[]
            HTMLParser.HTMLParser.__init__(self)        
            
        def handle_starttag(self, tag, attrs):
            # 这里重新定义了处理开始标签的函数
            if tag == 'a':
                # 判断标签<a>的属性
                for name,value in attrs:
                    if name=='href':
                        self.urllist.append(value)
                    
    class DocParser(HTMLParser.HTMLParser):
        def __init__(self,filename):
            self.readingtitle = 0
            self.readingdoc=0
            self.record=0
           
            self.fsock = open(filename, 'w')
                  
            HTMLParser.HTMLParser.__init__(self)
        def __del__(self):
            
            self.fsock.close()
            
        def handle_starttag(self, tag, attrs):
            if tag =='div':
                self.record+=1
            if tag == 'title':
                self.readingtitle = 1
            if tag == 'p':
                self.readingdoc = 1        
        def handle_data(self,data):
            if self.readingtitle:  #检查是否取得数据
            #通常这是一个慢又差的方法
                data=data.encode('utf-8')
                self.fsock.write( data)
                self.fsock.write( '\n\n')
            if self.readingdoc and self.record==11:
                if not ('google' in data):
                    data=data.encode('utf-8')
                    self.fsock.write( data)
        def handle_endtag(self, tag):
            if tag == 'title':
                self.readingtitle = 0
            if tag == 'doc':
                self.readingdoc = 0
                
    def readdata(url):
        
        
        temp=url.split('/')[-1]
        fname=temp.split('.')[0]+'.txt'    
        my = DocParser(fname)
        # 传入要分析的数据,是html的。
        a=urllib.urlopen(url).read()
        a=a.decode('utf-8')
        my.feed(a)
        
        
    if __name__ == '__main__':
        
        
        url=urlParser()
        f=urllib.urlopen('http://www.daomubiji.com/').read()
        f=f.decode('utf-8')
        url.feed(f)
        links=[]
        for link in url.urllist:
             if link.split('.')[-1]=='html':
                 links.append(link)
        
        for link in links:
            readdata(link)

    程序比较简单,就不具体解释了,大部分内容东拼西凑,包括内部的注释也没有改。程序运行也很慢,大约要一个小时才能完成,如果要改进一是改进HTML的解释算法, 二是引进多线程。

  • 相关阅读:
    代码记录——phase16,block36
    代码记录——phase16,block32
    旋转中建立一个新的数组来存原图数据,测试
    微信小程序:工具配置 project.config.json
    微信小程序:全局配置app.json
    Python3:Requests模块的异常值处理
    微信小程序:本地资源图片无法通过 WXSS 获取,可以使用网络图片或者 base64或者使用image标签
    快速制作一款高逼格词云图
    jQuery事件
    jQuery:$(document).ready()用法
  • 原文地址:https://www.cnblogs.com/zcmky/p/2015677.html
Copyright © 2020-2023  润新知