一、網絡爬蟲介紹
網絡爬蟲(Web Crawler)是一種自動抓取互聯網信息的程序,它能夠高效地從海量網頁中提取有價值的數據。作為數據采集的利器,爬蟲技術在數據分析、搜索引擎、價格監控等領域有著廣泛應用。本文將帶你全面了解Python網絡爬蟲的開發。
robots.txt規則
robots.txt 是網站與網絡爬蟲溝通的標準協議文件,它規定了哪些內容可以被爬取,哪些應該被禁止。作為爬蟲開發者,理解并遵守 robots.txt 規則是合法合規爬取的基礎。
通過在網站后加上robots.txt就可以查看當前網站的robots規則
完全開放
User-agent: * Disallow:
完全禁止
User-agent: * Disallow: /
部分限制
User-agent: * Disallow: /admin/ Disallow: /private/ Allow: /public/ Crawl-delay: 2
針對特定爬蟲
User-agent: Googlebot Disallow: /nogoogle/ User-agent: * Disallow: /noothers/
掌握robots.txt規則是每個爬蟲開發者的必修課。通過合理遵守這些規則,我們既能獲取所需數據,又能維護良好的網絡生態。記住,負責任的爬蟲開發是技術可持續發展的基礎。
二、requests庫?
requests 是 Python 中最流行的 HTTP 客戶端庫,以其簡潔優雅的 API 設計著稱。本文將全面介紹 requests 庫的使用方法和最佳實踐。
1、安裝requests庫
在開始之前,確保你已經安裝了requests庫。如果尚未安裝,可以通過pip輕松安裝:
pip install requests -i?https://pypi.tuna.tsinghua.edu.cn/simple
2、網頁的源代碼
如果通常我們想獲取網頁的內容我們是查看頁面里的內容,但是我們使用代碼去獲取資源時就需要用到網頁的源代碼。
我們通過右擊網頁空白處點擊查看源代碼選項
但是通過這種方法無法獲得全部信息,通過JavaScript腳本語言可以查看更多信息。
點擊檢查選項可以查看到腳本代碼
3、獲取網頁資源
- get()函數
requests.get(url, params=None, **kwargs)
url | 請求的 URL(必需) |
params | 查詢參數字典或字節序列,會自動附加到 URL |
**kwargs | 其他可選參數(headers, timeout, auth 等) |
?
import requestsresponse = requests.get('https://api.github.com')
print(response.status_code) # 打印狀態碼
print(response.text) # 打印響應內容
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url) # 查看實際請求的URL
response.status_code | HTTP 狀態碼 |
response.text | 響應內容(字符串形式) |
response.content | 響應內容(字節形式) |
response.json() | 將 JSON 響應解析為 Python 對象 |
response.headers | 響應頭字典 |
response.cookies | 響應 cookies |
response.elapsed | 請求耗時 |
response.raise_for_status() | 如果請求失敗(狀態碼非200),拋出異常 |
- post()函數
requests.post(url, data=None, json=None, **kwargs)
參數 | 說明 |
---|---|
url | 請求的目標 URL(必需) |
data | 表單數據(字典、字節或文件對象) |
json | JSON 可序列化的 Python 對象 |
**kwargs | 其他可選參數(headers, files, auth 等) |
import requestspayload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://httpbin.org/post', data=payload)print(response.status_code)
print(response.json()) # 查看服務器返回的JSON響應
?三、selenium庫
Selenium 是一個能讓你「用代碼操作瀏覽器」的開源工具。
常見用途:
-
自動化功能測試
-
重復性任務腳本(搶票、簽到、填表)
-
抓取需要執行 JS 的頁面數據
1、環境搭建
-
安裝 Python(https://www.python.org 下載 3.7+)。
-
安裝 Selenium?
pip install selenium ?-i?https://pypi.tuna.tsinghua.edu.cn/simple
-
Chrome內核的瀏覽器
Chrome 驅動鏡像:CNPM Binaries Mirror-
把解壓后的
chromedriver.exe
放到
– 任意目錄,并記錄路徑;或
– 直接丟進 Python 安裝目錄的Scripts
文件夾(已在系統 Path 中)。
-
? ? ? ? ? ? ?2.驗證:命令行輸入 chromedriver
不報錯就 OK。
? ? ? 4.?Edge內核的瀏覽器
-
訪問官方鏡像:Microsoft Edge WebDriver | Microsoft Edge Developer
-
驅動版本必須與 Edge 瀏覽器版本一致。
-
下載后解壓,得到
msedgedriver.exe
(建議重命名為edgedriver.exe
方便記憶)。
在瀏覽器的關于瀏覽器選項就可以看到瀏覽器的內核版本、
?2、驅動瀏覽器
在selenium庫中通過以下代碼可以查看支持的瀏覽器類型
webdriver.瀏覽器類型名()
?通過以上方法我們也可以加載瀏覽器的驅動使用形式如下如下
webdriver.瀏覽器類型名(
executable_path,options,service,keep_alive
)
executable_path | 指定驅動路徑 | webdriver.Chrome(executable_path='chromedriver.exe') | ||
options | 瀏覽器選項對象 | webdriver.Chrome(options=chrome_options) | ||
service | 驅動服務配置 | webdriver.Chrome(service=service) | ||
keep_alive | 保持連接 | webdriver.Chrome(keep_alive=True) | ||
服務配置參數
from selenium import webdriver# 基本初始化
driver = webdriver.Chrome()# 帶選項初始化
from selenium.webdriver.chrome.options import Optionschrome_options = Options()
chrome_options.add_argument('--headless') # 無頭模式
chrome_options.add_argument('--disable-gpu') # 禁用GPU加速
chrome_options.add_argument('--window-size=1920x1080') # 設置窗口大小driver = webdriver.Chrome(options=chrome_options)
?通過以下方法就可以的讀取瀏覽器內容
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time# 方案 A:驅動已加入 PATH
driver = webdriver.Edge()# 方案 B:手動指定驅動路徑(取消下一行注釋)
# driver = webdriver.Edge(executable_path=r"C:\path\to\edgedriver.exe")driver.get("https://www.baidu.com")
driver.find_element(By.ID, "kw").send_keys("Edge Selenium", Keys.RETURN)
time.sleep(3)
driver.save_screenshot("baidu_result.png")
driver.quit()
send_keys()
?是 Selenium WebDriver 中用于向網頁元素輸入內容的核心方法,主要用于文本框、文本域等可輸入元素的交互操作。
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
driver.get("https://www.example.com/login")# 定位用戶名輸入框并輸入文本
username = driver.find_element(By.ID, "username")
username.send_keys("testuser")# 定位密碼輸入框并輸入文本
password = driver.find_element(By.NAME, "password")
password.send_keys("securepassword123")
?
from selenium.webdriver.common.keys import Keyssearch_box = driver.find_element(By.NAME, "q")
search_box.send_keys("selenium") # 輸入文本
search_box.send_keys(Keys.RETURN) # 模擬回車鍵
Keys.RETURN | 回車鍵 | element.send_keys(Keys.RETURN) |
Keys.TAB | Tab鍵 | element.send_keys(Keys.TAB) |
Keys.ESCAPE | Esc鍵 | element.send_keys(Keys.ESCAPE) |
Keys.BACK_SPACE | 退格鍵 | element.send_keys(Keys.BACK_SPACE) |
Keys.CONTROL | Ctrl鍵 | element.send_keys(Keys.CONTROL + 'a') |
Keys.SHIFT | Shift鍵 | element.send_keys(Keys.SHIFT + 'hello') |
Keys.ARROW_UP | 上箭頭 | element.send_keys(Keys.ARROW_UP) |
?