Python论坛  - 讨论区

标题:答复: [python-chinese] 我的问题:如何使用程序登陆论坛等!

2004年08月24日 星期二 18:06

Darkay Li ldw at suntektech.com
Tue Aug 24 18:06:24 HKT 2004

还要看网站的设计的吧。 

-----邮件原件-----
发件人: 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

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年08月24日 星期二 18:08

dreamingk(天成) dreamingker at 163.com
Tue Aug 24 18:08:08 HKT 2004

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


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年08月24日 星期二 18:13

Eric Luo ericluo at hitrust.com.cn
Tue Aug 24 18:13:50 HKT 2004

以前写过一小段这个的代码的, 如下。比较简陋,完成功能而已
    #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

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年08月24日 星期二 19:14

Jacob Fan jacob at exoweb.net
Tue Aug 24 19:14:31 HKT 2004

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
>  
>



[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年08月24日 星期二 20:09

limodou chatme at 263.net
Tue Aug 24 20:09:17 HKT 2004

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


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年08月24日 星期二 23:53

limodou chatme at 263.net
Tue Aug 24 23:53:54 HKT 2004

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

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号