第一个有点用的程序写出来了!激动中的疑惑

2015-03-31 11:57:34 +08:00
 yuewolf
求勿嘲!新手练习。实现功能很简单,就是看下新浪博客rss返回内容是否为空,不为空就把这个RSS地址存起来。
求路过的大牛小牛们指点。
问题
1. rss 验证不为空时,一条条保存进txt好一点,还是我考虑的200一组写一次好一点?
2. 如果有错或者异常咋办?能不能在先不学异常处理的前提下,直接绕过去?异常处理什么的,看教程有点发怵。
3. 运行速度好慢,想抓完得跑到猴年马月…… 应该用多线程or多进程?
4. WIN和LINUX下跑起来速度上有区别吗?
5. 非常感谢!!
代码如下:

# -- coding: utf-8 --
import re
import sys
import urllib2
sys.setrecursionlimit(1000000)#不懂,什么深度来着的
save_path = "blog.txt"#保存路径,先写死了
def Main(start_num=2935650000,end_num=2935654000,per_num=200):
print 'do you want to set ? \nYes (input 1 ) or No (input Enter)'#多么人性化的考虑啊
select = raw_input('')
if select == '1':
start_num = int(raw_input('input start blog number : '))
end_num = int(raw_input('input end blog number : '))
per_num = int(raw_input('input per number : '))
else:
pass
Do(start_num,end_num,per_num)
print 'Done! Omg, how smart am I!'#自我表扬比自我批评更重要!
def Do(start,end,per):
temp_end = start + per
the_str = ''
if temp_end <= end:
for i in range(start,temp_end):
if BlogCheck(i):
the_str = the_str + 'http://blog.sina.com.cn/rss/' + str(i) + '.xml\n'#这一坨有点别扭的感觉
SaveResult(the_str)
start = temp_end
Do(start,end,per)#莫非我用上了传说中的递归??
else:
for i in range(start,end):
if BlogCheck(i):
the_str = the_str + str(i) + '\n'
SaveResult(the_str)
def BlogCheck(user):
rss_url = 'http://blog.sina.com.cn/rss/' + str(user) + '.xml'
response = urllib2.urlopen(rss_url)
content = response.read()
if content == '':#浪浪的blog未开通时 rss输出内容为空
return False
else:
return True
def SaveResult(str):
f = open(save_path,'a')
f.write(str)
f.close()
Main()
3877 次点击
所在节点    Python
15 条回复
xieyudi1990
2015-03-31 12:07:01 +08:00
以前用纯C + socket实现过一个podcast自动下载器的路过...
limbo0
2015-03-31 12:34:01 +08:00
C socket -> python爬虫 -> scrapy框架 -> 分布式爬虫 -> ....
clino
2015-03-31 12:41:26 +08:00
python对多线程不友好,要用多进程或者协程
fengchang
2015-03-31 12:44:20 +08:00
1.写成每条保存一次就行了。运行的时候系统会给你做缓冲区的。
2.异常很简单的。外面套个try,然后except里忽略就行了。不用异常处理会变得更麻烦。
3.用多线程
4.区别不大,不过将来想挂在VPS上的话,还是得用Linux
shyangs
2015-03-31 12:49:44 +08:00
python的排版都被吃掉了,你不会贴到gist吗?
sujin190
2015-03-31 12:57:27 +08:00
@clino 其实如果网络io高的话也无所谓,下载的过程中是可以切换到另一个线程的
sujin190
2015-03-31 12:59:35 +08:00
多线程吧,异常的话其实很简单的,你仔细看下它的介绍,一下就会了,python的错误处理很依赖于异常
Kirscheis
2015-03-31 13:06:33 +08:00
python代码没有缩进几乎看不懂啊。。。
只是需要在有异常的时候忽略跳过的话,用try…except…finally…就可以了
tsingyi
2015-03-31 13:16:11 +08:00
你确认程序真正正常执行结束过么?
我发下你的递归是永远停不下了的哟~
话说,为什么这里要用递归啦?
yuewolf
2015-03-31 13:56:35 +08:00
@tsingyi 正常结束了的
没排版好的缘故吧。
这个是递归吗?呃哈哈,看来真是啊。
我开始的想法是:如果每条都读写一次,量大会影响硬盘,所以设置了个300一组。比如先判断 2000这个号到2300 这里有多少符合条件,然后一起写一次硬盘,看上面朋友的说法,应该是多虑了。
yuewolf
2015-03-31 13:58:04 +08:00
@shyangs gist 是什么?指github之类的吗?
我新手,抱歉哈,不会贴代码
Pastsong
2015-03-31 14:00:55 +08:00
@yuewolf https://gist.github.com/ 适用于贴代码片段
yuewolf
2015-03-31 14:05:16 +08:00
@fengchang 非常感谢您的指导!
yuewolf
2015-03-31 14:27:16 +08:00
@Pastsong 哈哈 确实很好用,贴好了。
kohnv
2015-03-31 19:35:27 +08:00
我觉得用argparse等命令解析的包, 直接在运行的时候指定你那些start_num等参数, 这样逼格高一点蛤蛤

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/180536

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX