求教一个python 爬虫程序

BarryChang 发布于 2015/01/30 15:57
阅读 476
收藏 0

现在我有10万个地址,以txt方式存储。需要用python将这些地址全部下载下来,具体的是:

按行读取txt文件,然后下载页面。

我现在是单线程的,然后用的是urllib.request.urlretrive。

求教各位大神如何改成多线程,因为还有读取文件,所以比较头疼。

加载中
0
疯狂的小企鹅
疯狂的小企鹅

存到一个queue中去。代码大概这样:

#coding:utf-8
from threading import Thread
from Queue import Queue
from time import sleep
from random import randint

queue = Queue(100)

def read_url():
    for i in xrange(1000000):
        queue.put(i)

def down_url():
    while True:
        url = queue.get()
        sleep(randint(1,4))
        print '{url}下载完成'.format(url=url)

def main():
    Thread(target = read_url).start()
    for i in range(50):
        Thread(target = down_url).start()

if __name__ == "__main__":
    main()

疯狂的小企鹅
疯狂的小企鹅
回复 @BarryChang : 关键代码给我看一下吗?
BarryChang
BarryChang
回复 @疯狂的小企鹅 : 不好意思,我再能再问一个问题吗?我的程序总是出现 “[WinError 10053] 你的主机中的软件中止了一个已建立的连接。” 这个错误,我用浏览器没问题,但是为什么爬虫不行??
BarryChang
BarryChang
回复 @疯狂的小企鹅 : 谢谢你!
疯狂的小企鹅
疯狂的小企鹅
回复 @BarryChang : 这可能跟服务端做一些限制连接数或者说对请求时间做限制,都有可能。适量减少点线程,加点sleep。不要访问过于频繁
BarryChang
BarryChang
回复 @疯狂的小企鹅 : 大神,我又出现了问题,我现在成功多线程下载网页了,但是我发现总是出现服务器强制关闭连接或者是尝试连接失败,是不是因为我没有做header伪造或者是没有停顿时间,求教
下一页
0
Altman
Altman
py多线程有意义?
BarryChang
BarryChang
下载速度快啊
返回顶部
顶部