溫馨提示×

多線程python爬蟲代碼如何編寫

小樊
101
2024-12-12 05:56:46
欄目: 編程語言

編寫多線程Python爬蟲代碼需要使用Python的threading模塊。以下是一個簡單的多線程爬蟲示例,它從一個網站抓取所有鏈接。

首先,確保已經安裝了requestsbeautifulsoup4庫。如果沒有安裝,可以使用以下命令安裝:

pip install requests beautifulsoup4

然后,創建一個名為multithreaded_crawler.py的文件,并將以下代碼粘貼到文件中:

import threading
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin

# 爬取的網站URL
url = 'https://example.com'

# 存儲抓取的鏈接的列表
links = []

# 線程鎖,用于同步對鏈接列表的訪問
lock = threading.Lock()

def fetch(url):
    try:
        response = requests.get(url)
        response.raise_for_status()
    except requests.RequestException as e:
        print(f'Error fetching {url}: {e}')
        return

    soup = BeautifulSoup(response.text, 'html.parser')
    for link in soup.find_all('a'):
        href = link.get('href')
        if href:
            full_url = urljoin(url, href)
            with lock:
                links.append(full_url)

def main():
    threads = []

    # 創建線程并啟動爬蟲
    for _ in range(5):  # 創建5個線程
        thread = threading.Thread(target=fetch, args=(url,))
        thread.start()
        threads.append(thread)

    # 等待所有線程完成
    for thread in threads:
        thread.join()

    # 輸出抓取的鏈接
    print('Fetched links:')
    for link in links:
        print(link)

if __name__ == '__main__':
    main()

在這個示例中,我們創建了一個名為fetch的函數,它接受一個URL作為參數。這個函數使用requests庫獲取網頁內容,并使用BeautifulSoup解析HTML。然后,它查找所有的<a>標簽,提取href屬性的值,并將其添加到鏈接列表中。為了確保線程安全,我們使用了線程鎖來同步對鏈接列表的訪問。

main函數中,我們創建了5個線程,每個線程都會調用fetch函數。最后,我們等待所有線程完成,并輸出抓取的鏈接。

請注意,這個示例僅用于演示目的。在實際應用中,你可能需要根據目標網站的結構和爬蟲需求進行調整。同時,請確保遵守目標網站的爬蟲政策,以免違反法律法規。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女