2004年08月24日 星期二 18:06
还要看网站的设计的吧。 -----邮件原件----- 发件人: python-chinese-bounces at lists.python.cn [mailto:python-chinese-bounces at lists.python.cn] 代表 Zoom.Quiet 发送时间: 2004年8月24日 17:56 收件人: dreamingk (天成) 主题: Re: [python-chinese] 我的问题:如何使用程序登陆论坛等! Hollo dreamingk(天成): 嗯嗯!思路正确! 列表中有过讨论,使用 ClientCookie 吧! 具体的去看示例是也乎,在下没有经验………… /******** [2004-08-24]17:55:29 ; dreamingk(天成) wrote: dreamingk(天成)> Pythoner,您好! dreamingk(天成)> 我要下载很多mp3 dreamingk(天成)> 但是mp3的下载地址分布在各个不同的网页上。所以我写了一个 python程序用来自动读取这些网页 dreamingk(天成)> 然后获取其中的mp3地址。但是由于这是个论坛,所以只有登陆了才 能获得页面,否则他返回一个出错页面。如何让这个论坛认为我已经登陆了呢? dreamingk(天成)> 使用cookie吗?或者使用别的方法?请给个解决方法,最好有段示 例代码,谢谢! dreamingk(天成)> 致 dreamingk(天成)> 礼! dreamingk(天成)> dreamingk(天成) dreamingk(天成)> dreamingker at 163.com dreamingk(天成)> 2004-08-24 ********************************************/ -- Free as in Freedom Zoom.Quiet #=========================================# ]Time is unimportant, only life important![ #=========================================# sender is the Bat!2.12.00 _______________________________________________ python-chinese list python-chinese at lists.python.cn http://python.cn/mailman/listinfo/python-chinese
2004年08月24日 星期二 18:08
Zoom.Quiet,您好! 论坛是用asp写的,mp3的地址都是放在如 http://music.popv.net/download.asp?song_id= xxxx 的页面中 其中包含了ftp地址。我本来想用ftp把整个站点的某个目录都下载下来。但是没有列目录的权限。看不到目录下的任何东西。 所以就用python写了个东西来读取我需要的mp3url。但是不站点如何登陆。。。 ======= 2004-08-24 17:57:40 您在来信中写道:======= >Hollo dreamingk(天成): > >ps. >如果不是经常性的变动的话, >可以先使用其它专门的页面下载工具,将所有页面下载到本地,使用 Python 进行字串分析,自动下载就好……………… > >++++++++++++++++++++++++++++++++ > 嗯嗯!思路正确! > >列表中有过讨论,使用 ClientCookie 吧! > >具体的去看示例是也乎,在下没有经验………… > > >/******** [2004-08-24]17:55:29 ; dreamingk(天成) wrote: > >dreamingk(天成)> Pythoner,您好! > >dreamingk(天成)> 我要下载很多mp3 >dreamingk(天成)> 但是mp3的下载地址分布在各个不同的网页上。所以我写了一个python程序用来自动读取这些网页 >dreamingk(天成)> 然后获取其中的mp3地址。但是由于这是个论坛,所以只有登陆了才能获得页面,否则他返回一个出错页面。如何让这个论坛认为我已经登陆了呢? >dreamingk(天成)> 使用cookie吗?或者使用别的方法?请给个解决方法,最好有段示例代码,谢谢! >dreamingk(天成)> 致 >dreamingk(天成)> 礼! > > >dreamingk(天成)> dreamingk(天成) >dreamingk(天成)> dreamingker at 163.com >dreamingk(天成)> 2004-08-24 > > >********************************************/ > >-- >Free as in Freedom > > Zoom.Quiet > >#=========================================# >]Time is unimportant, only life important![ >#=========================================# > >sender is the Bat!2.12.00 > >_______________________________________________ >python-chinese list >python-chinese at lists.python.cn >http://python.cn/mailman/listinfo/python-chinese > = = = = = = = = = = = = = = = = = = = = 致 礼! dreamingk(天成) dreamingker at 163.com 2004-08-24
2004年08月24日 星期二 18:13
以前写过一小段这个的代码的, 如下。比较简陋,完成功能而已 #login and get session info. request = urllib2.Request(base_url) opener = urllib2.build_opener() data = urllib.urlencode(logindata) login = opener.open(request, data) cookies = login.info()['set-cookie'] #insert task data request.add_header("Cookie", cookies) data = urllib.urlencode(taskdata) insert = opener.open(request, data) -----邮件原件----- 发件人: python-chinese-bounces at lists.python.cn [mailto:python-chinese-bounces at lists.python.cn] 代表 dreamingk(天成) 发送时间: 2004年8月24日 17:52 收件人: Pythoner 主题: [python-chinese] 我的问题:如何使用程序登陆论坛等! Pythoner,您好! 我要下载很多mp3 但是mp3的下载地址分布在各个不同的网页上。所以我写了 一个python程序用来自动读取这些网页 然后获取其中的mp3地址。但是由于这是个论 坛,所以只有登陆了才能获得页面,否则他返回一个出错页面。如何让这个论坛认为我 已经登陆了呢? 使用cookie吗?或者使用别的方法?请给个解决方法,最好有段示例 代码,谢谢! 致 礼! dreamingk(天成) dreamingker at 163.com 2004-08-24
2004年08月24日 星期二 19:14
http://wwwsearch.sourceforge.net/ 看看上面的网站,里面也许有些适合你的需要的东西。 Eric Luo wrote: >以前写过一小段这个的代码的, 如下。比较简陋,完成功能而已 > #login and get session info. > request = urllib2.Request(base_url) > opener = urllib2.build_opener() > data = urllib.urlencode(logindata) > login = opener.open(request, data) > cookies = login.info()['set-cookie'] > > #insert task data > request.add_header("Cookie", cookies) > data = urllib.urlencode(taskdata) > insert = opener.open(request, data) > >-----邮件原件----- >发件人: python-chinese-bounces at lists.python.cn >[mailto:python-chinese-bounces at lists.python.cn] 代表 dreamingk(天成) >发送时间: 2004年8月24日 17:52 >收件人: Pythoner >主题: [python-chinese] 我的问题:如何使用程序登陆论坛等! > >Pythoner,您好! > > 我要下载很多mp3 但是mp3的下载地址分布在各个不同的网页上。所以我写了 >一个python程序用来自动读取这些网页 然后获取其中的mp3地址。但是由于这是个论 >坛,所以只有登陆了才能获得页面,否则他返回一个出错页面。如何让这个论坛认为我 >已经登陆了呢? 使用cookie吗?或者使用别的方法?请给个解决方法,最好有段示例 >代码,谢谢! > 致 >礼! > > > dreamingk(天成) > dreamingker at 163.com > 2004-08-24 > > >------------------------------------------------------------------------ > >_______________________________________________ >python-chinese list >python-chinese at lists.python.cn >http://python.cn/mailman/listinfo/python-chinese > >
2004年08月24日 星期二 20:09
Zoom.Quiet,您好! 有心得写成文章呀! ======= 2004-08-24 17:36:34 您在来信中写道:======= >Hollo limodou: > > 谢谢!! > >回家好好看一看! >今天,研究了一下子 4suite 使用其 4xslt 模块,可以在脚本中进行 XSLT+XML 的解析处理, > >哈哈哈!直接使用 XSLT 进行嵌套处理非常的自然,也是XML 标准的处理方式!!! > > >/******** [2004-08-24]17:34:58 ; limodou wrote: > >limodou> python-chinese,您好! > >limodou> 我写了一个小的模板类,现在可以实现嵌套处理,但是不支持根据列表数据而实现模板的循环。 > >limodou> 模板类: > >limodou> import re >limodou> import sets >limodou> import copy > >limodou> re_node = re.compile('%\((\w+)\)s') > >limodou> class Template: >limodou> def __init__(self): >limodou> pass > >limodou> def load(self, tplname): >limodou> mod = __import__(tplname) >limodou> components = tplname.split('.') >limodou> for comp in components[1:]: >limodou> mod = getattr(mod, comp) > >limodou> self.vars = {} >limodou> self.nodes = {} >limodou> for v in dir(mod): >limodou> if v.startswith('__') and v.endswith('__'): >limodou> continue >limodou> self.vars[v] = getattr(mod, v) >limodou> self.nodes[v] = >limodou> list(sets.Set(self._get_rely_on_node(self.vars[v]))) > >limodou> def _get_rely_on_node(self, s): #search for >limodou> %(name)s format, make a dict >limodou> return re_node.findall(s) > >limodou> def _get_list(self, path, target): >limodou> if not self.vars.has_key(target): >limodou> return >limodou> if target not in path: >limodou> path.append(target) >limodou> for i in self.nodes[target]: >limodou> self._get_list(path, i) >limodou> return > >limodou> def value(self, target='main', values=None): >limodou> path = [] >limodou> self._get_list(path, target) >limodou> path.reverse() >limodou> if not values: >limodou> vals = {} >limodou> else: >limodou> vals = copy.deepcopy(values) >limodou> for i in path: >limodou> vals[i] = self.vars[i] % vals >limodou> return vals[target] > >limodou> if __name__ == '__main__': >limodou> vars = dict(value='aba') >limodou> template = Template() >limodou> template.load('tmp2') >limodou> print template.value('main', vars) > >limodou> 测试文件: > >limodou> main=""" >limodou> v = [] >limodou> %(statement)s >limodou> for i in range(10): >limodou> %(printvar)s""" > >limodou> statement = "v.append('%(value)s')\n" > >limodou> printvar = " print '\\n'.join(%(var)s)\n" > >limodou> var = 'v' > >limodou> 有兴趣的可以讨论。 > >limodou> 现在的问题是对于可循环的模板,比如上面的statement我想根据提供的数据如果为列表或元组时,会自动进行重复。但一个模板可能涉及多个模板变量,如果有多个模板变量为多值该如何处理。按我 >limodou> 的想法,这种多值应该组织为一个元组的列表。不过,不太清楚otter会分析出什么数据来。不知道ZoomQuiet对这个有没有兴趣。 > >limodou> 简单说一下用法: > >limodou> 我定义的模板其实是一个模块,不过只是用来定义数据的。 > >limodou> vars = dict(value='aba') #生成模板用到的变量 >limodou> template = Template() #生成一个模板对象 >limodou> template.load('tmp2') #装入一个模板 >limodou> print template.value('main', vars) >limodou> #得到最终模板的值 当然,模板中还有许多的子模板,都可以得到。 >limodou> 致 >limodou> 礼! > > >limodou> limodou >limodou> chatme at 263.net >limodou> 2004-08-24 > > >********************************************/ > >-- >Free as in Freedom > > Zoom.Quiet > >#=========================================# >]Time is unimportant, only life important![ >#=========================================# > >sender is the Bat!2.12.00 > >_______________________________________________ >python-chinese list >python-chinese at lists.python.cn >http://python.cn/mailman/listinfo/python-chinese > = = = = = = = = = = = = = = = = = = = = 致 礼! limodou chatme at 263.net 2004-08-24
2004年08月24日 星期二 23:53
python-chinese,您好! 模板类:模板元素定义改为类对象,支持循环 #coding=utf-8 import re import sets import copy import types class T: def __init__(self, string): self.text = string def getText(self): return self.text class Template: def __init__(self, beginchars='<#', endchars='#>'): self.beginchars = beginchars #define template var's left delimeter chars self.endchars = endchars #define template var's right delimeter chars def load(self, tplname): mod = __import__(tplname) components = tplname.split('.') for comp in components[1:]: mod = getattr(mod, comp) self.vars = {} self.nodes = {} for vn in dir(mod): v = getattr(mod, vn) if hasattr(v, '__class__') and v.__class__.__name__ == 'T': self.vars[vn] = v self.nodes[vn] = self._get_rely_on_node(v.getText()) #取模板元素的相关集 def _get_rely_on_node(self, s): #search for %(name)s format, make a dict re_node = re.compile(r'%s(\w+)%s' % (self.beginchars, self.endchars)) return list(sets.Set(re_node.findall(s))) #取模板元素的生成顺序 def _get_list(self, path, target): if not self.vars.has_key(target): return if target not in path: path.append(target) for i in self.nodes[target]: self._get_list(path, i) return #生成模板值 #values应为字典的字典。即每一个模板元素如果引用有外部的变量,那么在values中应有此模板元素的一个键。 #同时它的值应为所有外部变量的一个字典 def value(self, target='main', values=None): path = [] self._get_list(path, target) path.reverse() vals = {} for i in path: value = self._getElementValue(i, vals, values) vals[i] = value return vals[target] def _replace(self, text, values): def dosup(matchobj, values=values): if values: return values.get(matchobj.groups()[0], matchobj.group()) else: return matchobj.group() #先将所有已经存在的模板元素进行替换 return re.sub(r'%s(\w+)%s' % (self.beginchars, self.endchars), dosup, text) def _getElementValue(self, name, elements, values=None): text = self.vars[name].getText() text = self._replace(text, elements) #再根据外部引用变量的类型决定是否进行循环 if values and values.has_key(name): if len(values[name]) == 1: #是字典则只进行一次替换 text = self._replace(text, values[name]) else: s = [] for v in values[name]: s.append(self._replace(text, v)) text = ''.join(s) return text if __name__ == '__main__': vars = dict(hello=[{'var':'var1'},{'var':'var2'},{'var':'var3'}]) template = Template() template.load('tmp2') print template.value('program', vars) 测试模板: from Template import T hello = T("Hello, <#var#> \n") message = T("Please input yourname:") program = T("""name = input_raw("<#message#>") print '''<#hello#>''' """) 致 礼! limodou chatme at 263.net 2004-08-24
Zeuux © 2025
京ICP备05028076号