n年的暗恋吧 关注:41贴子:2,428
  • 14回复贴,共1

【助人】百度贴吧贴子备份方案(另存为本地mhtml格式)

只看楼主收藏回复

有备份个人贴吧(就是这个吧)的想法不是一天两天了。首先是2017年百度贴吧抽风,所有之前的贴子都不见了,当时真是焦急无力。再就是最近一次因为意外操作导致账号被封,所有曾经的发帖都无法查看,也是很是着急。这个吧的内容基本都是我的个人日记,没事喜欢回忆过去的我也会时不时的翻一翻,很不错。
百度了许多方法,没有针对性的软件能达到我的预期。我又不是程序员,爬虫编程啥的不是很了解。已知方法有:1.html文件存储后页面缺少排版影响阅读,存多文件又很不方便,毕竟存储之后并不想做文件改动;2.通过页面打印的方式存储PDF,一些图片总是没办法正常显示。后来发现网页另存mhtml的方式不错,于是第二个问题是如何自动下载贴子。


IP属地:辽宁1楼2021-02-26 09:25回复
    经过差不多三天的学习,终于搞定了。现在将大概方法贴出,一方面是如果有有缘人恰好需要备份贴吧贴子,可以做个借鉴;另一方面也方便我记录下方法,之后还可能用到。
    方法为:python (pycharm) + BeautifulSoup库 + Selenium + Chrome浏览器
    Python:之前学过一点大概知道语法啥的,而且pycharm导入库啥的感觉好方便。
    BeautifulSoup + requests库:Python的库,百度备份方法的时候有人安利了慕课上嵩天老师的爬虫课,课程很短,学了一会感觉顺这个思路也许能实现我的需求。(确实好用)
    Selenium:机缘巧合下发现的方法,有对应的Python库和对应Chrome谷歌浏览器的方法(chromedriver)。最最重要的是有一个方法刚好可以提取页面的mhtml格式代码,满足了我的需求。
    Chrome浏览器:配合Selenium的使用。


    IP属地:辽宁2楼2021-02-26 09:38
    收起回复
      2025-08-30 00:47:45
      广告
      不感兴趣
      开通SVIP免广告
      需求一:备份某贴吧的帖子目录(一页显示50个主题)
      # coding = utf-8
      from selenium import webdrive
      browser = webdriver.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')
      # 通过程序调用谷歌浏览器,chromedriver需要下载,然后下载路径填到里面。
      yemian = 0
      while yemian <= 750: # 贴吧的主题数决定了页面数,50个主题一页(这个750是根据本吧页数来的)
      mainUrl = "https://tieba.baidu.com/f?kw=n%E5%B9%B4%E7%9A%84%E6%9A%97%E6%81%8B&pn="+str(yemian)
      browser.get(mainUrl)
      res = browser.execute_cdp_cmd('Page.captureSnapshot', {}) # 获取为mhtml数据。这个就是实现功能的核心方法。
      filename = 'download\\toppage'+str(yemian)+'.mhtml' # 这地方download代表下载的文件夹,默认在程序文件根目录
      with open(filename, 'w',newline='') as f: # filename定义存入名称。
      f.write(res['data']) #写入文件
      yemian = yemian + 50
      browser.quit()


      IP属地:辽宁3楼2021-02-26 09:50
      回复
        需求三:备份贴吧内的某个主题帖子,正常一页的直接右键另存为mhtml就完事了,如果多页的可以用下面的方法。
        # coding = utf-8
        from selenium import webdriver
        import requests
        from bs4 import BeautifulSoup
        def getHTMLText(url):
        try:
        hv = {'user-agent': 'Mozilla/5.0'}
        r = requests.get(url, timeout=30, headers=hv)
        r.raise_for_status()
        r.encoding = 'utf-8'
        return r.text
        except:
        return "产生异常"
        browser = webdriver.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')
        mainUrl = "https://tieba.baidu.com/p/6023446113" # 这个地方改需要下载的帖子链接。一般都是这个格式的
        browser.get(mainUrl)
        html = getHTMLText(mainUrl)
        soup = BeautifulSoup(html,"html.parser")
        title = soup.find('h3').string
        for fu in r'\/:*?"<>|':
        title = title.replace(fu, '')
        html_page = getHTMLText(mainUrl)
        print(mainUrl)
        tf = soup.find('span', 'red', style=None)
        if tf != None:
        td = tf.string
        i = int(td)
        print("共" + str(i) + "页")
        while i >= 1:
        url = mainUrl + '?pn=' + str(i)
        browser.get(url)
        res = browser.execute_cdp_cmd('Page.captureSnapshot', {}) # 获取为mhtml数据。
        filename = r'download/' + title +'_第'+str(i)+'页'+ '.mhtml'
        with open(filename, 'w', newline='') as f: # 定义存入名称。
        f.write(res['data']) # 写入文件
        print("已备份第"+str(i)+"页")
        i=i-1
        browser.quit()


        IP属地:辽宁5楼2021-02-26 10:10
        回复
          下载的过程有点慢,经过我的观察应该是selenium运行的时候需要页面加载完成之后才会执行browser.execute_cdp_cmd('Page.captureSnapshot', {}) 这个,虽然慢但是自动,可以慢慢爬,最后我靠着上面的代码成功下载了本吧800多个帖子...再也不用担心可恶的百度吞我帖子了。


          IP属地:辽宁6楼2021-02-26 10:16
          回复
            另外也有些感慨程序员的不易,就这么几行代码我就研究了3天,而且感觉每天的精神状态都不是很好,,,不怪程序员老的快,掉头发,得亏我没从事编程工作,真的容易疯。。。程序员的高工资确实也不是白拿的


            IP属地:辽宁7楼2021-02-26 10:18
            回复
              最终效果展示哈哈哈,最后的文档分类按照第一部分获取的页面命名分类,非常整洁不错


              IP属地:辽宁8楼2021-02-26 10:28
              回复
                3次违规都没封我账号,我谢谢官方...看着只能截屏留念了...


                IP属地:辽宁11楼2021-02-26 11:10
                回复
                  2025-08-30 00:41:45
                  广告
                  不感兴趣
                  开通SVIP免广告


                  IP属地:辽宁12楼2021-02-26 11:11
                  回复
                    我看不懂


                    IP属地:河北来自Android客户端13楼2021-12-15 23:05
                    回复
                      能帮我下(http://tieba.baidu.com/p/7649973215?share=9105&fr=sharewise&see_lz=0&share_from=post&sfc=copy&client_type=2&client_version=12.15.1.0&st=1639580661&unique=0C030CF9DFB3DA3E8237E49DFA2B3BB8)这个帖子么


                      IP属地:河北来自Android客户端14楼2021-12-15 23:05
                      回复
                        你好你还在吗 能不能有偿给我上一课啊 我看不懂


                        来自iPhone客户端15楼2022-07-10 17:47
                        回复
                          本人编程小白、把楼主的代码改了下、能跑了...


                          IP属地:广东来自Android客户端16楼2023-10-19 19:27
                          回复
                            楼主那个备份一个吧一整页的代码、我三个月前弄的...现在知道还能跑、但是我看不懂了xwx、对应的数值改下就好


                            IP属地:广东来自Android客户端17楼2023-10-19 20:20
                            回复