用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)
1024 一直都没有“只看楼主”功能。 B站视频教程:https://www.bilibili.com/video/av20612482 armok 发表于 2019-5-14 15:45
1024 一直都没有“只看楼主”功能。
1024的帖子都不长,楼主一般都在首楼写完。天涯上的连载一写就是几年,多的上百页上万个回复,一个个手工抠是很麻烦滴。。。 1024好的小说也不少。我朋友说的。 qtechzdh 发表于 2019-5-14 15:50
1024好的小说也不少。我朋友说的。
问一下你朋友,都有什么好的小说推荐 armok 发表于 2019-5-14 15:45
1024 一直都没有“只看楼主”功能。
chrome有个插件(cl1024)有这个功能 ylei12 发表于 2019-5-14 16:16
问一下你朋友,都有什么好的小说推荐
少年阿宾 少妇白洁 康乐生 发表于 2019-5-14 16:28
少年阿宾 少妇白洁
我朋友叫康乐生 qtechzdh 发表于 2019-5-15 08:34
我朋友叫康乐生
真名吗,还是网名{:lol:} python可以做类似于那种自动抢票的软件或插件吗?
网上有些很热门的东西,需要抢的,用手机或者打开网页后手工操作太慢,经常抢不到,如果能按需开发一个插件,能自动抢,那就快很多。 zhbc 发表于 2019-5-15 10:54
python可以做类似于那种自动抢票的软件或插件吗?
网上有些很热门的东西,需要抢的,用手机或者打开网页后 ...
理论上,从网页可以得到的,用程序都可以得到。不过有些反爬做得比较好,有些加密比较NB,比如网银,这些就搞不到。抢票的话有很多人做啦,自动提交刷新下单。 小改了一下,直接把所有作者回复整合在一个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)
PHP拿去做爬虫,也不错。
页:
[1]