目录
一、提升爬虫的速度
爬虫可以从获取网页、解析网页、存储数据来实现一些基本的。现在记录一些进阶部分:提升爬虫速度,主要有3中方法:多线程爬虫、多进程爬虫、多协程爬虫。对比普通单线程爬虫,使用这3种方法爬虫的速度能成倍的提升。
二、并发和并行
并发是指在一段时间内发生的若干时间的情况
并行是值在同一时刻发生若干事件的情况
三、同步和异步
同步就是并发并行的各个任务不是独自运行的,任务之间有一定交替顺序,像接力赛一样。
异步就是并发和并行的各个任务独立运行互不干扰。每个任务都不在同一个赛道上面跑步的速度不受其他选手影响
四、多线程爬虫
多线程爬虫是以并发的方式执行的。也就是说,多线程并不能真正的同时执行,而是通过进程的快速切换加快网络爬虫的速度的。
在操作IO的时候使用多线程可以提升程序执行效率
五、简单单线程爬虫
link_list = []
with open(r'C:\Users\K1567\Desktop\alexa.txt', 'r') as file:
file_list = file.readlines()
for e in file_list:
link = e.split('\t')[1]
link = link.replace('\n', '')
link_list.append(link)
stat = time.time()
for e in link_list:
try:
r = requests.get(e)
print(r.status_code, e)
except Exception as erro:
print('Error:', erro)
end = time.time()
print('串行的总时长为:', end - stat)
多线程
python两种使用多线程的方法。
函数式:调用_thread模块中的start_new_thread()
类包装式:调用Threading库创建线程,从threading.thread继承。
# 为线程定义一个函数
def print_time(threadName, delay):
count = 0
while count < 3:
time.sleep(delay)
count += 1
print(threadName, time.ctime())
# _thread.start_new_thread(print_time, ("Thread-1", 1))
# _thread.start_new_thread(print_time, ("Thread-2", 2))
# print("Main Finished")
class myThread(threading.Thread):
def __init__(self, name, delay):
threading.Thread.__init__(self)
self.name = name
self.delay = delay
def run(self):
print("Starting" + self.name)
print_time(self.name, self.delay)
print("Exiting" + self.name)
def print_time(threadName, delay):
counter = 0
<