zoukankan      html  css  js  c++  java
  • 假装会python--爬取贴吧正文

    贴吧的老历史想存下来,强行python爬取一波

    队友太强,躺好别动,偶尔做点副业

    假装会python

    基本流程:

    1.爬取页面,获取页面的html源码

    2.分析源码 通过正则表达式 匹配到想要的内容

    3.去掉不需要的

    python中 re模块 提供对正则表达式的支持

     1 # -*- coding:utf-8 -*-
     2 import urllib2
     3 import  urllib
     4 import  re
     5 class Tool:
     6     #去除img标签,7位长空格
     7     removeImg = re.compile('<img.*?>| {7}|')
     8     #删除超链接标签
     9     removeAddr = re.compile('<a.*?>|</a>')
    10     #把换行的标签换为
    
    11     replaceLine = re.compile('<tr>|<div>|</div>|</p>')
    12     #将表格制表<td>替换为	
    13     replaceTD= re.compile('<td>')
    14     #把段落开头换为
    加空两格
    15     replacePara = re.compile('<p.*?>')
    16     #将换行符或双换行符替换为
    
    17     replaceBR = re.compile('<br><br>|<br>')
    18     #将其余标签剔除
    19     removeExtraTag = re.compile('<.*?>')
    20     def replace(self,x):
    21         x = re.sub(self.removeImg,"",x)
    22         x = re.sub(self.removeAddr,"",x)
    23         x = re.sub(self.replaceLine,"
    ",x)
    24         x = re.sub(self.replaceTD,"	",x)
    25         x = re.sub(self.replacePara,"
        ",x)
    26         x = re.sub(self.replaceBR,"
    ",x)
    27         x = re.sub(self.removeExtraTag,"",x)
    28         #strip()将前后多余内容删除
    29         return x.strip()
    30 class BDTB:
    31 
    32     def __init__(self,baseUrl,seeLZ):
    33         self.baseURL =baseUrl
    34         self.seeLZ ='?see_lz'+str(seeLZ)
    35         self.tool=Tool()
    36     def getPage(self,pageNum):#抓取网页 第几页
    37         try:
    38             url=self.baseURL+self.seeLZ+'&pn='+str(pageNum)
    39             request = urllib2.Request(url)
    40             response =urllib2.urlopen(request)
    41             #print  response.read()
    42             return response.read().decode('utf-8')
    43         except urllib2.URLError,e:
    44             if hasattr(e,"reason"):
    45                 print u"fail",e.reason
    46                 return None
    47     def getTitle(self):#获取标题
    48         page =self.getPage(1)
    49         pattern = re.compile('<h3 class="core_title_txt.*?>(.*?)</h3>',re.S)
    50         result =re.search(pattern,page)
    51         #print result
    52         if result:
    53             print result.group(1)
    54             return result.group(1).strip()
    55         else :
    56             return None
    57     def getContent(self):#获取正文
    58         page=self.getPage(1)
    59         pattern =re.compile('<div id="post_content_.*?>(.*?)</div>',re.S)
    60         items =re.findall(pattern,page)
    61         for i in range(1,20):#前19个
    62             print self.tool.replace(items[i])
    63 
    64 baseURL = 'http://tieba.baidu.com/p/5285925491'#任意一个网页的url
    65 bdtb=BDTB(baseURL,1)
    66 #bdtb.getTitle()
    67 bdtb.getContent()
  • 相关阅读:
    常用品牌交换机镜像抓包配置
    BGP知识点备忘录
    IS-IS路由协议地址详解
    Linux msmtp+mutt发邮件
    Linux添加一临时用户拥有root权限最快方式
    ELK5.0全程普通用户源码安装指南(CentOS6.5)
    改变文件的拥有者和改变文件的拥有组
    Linux chmod命令详解
    Linux目录介绍
    php时间戳转化成时间相差8小时问题
  • 原文地址:https://www.cnblogs.com/hsd-/p/7419149.html
Copyright © 2011-2022 走看看