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()
  • 相关阅读:
    SGU 271 Book Pile (双端队列)
    POJ 3110 Jenny's First Exam (贪心)
    HDU 4310 Hero (贪心)
    ZOJ 2132 The Most Frequent Number (贪心)
    POJ 3388 Japanese Puzzle (二分)
    UVaLive 4628 Jack's socks (贪心)
    POJ 2433 Landscaping (贪心)
    CodeForces 946D Timetable (DP)
    Android Studio教程从入门到精通
    Android Tips – 填坑手册
  • 原文地址:https://www.cnblogs.com/hsd-/p/7419149.html
Copyright © 2011-2022 走看看