python 多线程 访问网站

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 多线程 访问网站相关的知识,希望对你有一定的参考价值。

1. 打开一个文件(网站列表,有成千上万的url),从中读取链接;
2. 通过 多线程和队列 依次去访问这些链接;
3. 对返回的内容不做处理;
说白了,就是:python 多线程 访问网站
能给代码最好,我参考一下。

参考技术A #python2
#coding=utf-8
import os,re,requests,sys,time,threading
reload(sys)
sys.setdefaultencoding('utf-8')

class Archives(object):
    def __init__(self, url):
        self.url = url
    
    def save_html(self, text):
        fn = '_'.format(int(time.time()), self.url.split('/')[-1])
        dirname = 'htmls'
        if not os.path.exists(dirname):
            os.mkdir(dirname)
        with open(os.path.join(dirname, fn), 'w') as f:
            f.write(text)
            
    def get_htmls(self):
        try:              
            r =  requests.get(self.url)
            r.raise_for_status()
            r.encoding = r.apparent_encoding
            print 'get html from ', url
            self.save_html(r.text)
        except Exception,e:
            print '爬取失败',e            

    def main(self):
        thread = threading.Thread(target=self.get_htmls())
        thread.start()
        thread.join()

if __name__=='__main__':
    start=time.time()
    fn = sys.argv[1] if len(sys.argv)>1 else 'urls.txt'
    with open(fn) as f:
        s = f.readlines()
    for url in set(s):
        a=Archives(url.strip())
        a.main()    
    end=time.time()
    print end-start

追问

这个程序,假如有30万条url,会创建30万个线程来运行?
然后等待访问完成一个url,关闭一个线程?

追答

tomorrow库确实很不错,不过爬虫有专门的scrapy库,30万条url用scrapy来抓取的话,只需要就行代码就够了。具体代码就不写了,你要是有兴趣的,自己看scrapy的教程吧

以上是关于python 多线程 访问网站的主要内容,如果未能解决你的问题,请参考以下文章

请教一个问题,怎么提高 python 爬虫的爬取效率

如何处理python爬虫ip被封

使用线程池多线程爬取链接,检验链接正确性

C# Winform项目中多线程环境下, 如何跨线程对Window窗体控件进行安全访问?

python:多线程爬虫(美女照片)

如何下载整个网站的图片(只能通过网址访问,无超链接)