搜索
bottom↓
回复: 13

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

[复制链接]

出0入0汤圆

发表于 2019-5-14 15:44:59 | 显示全部楼层 |阅读模式
大学时,喜欢上课猫在后排看天涯煮酒版块连载的历史文章,那时还在用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[0]))


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)[0]
    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[0]


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[0:-7]  # 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)




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出16170入6148汤圆

发表于 2019-5-14 15:45:56 来自手机 | 显示全部楼层
1024 一直都没有“只看楼主”功能。

出0入0汤圆

 楼主| 发表于 2019-5-14 15:46:00 | 显示全部楼层
B站视频教程:https://www.bilibili.com/video/av20612482

出0入0汤圆

 楼主| 发表于 2019-5-14 15:48:31 | 显示全部楼层
armok 发表于 2019-5-14 15:45
1024 一直都没有“只看楼主”功能。

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

出10入18汤圆

发表于 2019-5-14 15:50:25 来自手机 | 显示全部楼层
1024好的小说也不少。我朋友说的。

出0入10汤圆

发表于 2019-5-14 16:16:04 | 显示全部楼层
qtechzdh 发表于 2019-5-14 15:50
1024好的小说也不少。我朋友说的。

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

出0入0汤圆

发表于 2019-5-14 16:24:14 | 显示全部楼层
armok 发表于 2019-5-14 15:45
1024 一直都没有“只看楼主”功能。

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

出0入0汤圆

 楼主| 发表于 2019-5-14 16:28:19 | 显示全部楼层
ylei12 发表于 2019-5-14 16:16
问一下你朋友,都有什么好的小说推荐

少年阿宾 少妇白洁

出10入18汤圆

发表于 2019-5-15 08:34:26 来自手机 | 显示全部楼层
康乐生 发表于 2019-5-14 16:28
少年阿宾 少妇白洁

我朋友叫康乐生

出0入0汤圆

 楼主| 发表于 2019-5-15 09:11:03 | 显示全部楼层

真名吗,还是网名

出0入13汤圆

发表于 2019-5-15 10:54:43 | 显示全部楼层
python可以做类似于那种自动抢票的软件或插件吗?
网上有些很热门的东西,需要抢的,用手机或者打开网页后手工操作太慢,经常抢不到,如果能按需开发一个插件,能自动抢,那就快很多。

出0入0汤圆

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

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

出0入0汤圆

 楼主| 发表于 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[0]))


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)[0]
    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[0]


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[0:-7]  # 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)

出0入0汤圆

发表于 2019-5-16 08:50:26 | 显示全部楼层
PHP拿去做爬虫,也不错。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 07:45

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表