當前位置: 妍妍網 > 碼農

Python網路爬蟲入門到精通:一站式教程

2024-06-28碼農

Python網路爬蟲入門到精通:一站式教程

1. 網路爬蟲的工作原理和合法性討論

網路爬蟲,亦稱網路蜘蛛或者網路機器人,是一種自動化程式,旨在透過互聯網收集數據。其工作原理可以概括為以下幾個步驟:

  1. 1. 發送請求 :爬蟲向目標網站發送HTTP請求,通常是GET請求。

  2. 2. 獲取響應 :伺服器接收到請求後返回HTML頁面作為響應。

  3. 3. 解析數據 :爬蟲解析HTML頁面,從中提取所需的數據。

  4. 4. 數據儲存 :最後,爬蟲將提取的數據儲存到本地檔、資料庫或其他儲存系統中。

合法性是一個不容忽視的話題。爬蟲活動需遵循相關法律法規和網站的 robots.txt 協定。 robots.txt 是網站管理員用於告知爬蟲哪些頁面可以抓取,哪些不可以。

合法性討論

爬蟲的合法性主要涉及以下幾個方面:

  • 網站政策 :許多網站在其服務條款中明確禁止未經授權的抓取行為。

  • 智慧財產權 :未經授權抓取並公開釋出他人網站上的內容可能會侵犯智慧財產權。

  • 私密保護 :抓取涉及個人數據時需遵守私密保護相關法律法規,如【通用數據保護條例】(GDPR)。

  • 2. Python中常用的爬蟲庫

    Python以其簡潔和強大的庫生態系,成為了網路爬蟲的首選語言。以下是一些常用的爬蟲庫:

    Requests

    Requests 是一個簡單易用的HTTP庫,用於發送HTTP請求和接收響應。它支持HTTP/1.1,並具有良好的cookie處理功能。以下是一個簡單的範例:

    import requestsresponse = requests.get('https://www.example.com')print(response.text)

    BeautifulSoup

    BeautifulSoup 是一個解析HTML和XML的庫。它可以從復雜的HTML文件中提取數據,並且支持多種解析器。下面是一個使用 BeautifulSoup 解析HTML的範例:

    from bs4 import BeautifulSouphtml_doc = """<html><head><title>The Dormouse's story</title></head><body><p class="title"><b>The Dormouse's story</b></p><p class="story">Once upon a time there were three little sisters; and their names were<ahref="http://example.com/elsie" class="sister"id="link1">Elsie</a>,<ahref="http://example.com/lacie" class="sister"id="link2">Lacie</a> and<ahref="http://example.com/tillie" class="sister"id="link3">Tillie</a>;and they lived at the bottom of a well.</p><p class="story">...</p>"""soup = BeautifulSoup(html_doc, 'html.parser')print(soup.prettify())

    Scrapy

    Scrapy 是一個強大的爬蟲框架,適用於構建和執行大規模的爬蟲。它提供了高效的數據抓取、處理和儲存功能。以下是一個簡單的Scrapy計畫範例:

    1. 1. 建立新計畫:

    scrapy startproject myproject

    1. 1. 定義爬蟲:

    import scrapy classMySpider(scrapy.Spider): name = 'myspider' start_urls = ['https://www.example.com']defparse(self, response):for title in response.css('title::text').getall():yield {'title': title}

    1. 1. 執行爬蟲:

    scrapy crawl myspider

    3. 案例學習:如何抓取和解析網頁數據

    範例:抓取豆瓣電影Top250

    以下是一個完整的範例,展示如何使用 Requests BeautifulSoup 抓取豆瓣電影Top250的標題和評分:

    import requestsfrom bs4 import BeautifulSoupurl = 'https://movie.douban.com/top250'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}response = requests.get(url, headers=headers)soup = BeautifulSoup(response.text, 'html.parser')movies = soup.find_all('div', class_='item')for movie in movies: title = movie.find('span', class_='title').text rating = movie.find('span', class_='rating_num').text print(f'{title}: {rating}')

    分析與解析

    在上述範例中,我們首先發送HTTP請求並獲取響應,然後使用 BeautifulSoup 解析HTML文件。透過尋找特定的HTML標簽和類名,我們可以提取所需的電影標題和評分資訊。

    4. 爬蟲的反反爬策略和數據儲存

    反爬策略

    許多網站采用各種反爬策略來保護其內容,常見的包括:

  • IP封禁 :檢測到頻繁存取時,封禁IP地址。

  • User-Agent檢測 :檢查請求頭中的 User-Agent 欄位,阻止非瀏覽器請求。

  • 驗證碼 :透過圖形驗證碼或其他形式的驗證阻止自動化請求。

  • 動態內容載入 :使用JavaScript動態載入內容,增加爬取難度。

  • 反反爬策略

    為了應對這些反爬措施,爬蟲開發者可以采取以下反反爬策略:

  • 使用代理IP :透過代理IP偽裝請求來源,避免IP封禁。

  • 隨機User-Agent :隨機選擇常見瀏覽器的 User-Agent ,模擬瀏覽器請求。

  • 模擬瀏覽器行為 :使用 Selenium 等工具模擬真實使用者的瀏覽器行為。

  • 處理驗證碼 :透過打碼平台或機器學習技術自動辨識驗證碼。

  • 數據儲存

    抓取的數據需要合理儲存,以便後續分析和使用。常見的數據儲存方式包括:

  • 檔儲存 :將數據儲存為CSV、JSON、TXT等格式的檔,便於檢視和分析。

  • 關系型資料庫 :如 MySQL PostgreSQL ,適合儲存結構化數據,支持復雜查詢。

  • NoSQL資料庫 :如 MongoDB Redis ,適合儲存非結構化數據,支持高並行存取。

  • 以下是一個將抓取數據儲存到 MySQL 資料庫的範例:

    import pymysqlconnection = pymysql.connect( host='localhost', user='user', password='password', database='database')cursor = connection.cursor()sql = "INSERT INTO movies (title, rating) VALUES (%s, %s)"values = ('The Shawshank Redemption', '9.3')cursor.execute(sql, values)connection.commit()cursor.close()connection.close()

    5. 動態網站的數據抓取技術

    隨著前端技術的發展,越來越多的網站采用 JavaScript 動態載入內容,傳統的靜態HTML解析方法難以應對。這時,我們可以使用 Selenium 等工具模擬瀏覽器行為,抓取動態內容。

    Selenium

    Selenium 是一個用於自動化測試Web應用程式的工具,可以模擬使用者操作瀏覽器。下面是一個使用 Selenium 抓取動態內容的範例:

    from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keys# 初始化瀏覽器驅動driver = webdriver.Chrome()# 開啟目標網站driver.get('https://www.example.com')# 等待頁面載入完成並抓取內容title = driver.find_element(By.TAG_NAME, 'title').textprint(title)# 關閉瀏覽器driver.quit()

    使用Selenium抓取動態內容

    以下是一個使用 Selenium 抓取豆瓣電影Top250的範例:

    from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.chrome.service import Servicefrom selenium.webdriver.chrome.options import Optionsfrom webdriver_manager.chrome import ChromeDriverManager# 配置Seleniumchrome_options = Options()chrome_options.add_argument("--headless") # 無頭模式chrome_options.add_argument("--disable-gpu")# 初始化瀏覽器驅動driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)# 開啟目標網站driver.get('https://movie.douban.com/top250')# 抓取電影標題和評分movies = driver.find_elements(By. class_NAME, 'item')for movie in movies: title = movie.find_element(By. class_NAME, 'title').text rating = movie.find_element(By. class_NAME, 'rating_num').text print(f'{title}: {rating}')# 關閉瀏覽器driver.quit()

    動態網站抓取的挑戰

    抓取動態內容面臨諸多挑戰,包括:

  • 效能問題 :模擬瀏覽器操作耗時較長,影響爬蟲效率。

  • 反爬機制 :動態網站也可能采用高級反爬機制,如瀏覽器指紋辨識、行為分析等。

  • 復雜互動 :某些內容需要使用者互動(如捲動、點選)才能載入,增加了抓取難度。

  • 為應對這些挑戰,開發者需要深入了解目標網站的載入機制,並結合實際需求選擇合適的抓取技術。

    結論

    透過本文,我們深入探討了 Python 網路爬蟲的工作原理、常用庫、案例學習、反反爬策略以及動態網站的數據抓取技術。網路爬蟲是一個強大的工具,可以幫助我們自動化地收集和分析海量數據,但同時也需要遵循相關法律法規,尊重他人的智慧財產權和私密。

    透過不斷實踐和探索,大家可以逐步掌握網路爬蟲的技巧,從而在數據分析、市場研究等領域發揮更大的作用。

    如果喜歡我的內容,不妨點贊關註,我們下次再見!

    大家註意:因為微信最近又改了推播機制,經常有小夥伴說錯過了之前被刪的文章,或者一些限時福利,錯過了就是錯過了。所以建議大家加個 星標 ,就能第一時間收到推播。

    點個喜歡支持我吧,點個 在看 就更好了