在Python中实现基于代理IP的多线程网络爬虫的方法

2023-04-17 00:00:00 爬虫 多线程 代理

以下是一个基于代理IP的多线程网络爬虫的示例代码:

import requests
import threading
import queue

# 设置代理IP
proxies = {
    "http": "http://127.0.0.1:8888",
    "https": "https://127.0.0.1:8888"
}

# 设置要爬取的URL列表
urls = [
    "https://www.pidancode.com",
    "https://www.pidancode.com/page1",
    "https://www.pidancode.com/page2",
    "https://www.pidancode.com/page3",
    "https://www.pidancode.com/page4",
    "https://www.pidancode.com/page5"
]

# 设置线程数和队列
thread_count = 4
work_queue = queue.Queue()

# 将所有URL放入队列
for url in urls:
    work_queue.put(url)

# 定义爬取函数
def crawl():
    while True:
        url = work_queue.get()
        try:
            # 使用代理IP发起请求
            response = requests.get(url, proxies=proxies)
            print(response.text)
        except Exception as e:
            print("Error: ", e)
        finally:
            work_queue.task_done()

# 创建线程池并启动线程
for i in range(thread_count):
    t = threading.Thread(target=crawl)
    t.daemon = True
    t.start()

# 等待队列中的所有任务完成
work_queue.join()

print("All tasks are done.")

在这个示例代码中,我们首先定义了要爬取的URL列表和使用的代理IP。然后,我们设置了一个工作队列,将所有要爬取的URL放入队列中。接着,我们定义了一个爬取函数,每个线程从队列中获取URL并使用代理IP发起请求,然后将响应内容输出。最后,我们创建了线程池,并等待队列中的所有任务完成。

这个示例代码中使用的代理IP是本地代理,如果需要使用真实的代理IP,请自行替换。另外,这个示例代码中并没有对获取到的响应进行任何处理,实际应用中可能需要根据需要进行处理和解析。

相关文章