当前访客身份:游客 [ 登录 | 加入 OSCHINA ]

代码分享

当前位置:
代码分享 » Python  » 网络编程
杨子江

豆瓣-只看楼主-pyquery版

杨子江 发布于 2011年12月15日 11时, 3评/1097阅
分享到: 
收藏 +0
1
豆瓣-只看楼主

根据“带头大哥”的pyquery建议,自己重复写了一遍。

标签: Python

代码片段(1) [全屏查看所有代码]

1. [代码][Python]代码     跳至 [1] [全屏预览]

# Download douban post and parse by pyquery
# Anonymous 2011-12@SZ

# Config
post_home_url = 'http://www.douban.com/group/topic/23871584/'


# Start 
from pyquery import PyQuery as pq

def iter_page(page):
	return [page.eq(i) for i,_ in enumerate(page)]


def get_page(i):
	url = post_home_url+'?start=%d' %i #.format(i)
	return pq(url=url)

def get_topic(page):
	post = page('.topic-content')
	for item in iter_page(page):
		user = item('.user-face a').attr('href')
		if user is None: continue
		text = {}
		text['post'] = item('.topic-doc p').html().replace('<br/>','\n').replace('&#13;','')
		text['id'] = user[user.find('people')+7:-2]
		text['time'] = item('.reply-doc h4').text()[:20]
		text['name'] = item('.reply-doc h4 a').text()
		yield user, text

def get_replies(page):
	reply = page('.topic-reply li')
	for item in iter_page(reply):
		user = item('.user-face a').attr('href')
		if user is None: continue
		text = {}
		text['post'] = item('.reply-doc p').html().replace('<br/>','\n').replace('&#13;','')
		text['id'] = user[user.find('people')+7:-2]
		text['time'] = item('.reply-doc h4').text()[:20]
		text['name'] = item('.reply-doc h4 a').text()
		yield user, text

def get_lz():
	for user,text in get_topic(get_page(0)):
		return user

print 'Start ...\n'
import time

# LZ
lz = get_lz()
#print 'LZ=',lz

# TOPIC
for user,text in get_topic(get_page(0)):
	print text['time'].encode('UTF-8'),
	print text['id'],
	print text['name'].encode('UTF-8'),
	print text['post'].encode('UTF-8')

# REPLIES
i = 0
while True:
	#print '\nstart=',i
	page = get_page(i)
	if(page('li').hasClass('clearfix')):
		for user,text in get_replies(page):		
			if (text is not None and user == lz):
				print text['time'].encode('UTF-8'),
				print text['id'],
				print text['name'].encode('UTF-8')
				print text['post'].encode('UTF-8')
				print '\n'

		i+= 100
	else:
		break
	time.sleep(2)


print '\n... Finished.'


开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(3)

  • 1楼:杨子江 发表于 2011-12-21 09:57 回复此评论
    另外,henter这里有一个豆瓣热帖的脱水下载:  http://henter.me/douban/ 

    处理的也不错 

  • 2楼:gesuper 发表于 2012-04-08 03:55 回复此评论
    可能是豆瓣改版的原因 ,楼主的代码可做如下改进
    在用函数get_topic获得楼主第一贴时,出现了各个楼的回复者的名字,这应该是没有的。而且楼主第一贴获取time,id,name的方法同回复的不一样,下面是修改方法
    1)line-21:modify
        for item in iter_page(post):
    2)line-27-28:modify
        text['time'] = item('.topic-doc h3').text()[:20]
        text['name'] = item('.topic-doc h3 a').text()

    楼主的代码很好 正在学习中
  • 3楼:杨子江 发表于 2012-04-08 17:14 回复此评论

    引用来自“gesuper”的评论

    可能是豆瓣改版的原因 ,楼主的代码可做如下改进
    在用函数get_topic获得楼主第一贴时,出现了各个楼的回复者的名字,这应该是没有的。而且楼主第一贴获取time,id,name的方法同回复的不一样,下面是修改方法
    1)line-21:modify
        for item in iter_page(post):
    2)line-27-28:modify
        text['time'] = item('.topic-doc h3').text()[:20]
        text['name'] = item('.topic-doc h3 a').text()

    楼主的代码很好 正在学习中
    多谢!
开源从代码分享开始 分享代码
杨子江的其它代码 全部(5)...