康乐生 发表于 2019-5-14 15:44:59

用python做了个简易的天涯脱水功能

大学时,喜欢上课猫在后排看天涯煮酒版块连载的历史文章,那时还在用nokia的功能机,只能把天涯上一页一页地把作者发表内容抠下来,保存为txt,导到手机中在里面看。后来知道了天涯脱水版,就是免费提供“只看楼主”功能,抠起来就方便多了。两三年下来也看了几十篇。。。

前两天在b站看到python的爬虫教程,照着做了一个,缅怀当时那个上了大学不认真听课也没心思泡妞的少年
源码如下:用python3.7.3 导入了requests模块,如果没有需要安装一下:pip install requests
运行后输入天涯论坛主贴的网址,比如:http://bbs.tianya.cn/post-no05-471093-1.shtml,就会在当前文件夹下建立新的文件夹,然后把每一页的楼主回复保存下来。没回复就不保存。

# -*- coding: UTF-8 -*-
import requests
import re
import os


# http://bbs.tianya.cn/post-no05-471093-1.shtml
paper_url = str(input('请输入天涯社区主贴网址:'))


def get_page_count(paper_url):# 获取页面数量
    response = requests.get(paper_url)
    response.encoding = 'utf-8'
    result = response.text
    reg = r'pageCount : (.*?),'
    page_count = re.findall(reg, result)
    # print(page_count)
    return int((page_count))


def get_paper_name(paper_url):# 获取文章名称+版块名称,建立文件夹用
    response = requests.get(paper_url)
    response.encoding = 'utf-8'
    result = response.text
    reg = r'<title>(.*?)_论坛_天涯社区</title>'
    paper_name = re.findall(reg, result)
    paper_name = paper_name.replace(' ', '_') #文件夹名有空格情况下mkdir会不正常,用下划线替代
    # print(paper_name)
    return paper_name


def get_author_id(paper_url):# 获取作者ID,提取作者回复的内容用
    response = requests.get(paper_url)
    response.encoding = 'utf-8'
    result = response.text
    reg = r'authorId : (.*?),'
    author_id = re.findall(reg, result)
    return author_id


def get_author_content(paper_url):
    page_count = get_page_count(paper_url)
    author_id = get_author_id(paper_url)
    paper_name = get_paper_name(paper_url)
    os.system(r'mkdir' + r' ' + paper_name)
    page_url = paper_url# http://bbs.tianya.cn/post-no05-471093- 截到这里
    for i in range(1, page_count + 1):# 遍历所有页面
      page_num = str(i)
      page_url_i = page_url + page_num + '.shtml'# 拼凑为第i个页面
      response = requests.get(page_url_i)
      response.encoding = 'utf-8'
      result = response.text
      reg = r'hostid=' + author_id + r'.*?<div class="bbs-conte.*?">(.*?)<div class="atl-reply"'
      author_bbs_content = re.findall(reg, result, re.S)
      if author_bbs_content != []:# 本页作者有回复则保存
            print('正在保存第%s页数据' % page_num)
            # 保存第i个页面为html
            fn = open('%s\\%s.html' % (paper_name, page_num), 'w', encoding='utf-8')
            for j in author_bbs_content:
                fn.write(j)
            fn.close


get_author_content(paper_url)




armok. 发表于 2019-5-14 15:45:56

1024 一直都没有“只看楼主”功能。

康乐生 发表于 2019-5-14 15:46:00

B站视频教程:https://www.bilibili.com/video/av20612482

康乐生 发表于 2019-5-14 15:48:31

armok 发表于 2019-5-14 15:45
1024 一直都没有“只看楼主”功能。

1024的帖子都不长,楼主一般都在首楼写完。天涯上的连载一写就是几年,多的上百页上万个回复,一个个手工抠是很麻烦滴。。。

qtechzdh 发表于 2019-5-14 15:50:25

1024好的小说也不少。我朋友说的。

ylei12 发表于 2019-5-14 16:16:04

qtechzdh 发表于 2019-5-14 15:50
1024好的小说也不少。我朋友说的。

问一下你朋友,都有什么好的小说推荐

powermeter 发表于 2019-5-14 16:24:14

armok 发表于 2019-5-14 15:45
1024 一直都没有“只看楼主”功能。

chrome有个插件(cl1024)有这个功能

康乐生 发表于 2019-5-14 16:28:19

ylei12 发表于 2019-5-14 16:16
问一下你朋友,都有什么好的小说推荐

少年阿宾 少妇白洁

qtechzdh 发表于 2019-5-15 08:34:26

康乐生 发表于 2019-5-14 16:28
少年阿宾 少妇白洁

我朋友叫康乐生

康乐生 发表于 2019-5-15 09:11:03

qtechzdh 发表于 2019-5-15 08:34
我朋友叫康乐生

真名吗,还是网名{:lol:}

zhbc 发表于 2019-5-15 10:54:43

python可以做类似于那种自动抢票的软件或插件吗?
网上有些很热门的东西,需要抢的,用手机或者打开网页后手工操作太慢,经常抢不到,如果能按需开发一个插件,能自动抢,那就快很多。

康乐生 发表于 2019-5-15 11:06:14

zhbc 发表于 2019-5-15 10:54
python可以做类似于那种自动抢票的软件或插件吗?
网上有些很热门的东西,需要抢的,用手机或者打开网页后 ...

理论上,从网页可以得到的,用程序都可以得到。不过有些反爬做得比较好,有些加密比较NB,比如网银,这些就搞不到。抢票的话有很多人做啦,自动提交刷新下单。

康乐生 发表于 2019-5-15 15:55:53

小改了一下,直接把所有作者回复整合在一个txt

# -*- coding: UTF-8 -*-
import requests
import re


# http://bbs.tianya.cn/post-no05-471093-1.shtml
paper_url = str(input('请输入天涯社区主贴网址:'))


def get_page_count(paper_url):# 获取页面数量
    response = requests.get(paper_url)
    response.encoding = 'utf-8'
    result = response.text
    reg = r'pageCount : (.*?),'
    page_count = re.findall(reg, result)
    # print(page_count)
    return int((page_count))


def get_paper_name(paper_url):# 获取文章名称+版块名称,建立文件夹用
    response = requests.get(paper_url)
    response.encoding = 'utf-8'
    result = response.text
    reg = r'<title>(.*?)_论坛_天涯社区</title>'
    paper_name = re.findall(reg, result)
    paper_name = paper_name.replace(' ', '_') #文件夹名有空格情况下mkdir会不正常,用下划线替代
    # print(paper_name)
    return paper_name


def get_author_id(paper_url):# 获取作者ID,提取作者回复的内容用
    response = requests.get(paper_url)
    response.encoding = 'utf-8'
    result = response.text
    reg = r'authorId : (.*?),'
    author_id = re.findall(reg, result)
    return author_id


def get_author_content(paper_url):
    page_count = get_page_count(paper_url)
    author_id = get_author_id(paper_url)
    paper_name = get_paper_name(paper_url)
    page_url = paper_url# http://bbs.tianya.cn/post-no05-471093- 截到这里
    fn = open('%s.txt' % paper_name, 'w', encoding='utf-8')

    for i in range(1, page_count + 1):# 遍历所有页面
      page_num = str(i)
      page_url_i = page_url + page_num + '.shtml'# 拼凑为第i个页面
      response = requests.get(page_url_i)
      response.encoding = 'utf-8'
      result = response.text
      reg = r'hostid=' + author_id + r'.*?<div class="bbs-conte.*?">(.*?)</div>.*?<div class="atl-reply"'
      author_bbs_content = re.findall(reg, result, re.S)

      if author_bbs_content != []:# 本页作者有回复则保存
            print('正在保存第%s页数据' % page_num)
            for j in author_bbs_content:
                j = ' '.join(j.split())
                j = j.replace('<br>', '\r\n')
                fn.write(j)
    fn.close


get_author_content(paper_url)

innovision 发表于 2019-5-16 08:50:26

PHP拿去做爬虫,也不错。
页: [1]
查看完整版本: 用python做了个简易的天涯脱水功能