• 做一个幸福的人,读书,旅行,努力工作,关心身体和心情。
  • 不管有没有人爱,也要努力做一个可爱的人。不埋怨谁,不嘲笑谁,也不羡慕谁,阳光下灿烂,风雨中奔跑,做自己的梦,走自己的路。

如何获取天涯论坛帖子内容

分享 lcq 5年前 (2013-11-02) 567次浏览 0个评论

如果你是非软件人员,请无视下面的文字直接跳到分割线下面。

最近一个同事在找一个工具,希望能将天涯论坛上的一些好的帖子将帖子内容跟回帖内容复制下来做成TXT文档在断网的情况下随时查看。

最容易想到的有两种方法可以解决该问题:1、手动一页一页的将内容复制到文档里面。这是最笨的一种方法了,这样做有两个缺点,首先是手动复制繁琐。要是只有几页还好,100多页的回帖的话那就不知道要多长时间了。然后是手动复制整个网页文本(Ctrl+A,Ctrl+C,Ctrl+V)(当然如果一个一个回帖的复制,一个帖子就是几千个回帖,你懂的!)下来的的话,有大量的不需要的文字信息。2、这是一种用过工具的人自然能想到的事情,那就是使用截图软件将整个屏幕的内容截取下来。如果你装的是Chrome浏览器,你去搜搜一下截取整个网页插件即可。当然,如果不是Chrome浏览器,你下载一个网页截图的软件也行。百度一下“网页截图工具”就有很多很多的小软件。这样做跟上述提到的解决方法1其实做起来还是很麻烦,而且有个致命的缺点是如果截下来的图片如果在手机上看,由于屏幕的原因,这样基本没法查看!

正是由于上述的缺点,所以需要自己写一个小工具来批量获取天涯论坛的帖子内容。这让我首先第一想到的是正则表达式。之所以想到用正则表达式来解决这个问题,是因为我想天涯论坛的帖子内容的html源码一定是按照某种规则来显示回帖内容的。这里面我想稍微解释一下什么是正则表达式。正则表达式是按照你设定的一些规则,来去匹配一些字符串。说白了,基本就是字符串匹配的升级版本,不过跟字符串匹配比较起来,正则表达式完爆字符串匹配。

有了正则表达式这个利器,只要天涯论坛上的回帖是按照一定的规则来显示的,这个问题基本就解决了。在网上查看了一下,果然不出我的所料,确实是按照一定的规则来显示的。所以我很快就有了思路:

1、获取帖子的整个HTML界面源代码。

2、使用正则表达式匹配帖子题目,帖子内容,回帖内容。

3、输出使用正则表达式的匹配内容。

至于对于不同的页面,由于每个帖子的页面的http地址也是有一定的规律的,所以体现到程序上只是多加一个循环而已。整个思路不难,于是当天中午我就写出了一个简单的demo版本。

在此声明一下,由于我N年没有写过PHP代码。自然是结果一番百度搜索之后将代码凑齐了。后面在测试的时候,由于PHP代码超过30S没有执行完成之后,会发生崩溃。所以有个小小的遗憾,那就是当获取到帖子内容过多的时候,PHP服务器自动停止程序的运行,所以我做了一个限定,那就是获取帖子的内容超过1024K文本的时候(经测试1024K有时候也服务器也会强行停止程序的运行,所以我设了512K跟1024K两个值),我就自动停止程序的运行。好吧,代码方面没什么说的,很简单。贴上来吧,做个笔记。(很久没写HTML跟PHP代码了,所以难看是必然的)

index.php文件:主要就是一个form,用于获取用户提交的参数。

ty.php文件:主要功能的实现。没什么好说的,有一定的注释,只要是稍微懂点PHP源码都能看懂的。

说一下代码的事情:由于正则表达式不是很熟悉,会有一定的概率漏掉一定的回帖内容,请须知!

最后说一下关于那个对于对于帖子内容过长无法显示到一个网页上的事情。这个我曾想到过一个解决办法:就是将文件内容写到TXT上保存。这样做我遇到的主要难点是:因为获取到的内容均是带HTML标签的文本,输出之后经过浏览器的解释自然没有了HTML标签,但是文本还是有。这个问题倒是不难解决,因为用正则表达式匹配出来的字符串之后做简单的处理即可将HTML标签过滤到输出到文本中。但是还是不能解决获取过多文本之后PHP服务器强制退出的的问题。当然,这肯定一定是有解决的办法的。比如可以写一个定时器之类的程序,执行一定的时间之后退出程序过一段时间再来获取,然后将获取的文本以追加的方式写入到txt文本中。但我没有做这个功能是由于天涯论坛上的帖子内容一般都不会超过512K内容,基本一次就能搞定。还有就是在本身对PHP不熟悉,所以也懒得再去搞了。

=====================我是性感的分割线=====================

关于小工具的一些说明:

1、仅限于获取天涯论坛的帖子内容,其他的网站帖子内容均不支持!

2、请猛击工具地址:http://lcqlcq.sinaapp.com/tool/tianya/ 进入工具页面。

3、进入工具页面你会看到一个丑陋的(我很丑可我很温柔)性感的简洁的界面如下图所示(输入框里面的内容是我填的):

说一下参数的含义。

“天涯帖子网址”:你需要获取哪个帖子的内容,把你当前在浏览器上的网址复制进来即可

“开始页面序号”:指的是你想从哪页开始获取帖子内容。

“结束页面序号”:指的是你想到哪个页面就不再获取帖子内容。

“楼层开始序号”:指的是开始页面回帖楼层的开始号。

“获取帖子大小”:前面的512K指的是当程序检测到获取到512K的内容时自动停止,后面的1024不再重述。

就以上面的输入参数来说吧,第一个不解析。第二三个参数指的是我想获取那个输入网址的第1 ~ 24页的帖子内容。

由于程序只要获取的内容超过你设定的值时,就会自动停止获取帖子内容,所以,如果要是想获取整个帖子内容的童鞋,而且一次性获取不到帖子内容,那么结束页面序号就填帖子的最后那个序号就行了,只要更改开始页面序号即可。

4、设置好参数之后,请轻轻的点击一下“确定”按钮。

5、见证奇迹的时候到了!

最后还啰嗦一句,如果一次性不能将帖子内容获取完毕的童鞋,请在获取到帖子内容的网页界面拉到最后面,对于你的下一次参数设置有惊喜!

参考文章:

1、PHP中preg_match_all函数用法使用详解

2、php 正则 匹配换行符的问题

3、利用PHP获取网页的源代码或标题


乐趣公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明如何获取天涯论坛帖子内容
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址