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

基于Python實現(xiàn)的百度貼吧網(wǎng)絡爬蟲實例

 更新時間:2015年04月17日 16:39:56   作者:請叫我汪海  
這篇文章主要介紹了基于Python實現(xiàn)的百度貼吧網(wǎng)絡爬蟲,實例分析了Python實現(xiàn)網(wǎng)絡爬蟲的相關技巧,非常具有實用價值,需要的朋友可以參考下

本文實例講述了基于Python實現(xiàn)的百度貼吧網(wǎng)絡爬蟲。分享給大家供大家參考。具體如下:

完整實例代碼點擊此處本站下載

項目內(nèi)容:

用Python寫的百度貼吧的網(wǎng)絡爬蟲。

使用方法:

新建一個BugBaidu.py文件,然后將代碼復制到里面后,雙擊運行。

程序功能:

將貼吧中樓主發(fā)布的內(nèi)容打包txt存儲到本地。

原理解釋:

首先,先瀏覽一下某一條貼吧,點擊只看樓主并點擊第二頁之后url發(fā)生了一點變化,變成了:
http://tieba.baidu.com/p/2296712428?see_lz=1&pn=1

可以看出來,see_lz=1是只看樓主,pn=1是對應的頁碼,記住這一點為以后的編寫做準備。
這就是我們需要利用的url。
接下來就是查看頁面源碼。
首先把題目摳出來存儲文件的時候會用到。
可以看到百度使用gbk編碼,標題使用h1標記:

復制代碼 代碼如下:
<h1 class="core_title_txt" title="【原創(chuàng)】時尚首席(關于時尚,名利,事業(yè),愛情,勵志)">【原創(chuàng)】時尚首席(關于時尚,名利,事業(yè),愛情,勵志)</h1>

同樣,正文部分用div和class綜合標記,接下來要做的只是用正則表達式來匹配即可。

運行截圖:

生成的txt文件:

# -*- coding: utf-8 -*- 
#--------------------------------------- 
#  程序:百度貼吧爬蟲 
#  版本:0.5 
#  作者:why 
#  日期:2013-05-16 
#  語言:Python 2.7 
#  操作:輸入網(wǎng)址后自動只看樓主并保存到本地文件 
#  功能:將樓主發(fā)布的內(nèi)容打包txt存儲到本地。 
#--------------------------------------- 
import string 
import urllib2 
import re 
#----------- 處理頁面上的各種標簽 ----------- 
class HTML_Tool: 
  # 用非 貪婪模式 匹配 \t 或者 \n 或者 空格 或者 超鏈接 或者 圖片 
  BgnCharToNoneRex = re.compile("(\t|\n| |<a.*?>|<img.*?>)") 
  # 用非 貪婪模式 匹配 任意<>標簽 
  EndCharToNoneRex = re.compile("<.*?>") 
  # 用非 貪婪模式 匹配 任意<p>標簽 
  BgnPartRex = re.compile("<p.*?>") 
  CharToNewLineRex = re.compile("(<br/>|</p>|<tr>|<div>|</div>)") 
  CharToNextTabRex = re.compile("<td>") 
  # 將一些html的符號實體轉變?yōu)樵挤?
  replaceTab = [("<","<"),(">",">"),("&","&"),("&","\""),(" "," ")] 
  def Replace_Char(self,x): 
    x = self.BgnCharToNoneRex.sub("",x) 
    x = self.BgnPartRex.sub("\n  ",x) 
    x = self.CharToNewLineRex.sub("\n",x) 
    x = self.CharToNextTabRex.sub("\t",x) 
    x = self.EndCharToNoneRex.sub("",x) 
    for t in self.replaceTab:  
      x = x.replace(t[0],t[1])  
    return x  
class Baidu_Spider: 
  # 申明相關的屬性 
  def __init__(self,url):  
    self.myUrl = url + '?see_lz=1' 
    self.datas = [] 
    self.myTool = HTML_Tool() 
    print u'已經(jīng)啟動百度貼吧爬蟲,咔嚓咔嚓' 
  # 初始化加載頁面并將其轉碼儲存 
  def baidu_tieba(self): 
    # 讀取頁面的原始信息并將其從gbk轉碼 
    myPage = urllib2.urlopen(self.myUrl).read().decode("gbk") 
    # 計算樓主發(fā)布內(nèi)容一共有多少頁 
    endPage = self.page_counter(myPage) 
    # 獲取該帖的標題 
    title = self.find_title(myPage) 
    print u'文章名稱:' + title 
    # 獲取最終的數(shù)據(jù) 
    self.save_data(self.myUrl,title,endPage) 
  #用來計算一共有多少頁 
  def page_counter(self,myPage): 
    # 匹配 "共有<span class="red">12</span>頁" 來獲取一共有多少頁 
    myMatch = re.search(r'class="red">(\d+?)</span>', myPage, re.S) 
    if myMatch:  
      endPage = int(myMatch.group(1)) 
      print u'爬蟲報告:發(fā)現(xiàn)樓主共有%d頁的原創(chuàng)內(nèi)容' % endPage 
    else: 
      endPage = 0 
      print u'爬蟲報告:無法計算樓主發(fā)布內(nèi)容有多少頁!' 
    return endPage 
  # 用來尋找該帖的標題 
  def find_title(self,myPage): 
    # 匹配 <h1 class="core_title_txt" title="">xxxxxxxxxx</h1> 找出標題 
    myMatch = re.search(r'<h1.*?>(.*?)</h1>', myPage, re.S) 
    title = u'暫無標題' 
    if myMatch: 
      title = myMatch.group(1) 
    else: 
      print u'爬蟲報告:無法加載文章標題!' 
    # 文件名不能包含以下字符: \ / : * ? " < > | 
    title = title.replace('\\','').replace('/','').replace(':','').replace('*','').replace('?','').replace('"','').replace('>','').replace('<','').replace('|','') 
    return title 
  # 用來存儲樓主發(fā)布的內(nèi)容 
  def save_data(self,url,title,endPage): 
    # 加載頁面數(shù)據(jù)到數(shù)組中 
    self.get_data(url,endPage) 
    # 打開本地文件 
    f = open(title+'.txt','w+') 
    f.writelines(self.datas) 
    f.close() 
    print u'爬蟲報告:文件已下載到本地并打包成txt文件' 
    print u'請按任意鍵退出...' 
    raw_input(); 
  # 獲取頁面源碼并將其存儲到數(shù)組中 
  def get_data(self,url,endPage): 
    url = url + '&pn=' 
    for i in range(1,endPage+1): 
      print u'爬蟲報告:爬蟲%d號正在加載中...' % i 
      myPage = urllib2.urlopen(url + str(i)).read() 
      # 將myPage中的html代碼處理并存儲到datas里面 
      self.deal_data(myPage.decode('gbk')) 
  # 將內(nèi)容從頁面代碼中摳出來 
  def deal_data(self,myPage): 
    myItems = re.findall('id="post_content.*?>(.*?)</div>',myPage,re.S) 
    for item in myItems: 
      data = self.myTool.Replace_Char(item.replace("\n","").encode('gbk')) 
      self.datas.append(data+'\n') 
 
#-------- 程序入口處 ------------------ 
print u"""#--------------------------------------- 
#  程序:百度貼吧爬蟲 
#  版本:0.5 
#  作者:why 
#  日期:2013-05-16 
#  語言:Python 2.7 
#  操作:輸入網(wǎng)址后自動只看樓主并保存到本地文件 
#  功能:將樓主發(fā)布的內(nèi)容打包txt存儲到本地。 
#--------------------------------------- 
""" 
# 以某小說貼吧為例子 
# bdurl = 'http://tieba.baidu.com/p/2296712428?see_lz=1&pn=1' 
print u'請輸入貼吧的地址最后的數(shù)字串:' 
bdurl = 'http://tieba.baidu.com/p/' + str(raw_input(u'http://tieba.baidu.com/p/'))  
#調用 
mySpider = Baidu_Spider(bdurl) 
mySpider.baidu_tieba()

希望本文所述對大家的Python程序設計有所幫助。

相關文章

  • pytorch 實現(xiàn)多個Dataloader同時訓練

    pytorch 實現(xiàn)多個Dataloader同時訓練

    這篇文章主要介紹了pytorch 實現(xiàn)多個Dataloader同時訓練的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 對python多線程與global變量詳解

    對python多線程與global變量詳解

    今天小編就為大家分享一篇對python多線程與global變量詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • 如何使用Cython對python代碼進行加密

    如何使用Cython對python代碼進行加密

    這篇文章主要介紹了如何使用Cython對python代碼進行加密,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • python golang中grpc 使用示例代碼詳解

    python golang中grpc 使用示例代碼詳解

    這篇文章主要介紹了python golang中grpc 使用,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Pandas時間序列:時期(period)及其算術運算詳解

    Pandas時間序列:時期(period)及其算術運算詳解

    今天小編就為大家分享一篇Pandas時間序列:時期(period)及其算術運算詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 詳解Python如何優(yōu)雅地解析命令行

    詳解Python如何優(yōu)雅地解析命令行

    隨著我們編程經(jīng)驗的增長,對命令行的熟悉程度日漸加深,想來很多人會漸漸地體會到使用命令行帶來的高效率。本文將介紹Python解析命令行的兩種方法,需要的可以參考一下
    2022-06-06
  • Python中字典(dict)合并的四種方法總結

    Python中字典(dict)合并的四種方法總結

    在Python中將字典(dict)進行合并操作,是一個比較常見的問題。下面這篇文章主要給大家總結介紹了關于Python中字典(dict)合并的四種方法,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-08-08
  • python 實現(xiàn)客戶端與服務端的通信

    python 實現(xiàn)客戶端與服務端的通信

    這篇文章主要介紹了python 實現(xiàn)客戶端與服務端的通信的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Python使用keys() 獲取 Redis 數(shù)據(jù)庫中的所有鍵

    Python使用keys() 獲取 Redis 數(shù)據(jù)庫中的所有鍵

    哈希、列表、集合、排序集合、字符串、JSON 和流是 Redis 支持的眾多數(shù)據(jù)結構之一,本文將討論獲取 Redis 數(shù)據(jù)庫中的所有鍵,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • python os.path.isfile()因參數(shù)問題判斷錯誤的解決

    python os.path.isfile()因參數(shù)問題判斷錯誤的解決

    今天小編就為大家分享一篇python os.path.isfile()因參數(shù)問題判斷錯誤的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11

最新評論

衡东县| 嘉定区| 游戏| 珲春市| 汽车| 保亭| 响水县| 台山市| 吴旗县| 山阳县| 宜川县| 祁东县| 阜宁县| 安西县| 武胜县| 新乡市| 太仆寺旗| 黄骅市| 策勒县| 太保市| 福贡县| 个旧市| 嵊泗县| 阿图什市| 集安市| 正安县| 敦化市| 吉隆县| 蓬安县| 遂昌县| 东兰县| 中牟县| 乌审旗| 蕉岭县| 宁都县| 兴仁县| 张北县| 霍邱县| 宁夏| 延津县| 大竹县|