↓ 跳过正文

自己写个python小程序下载忙总老井履虎尾等人的文章

·1654 字·4 分钟
ZMSITE
作者
ZMSITE
记录技术、项目与游戏。
目录

原帖:《自己写个python小程序下载忙总老井履虎尾等人的文章》 | 作者:瓦斯 | 原帖

本页收录 wxmang 在该帖下的答帖 2 条(约 66 字),并保留他所回应的读者发言 11 条作为语境(共 4 位参与者)。

说明:REPLY 是该站对作者发言的记录方式,与页面署名无关——这些是 wxmang 的原话,原帖正文版权归原作者。

1
#

问 | (无前文,作者主动发言)

答 | wxmang | 2011-09-22

这个厉害,我都是笨办法,一页页拷贝,累死人。

2
#

问 | 瓦斯、井底望天 | 2011-09-23

程序改好了,在我这里试验10分钟之内可以下载忙总在丰言的121篇主题帖子。自动用忙总的帖子标题加上.txt作为文件名,默认保存到d:\wxmang目录中去。

如果你想试用,可以将下面的程序复制保存成d:\wxmang\wxmang.py,然后在一个DOS窗口中打入python d:\wxmang\wxmang.py就可以自动获得忙总所有的帖子了。

前提要求:你的电脑安装了python,这个程序不大,免费的,到处都可以下载到。

本程序设计默认下载忙总在丰言的主题帖子,如果要下载别人的,将其中的搜索链接改掉就可以了。

如果要用到丰言之外的论坛,需要稍作修改。

源程序贴在下面,欢迎报告错误,欢迎提出改进意见。

PHP 代码:

#!/usr/bin/python

#_--_coding:UTF-8--

import_io,sys,re

import_urllib.request,_urllib.parse,urllib.error#Python3

from_urllib.request_import_FancyURLopener

from_html.parser_import_HTMLParser

from_io_import_StringIO

output_path=“D:\wxmang\”

url_author=“http://www.fengyanforum.org/forum/search.php?action=results&sid=5499aced95b497d5fb8a7f3f937b3ac2”

_#_搜索忙总所有主题帖子,搜索别人的修改此链接

def_get_web_content(url):

__myopener=FancyURLopener()

__print(“reading%s…”%(url))

___content=_myopener.open(url).read().decode(“utf-8”)

____return_content

_

class_MyHTMLParser(HTMLParser):

_def___init(self):

________HTMLParser.init(self)

_______self.text=_StringIO()

________self.js=0

________self.links=[]

____def_handle_starttag(self,_tag,_attrs):

________if_tag==‘a’_and_attrs:

____________link=attrs[0][1]

___________if_link_not_in_self.links\

___________and((“showthread.php?"in_link_and“page”not_in_link_and“lastpost”not_in_link)\

_______________or“search.php?"in_link_and“page”_in_link):

________________self.links.append(link)

____def_handle_data(self,_data):

_______if"<!–"_in_data:

____________#_print(“js_tag_begin”)

____________self.js=1

_______elif”–>"_in_data:

____________#_print(“js_tag_end”)

____________self.js=0

________else:_#_self.js==0:

____________self.text.write(data)

____def_get_text(self):

________return_self.text.getvalue()

____def_get_link(self):

________return_self.links

def_cleanline(line):

____line1=”"

____while_1:

________line1=line.replace(’\r\n\r\n\r\n’,’’).replace(’\t’,’’).replace(’\n\n\r’,’’).replace(’\r\n\r’,’’).replace(’\n\r\n’,’’)

________if_line1!=line:

____________line=line1

________else:

____________break

____return_line1


def_save_list2file(filename,mylist):

print(“writing%s_bytes_to[%s]…”_%(len(mylist),filename))

___f=_open(filename,“w”)

____for_line_in_mylist:

________try:

___________f.write("%s"%line)

________except_ValueError_as_e:

____________print(e)

____f.close()

__#print("[%s]closed."%filename)


def_save_url2file(output_path,url):

____content=get_web_content(url)

____title=content.splitlines()[3].replace("<title>","").replace("</title>","").replace(":","").lstrip()

____#获取主帖标题,当作文件名

___p=MyHTMLParser()

____p.feed(content)

___text=_cleanline(p.get_text())

____save_list2file(output_path+title+".txt",text)

def_get_link2file(output_path,url_author):

____content=get_web_content(url_author)

___p=MyHTMLParser()

____p.feed(content)

___links=p.get_link()

____#_save_list2file(output_path+“urls.txt”,links)

____return_links

links_page1=get_link2file(output_path,url_author)_#用搜索忙总主题的首页链接搜索,返回第一页的所有链接

url_authors=[]_#其余主题页的链接

urls=[]_#_具体主题帖子的具体链接

for____link_in_links_page1:

___if“showthread.php?"_in_link:

________urls.append(link)_#_保存搜索结果第一页中的每个主题帖链接

____else:

________url_authors.append(link)_#保存搜索结果第一页中显示的其余页的链接

#第一页的主帖链接搞定,其余搜索页的链接搞定

for_link_in_url_authors:_#对每个其余搜索页处理

____links_restpage=get_link2file(output_path,“http://www.fengyanforum.org/forum/"+link)_#_读取其余页的所有帖子链接

____for____link_in_links_restpage:

_______if“showthread.php?"in_link:#_只需要主帖子的链接了,不需要其余页的链接

___________urls.append(link)

#至此所有页的主帖链接搜集完毕

for_url_in_urls:_#对每个主帖的链接处理,保存结果到主帖标题的文件名中去

___save_url2file(output_path,“http://www.fengyanforum.org/forum/"+url)


这两天,我正想着用python写个程序,往上贴帖子呢,呵呵。

忙兄,要是有兴趣学python,我可以教你。

对了前几天写一个管理VMware的程序,丫居然不支持python,害得我只好用Perl写了一个接口,痛苦啊,每一句都要加分号。

答 | wxmang | 2011-09-24

谢谢,我暂时还是骑自行车吧,太快了我还控制不住。等你们把宝马开得顺畅了,我再来试试夏利。