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号