python 编写多线程爬虫的简单范例

2023-02-27 00:00:00 爬虫 多线程 范例

使用多线程来实现爬虫可以提高爬取数据的效率,下面是一个简单的示例代码:

python
Copy code
import threading
import requests
from queue import Queue

定义线程数量和线程池

THREAD_NUM = 10
thread_pool = []

定义爬虫函数

def spider(q):
while not q.empty():
url = q.get()
try:
res = requests.get(url)
print(f"Got response {res.status_code} from {url}")
except:
print(f"Failed to get response from {url}")
q.task_done()

定义主函数

def main():
# 定义任务队列
urls = ["https://www.baidu.com", "https://www.google.com", "https://www.github.com"]
task_queue = Queue()
for url in urls:
task_queue.put(url)

# 创建线程池
for i in range(THREAD_NUM):
    t = threading.Thread(target=spider, args=(task_queue,))
    thread_pool.append(t)
    t.start()

# 等待所有任务执行完毕
for t in thread_pool:
    t.join()

if name == "main":
main()
在上面的示例代码中,我们首先定义了线程数量和线程池,然后定义了爬虫函数spider和主函数main。在spider函数中,我们从任务队列中获取任务url,然后使用requests库发送请求并获取响应,最后输出响应状态码和url。在主函数中,我们创建任务队列并向其中添加任务url,然后创建线程池并启动多个线程同时执行爬虫任务。最后,我们等待所有线程执行完毕。

需要注意的是,在使用多线程爬虫时,需要注意线程之间的数据安全和线程同步问题,以及避免爬虫速度过快导致被网站屏蔽等问题。同时,也需要根据具体的应用场景和需求来调整线程数量和线程池的大小,以达到最佳的爬虫效率。

相关文章