python Pool进程池爬虫
import requests
from multiprocessing import Pool
from urllib.parse import urljoin
from bs4 import BeautifulSoup
def get_links(url):
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
return [urljoin(url, link['href']) for link in soup.find_all('a') if link.get('href')]
return []
def crawl(url):
print(f"Crawling: {url}")
try:
links = get_links(url)
for link in links:
print(link)
# 这里可以添加保存链接的代码
except Exception as e:
print(f"Error crawling {url}: {e}")
def main():
seed_url = 'http://example.com'
pool = Pool(processes=4) # 可以根据CPU核心数调整进程数
pool.apply_async(crawl, (seed_url,)) # 使用 apply_async 方法异步执行
pool.close() # 关闭进程池,不再接受新的任务
pool.join() # 等待所有进程执行完成
if __name__ == '__main__':
main()
这段代码使用了Python的multiprocessing.Pool
来实现进程池异步爬取网页链接。crawl
函数负责爬取指定URL的链接,并打印出来。main
函数则设置了进程池,并向其中添加了爬取任务。这个例子展示了如何使用进程池来提高爬虫的运行效率。
评论已关闭