Python爬虫编程思想(143):项目实战:多线程和多进程爬虫
蒙娜丽宁 于 2022-05-09 22: 2022-5-9 22:21:12 Author: blog.csdn.net(查看原文) 阅读量:8 收藏

蒙娜丽宁 于 2022-05-09 22:21:12 发布 1462 收藏

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

153 篇文章 24 订阅 ¥29.90 ¥99.00

         首先来学习使用多线程实现爬虫,这个案例抓取了豆瓣音乐Top250排行榜,只是本例去除去了将提取的结果保存为文件的功能,仅仅将提取的结果输出到Console上。本例使用了4个线程同时抓取不同的页面,并进行分析。

        本例创建了一个存储URL的池,就是一个列表。获取这个列表中URL的工作由get_url函数完成,该函数通过线程锁进行了同步。由于在获取URL后,会将这个URL从列表中删除,所以在多线程环境下必须对这个列表进行同步,否则可能会产生脏数据,也就是说,可能会造成多个线程获取了同一个URL。

import threading
import datetime
import requests
from bs4 import BeautifulSoup
import re
import time
# 记录开始时间
starttime = datetime.datetime.now()
# 创建线程锁
lock = threading.Lock()
# 从URL列表中获取URL,这是一个同步函数
def get_url():
    global urls
    # 获取URL之前,加锁  
    lock.acquire()
    if len(urls) == 0:
        lock.release()
        return ""
    else:
        url = urls[0]
        # 提取一个URL后,将这个URL从列表中删除
        del urls[0]
    
    # 完成工作后,释放锁
    lock.release()
    return url
headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel M

文章来源: https://blog.csdn.net/nokiaguy/article/details/124676867
如有侵权请联系:admin#unsafe.sh