python 多线程 访问网站
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 多线程 访问网站相关的知识,希望对你有一定的参考价值。
1. 打开一个文件(网站列表,有成千上万的url),从中读取链接;
2. 通过 多线程和队列 依次去访问这些链接;
3. 对返回的内容不做处理;
说白了,就是:python 多线程 访问网站
能给代码最好,我参考一下。
#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 多线程 访问网站的主要内容,如果未能解决你的问题,请参考以下文章