Python 爬蟲開發

文章目錄

  • 1. 常用庫安裝
  • 2. 基礎爬蟲開發
    • 2.1. 使用 requests 獲取網頁內容
    • 2.2. 使用 BeautifulSoup 解析 HTML
    • 2.3. 處理登錄與會話
  • 3. 進階爬蟲開發
    • 3.1. 處理動態加載內容(Selenium)
    • 3.2. 使用Scrapy框架
    • 3.3. 分布式爬蟲(Scrapy-Redis)
  • 4. 爬蟲優化與反反爬策略
    • 4.1. 常見反爬機制及應對
    • 4.2. 代理IP使用示例
    • 4.3. 隨機延遲與請求頭

BeautifulSoup 官方文檔
https://beautifulsoup.readthedocs.io/zh-cn/v4.4.0/
https://cloud.tencent.com/developer/article/1193258
https://blog.csdn.net/zcs2312852665/article/details/144804553

參考:
https://blog.51cto.com/haiyongblog/13806452

1. 常用庫安裝

pip install requests beautifulsoup4 scrapy selenium pandas

2. 基礎爬蟲開發

2.1. 使用 requests 獲取網頁內容

import requestsurl = 'https://top.baidu.com/board?tab=realtime'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}response = requests.get(url, headers=headers)
print(response.status_code)     # 200表示成功
print(response.text[:500])      # 打印前500個字符

在這里插入圖片描述

2.2. 使用 BeautifulSoup 解析 HTML

from bs4 import BeautifulSouphtml_doc = """<html><head><title>測試頁面</title></head><body><p class="title"><b>示例網站</b></p><p class="story">這是一個示例頁面<a href="http://example.com/1" class="link" id="link1">鏈接1</a><a href="http://example.com/2" class="link" id="link2">鏈接2</a></p>"""soup = BeautifulSoup(html_doc, 'html.parser')# 獲取標題
print(soup.title.string)# 獲取所有鏈接
for link in soup.find_all('a'):print(link.get('href'), link.string)# 通過CSS類查找
print(soup.find('p', class_='title').text)

2.3. 處理登錄與會話

import requestslogin_url = 'https://example.com/login'
target_url = 'https://example.com/dashboard'session = requests.Session()# 登錄請求
login_data = {'username': 'your_username','password': 'your_password'
}response = session.post(login_url, data=login_data)if response.status_code == 200:# 訪問需要登錄的頁面dashboard = session.get(target_url)print(dashboard.text)
else:print('登錄失敗')

3. 進階爬蟲開發

3.1. 處理動態加載內容(Selenium)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager# 設置無頭瀏覽器
options = webdriver.ChromeOptions()
options.add_argument('--headless')  # 無界面模式
options.add_argument('--disable-gpu')# 自動下載chromedriver
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)url = 'https://dynamic-website.com'
driver.get(url)# 等待元素加載(隱式等待)
driver.implicitly_wait(10)# 獲取動態內容
dynamic_content = driver.find_element(By.CLASS_NAME, 'dynamic-content')
print(dynamic_content.text)driver.quit()

3.2. 使用Scrapy框架

# 創建Scrapy項目
# scrapy startproject example_project
# cd example_project
# scrapy genspider example example.com# 示例spider代碼
import scrapyclass ExampleSpider(scrapy.Spider):name = 'example'allowed_domains = ['example.com']start_urls = ['http://example.com/']def parse(self, response):# 提取數據title = response.css('title::text').get()links = response.css('a::attr(href)').getall()yield {'title': title,'links': links}# 運行爬蟲
# scrapy crawl example -o output.json

3.3. 分布式爬蟲(Scrapy-Redis)

# settings.py配置
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
REDIS_URL = 'redis://localhost:6379'# spider代碼
from scrapy_redis.spiders import RedisSpiderclass MyDistributedSpider(RedisSpider):name = 'distributed_spider'redis_key = 'spider:start_urls'def parse(self, response):# 解析邏輯pass

4. 爬蟲優化與反反爬策略

4.1. 常見反爬機制及應對

User-Agent檢測 :隨機切換User-Agent
IP限制:使用代理IP池
驗證碼:OCR識別或打碼平臺
行為分析:模擬人類操作間隔
JavaScript渲染:使用Selenium或Pyppeteer

4.2. 代理IP使用示例

import requestsproxies = {'http': 'http://proxy_ip:port','https': 'https://proxy_ip:port'
}try:response = requests.get('https://example.com', proxies=proxies, timeout=5)print(response.text)
except Exception as e:print(f'請求失敗: {e}')

4.3. 隨機延遲與請求頭

import random
import time
import requests
from fake_useragent import UserAgentua = UserAgent()def random_delay():time.sleep(random.uniform(0.5, 2.5))def get_with_random_headers(url):headers = {'User-Agent': ua.random,'Accept-Language': 'en-US,en;q=0.5','Referer': 'https://www.google.com/'}random_delay()return requests.get(url, headers=headers)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/81436.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81436.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81436.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

為什么需要清除浮動?清除浮動的方式有哪些?

導語: 在前端面試中,“清除浮動”幾乎是每位面試官都會問到的基礎題。雖然浮動已經不如 Flex 和 Grid 那么常用了,但它在許多老項目中仍然占有一席之地。理解浮動的機制、掌握清除浮動的方式,是面試中體現你前端基礎扎實度的關鍵點。 一、面試主題概述 浮動(float)最初是…

一鍵啟動多個 Chrome 實例并自動清理的 Bash 腳本分享!

目錄 一、&#x1f4e6; 腳本功能概覽 二、&#x1f4dc; 腳本代碼一覽 三、&#x1f50d; 腳本功能說明 &#xff08;一&#xff09;? 支持批量啟動多個 Chrome 實例 &#xff08;二&#xff09;? 每個實例使用獨立用戶數據目錄 &#xff08;三&#xff09;? 啟動后自…

2025.05.26【Wordcloud】詞云圖繪制技巧

Most basic See what input file is needed to build this basic wordcloud. Text analysis A text analysis by Benjamin Tovarcis for document classification. 文章目錄 Most basicText analysis 探索詞云圖的奧秘什么是詞云圖&#xff1f;為什么使用詞云圖&#xff1f;如…

RuoYi前后端分離框架集成UEditorPlus富文本編輯器

一、背景 采用若依框架搭建了一個小型的電子書項目,項目前端、后端、移動端就一人,電子書的章節內容是以富文本內容進行呈現的,產品設計人員直接給了一個第三方收費的富文本編輯器截圖放到開發文檔中,提了一沓需求點,概況下來就是要做成下圖中的樣子。作為一個后端開發人…

ETL 工具與數據中臺的關系與區別

ETL 工具和數據中臺作為數據處理領域的關鍵概念&#xff0c;雖然存在一定的關聯&#xff0c;但二者有著明顯的區別。本文將深入剖析 ETL 工具與數據中臺之不同。 一、ETL 工具概述 ETL 是數據倉庫技術中的核心技術之一&#xff0c;其全稱為 Extract&#xff08;抽取&#xff…

Redis(四) - 使用Python操作Redis詳解

文章目錄 前言一、下載Python插件二、創建項目三、安裝 redis 庫四、新建python軟件包五、鍵操作六、字符串操作七、列表操作八、集合操作九、哈希表操作十、有序集合操作十一、完整代碼1. 完整代碼2. 項目下載 前言 本文是基于 Python 操作 Redis 數據庫的實戰指南&#xff0…

xdvipdfmx:fatal: File ended prematurely. No output PDF file written.

今天忽然遇到&#xff1a;使用xelatex或lualatex編譯&#xff0c;一直卡住&#xff0c;不報錯&#xff0c;也無法生成PDF&#xff0c;主動停止編譯后就報錯 xdvipdfmx:fatal: File ended prematurely. No output PDF file written. 然后&#xff0c;之前能正常編譯的一些文件…

解鎖未來AI:使用DACA模式和Agentic技術提高開發效率

學習Agentic AI:Dapr Agentic Cloud Ascent (DACA)設計模式的應用與演進 背景介紹 近年來,Agentic AI(代理型人工智能)的概念在學術界和產業界掀起了一陣熱潮。Agentic AI指的是能夠自主感知、決策和行動的智能體系統,它們不僅改變了我們與技術互動的方式,也為行業發展…

Jenkins+Docker+Harbor快速部署Spring Boot項目詳解

JenkinsDockerHarbor快速部署Spring Boot項目詳解 Jenkins、Docker和Harbor是現代DevOps流程中的核心工具&#xff0c;結合使用可以實現自動化構建、測試和部署。下面我將詳細介紹如何搭建這個集成環境。 一、各工具的核心作用 Jenkins 自動化CI/CD工具&#xff0c;負責拉取代…

第12次04 :首頁展示用戶名

登錄后&#xff0c;跳轉到首頁&#xff0c;首頁會展示用戶名&#xff1b;未登錄時&#xff0c;首頁將展示登錄與注冊的選項。 第一步&#xff1a;index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml…

Flask 路由跳轉機制:url_for生成動態URL、redirect頁面重定向

在 Flask 開發中&#xff0c;url_for() 與 redirect() 是實現路由跳轉邏輯的核心工具。 url_for()負責安全、靈活地生成 URL。 redirect()負責發起重定向響應。 1、url_for()&#xff1a;生成URL url_for(endpoint, **values) 是 Flask 提供的 URL 構造工具&#xff0c;可根據…

華為OD機試真題——構成正方形的數量(2025B卷:100分)Java/python/JavaScript/C++/C/GO六種最佳實現

2025 B卷 100分 題型 本文涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、測試用例以及綜合分析; 并提供Java、python、JavaScript、C++、C語言、GO六種語言的最佳實現方式! 本文收錄于專欄:《2025華為OD真題目錄+全流程解析/備考攻略/經驗分享》 華為OD機試真題《構成…

FFMPEG-AAC編碼

一、流程圖 二、代碼解釋 avcodec_find_encoder: 根據指定的AVCodecID查找注冊的編碼器。avcodec_alloc_context3: 為AVCodecContext分配內存。()avcodec_open2: 打開編碼器。avcodec_send_frame: 將AVFrame?壓縮數據給編碼器。avcodec_receive_packet: 獲取到編碼后的…

RPC 協議詳解、案例分析與應用場景

一、RPC 協議原理詳解 RPC 協議的核心目標是讓開發者像調用本地函數一樣調用遠程服務&#xff0c;其實現過程涉及多個關鍵組件與流程。 &#xff08;一&#xff09;核心組件 客戶端&#xff08;Client&#xff09;&#xff1a;發起遠程過程調用的一方&#xff0c;它并不關心調…

Docker基礎 -- Ubuntu 22.04 AArch64 交叉編譯 Docker 鏡像構建指南

Ubuntu 22.04 AArch64 交叉編譯 Docker 鏡像構建指南 作者&#xff1a; &#xff08;填寫作者&#xff09; 發布日期&#xff1a; 2025?05?26 1 背景與目標 在企業內網&#xff08;需要代理&#xff09;環境下&#xff0c;我們需要一套可靠、可復用的 Ubuntu 22.04 交叉編…

【ISP算法精粹】ISP算法管線的預處理算法有哪些?

1. ISP預處理算法有哪些&#xff1f; 在圖像信號處理&#xff08;ISP&#xff09;流程中&#xff0c;預處理階段主要針對圖像傳感器&#xff08;如CMOS/CCD&#xff09;輸出的原始圖像數據&#xff08;通常為拜耳格式的RAW圖像&#xff09;進行初步處理&#xff0c;以校正硬件…

華為OD機試真題——字符串加密 (2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳實現

2025 B卷 100分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

視頻存儲開源方案

項目成熟度 GitHub - ceph/ceph: Ceph is a distributed object, block, and file storage platform GitHub - minio/minio: MinIO is a high-performance, S3 compatible object store, open sourced under GNU AGPLv3 license. GitHub - seaweedfs/seaweedfs: SeaweedFS i…

典型城市工況數據(Drive Cycle)用于車輛仿真

典型城市工況數據&#xff08;Drive Cycle&#xff09;用于車輛仿真 在車輛仿真過程中&#xff0c;使用典型的城市工況數據&#xff08;Drive Cycle&#xff09;是評估車輛性能、能耗和排放的關鍵步驟。以下是一些常用的典型城市工況數據及其來源&#xff0c;這些數據可以幫助…

深度解析新能源汽車結構與工作原理

一、核心系統架構 新能源汽車主要由三大核心系統構成&#xff1a; 電力驅動系統&#xff1a;包含永磁同步電機、電機控制器&#xff08;MCU&#xff09;及減速器&#xff0c;采用三合一集成設計實現輕量化。永磁同步電機通過電磁感應原理將電能轉化為機械能&#xff0c;其效率可…