python 常用的6個爬蟲第三方庫

Python中有非常多用于網絡數據采集的庫,功能非常強大,有的用于抓取網頁,有的用于解析網頁,這里介紹6個最常用的庫。

1. BeautifulSoup

BeautifulSoup是最常用的Python網頁解析庫之一,可將 HTML 和 XML 文檔解析為樹形結構,能更方便地識別和提取數據。

BeautifulSoup可以自動將輸入文檔轉換為 Unicode,將輸出文檔轉換為 UTF-8。此外,你還可以設置 BeautifulSoup 掃描整個解析頁面,識別所有重復的數據(例如,查找文檔中的所有鏈接),只需幾行代碼就能自動檢測特殊字符等編碼。

from bs4 import BeautifulSoup  # 假設這是我們從某個網頁獲取的HTML內容(這里直接以字符串形式給出)  
html_content = """  
<html>  
<head>  <title>示例網頁</title>  
</head>  
<body>  <h1>歡迎來到BeautifulSoup示例</h1>  <p class="introduction">這是一個關于BeautifulSoup的簡單示例。</p>  <a href="https://www.example.com/about" class="link">關于我們</a>  
</body>  
</html>  
"""  # 使用BeautifulSoup解析HTML內容,這里默認使用Python的html.parser作為解析器  
# 你也可以指定其他解析器,如'lxml'或'html5lib',但需要先安裝它們  
soup = BeautifulSoup(html_content, 'html.parser')  # 提取并打印<title>標簽的文本內容  
print("網頁標題:", soup.title.string)  # 網頁標題: 示例網頁  # 提取并打印<p>標簽的文本內容,這里使用class屬性來定位  
print("介紹內容:", soup.find('p', class_='introduction').string)  # 介紹內容: 這是一個關于BeautifulSoup的簡單示例。  # 提取并打印<a>標簽的href屬性和文本內容  
link = soup.find('a', class_='link')  
print("鏈接地址:", link['href'])  # 鏈接地址: https://www.example.com/about  
print("鏈接文本:", link.string)  # 鏈接文本: 關于我們  # 注意:如果HTML內容中包含多個相同條件的標簽,你可以使用find_all()來獲取它們的一個列表  
# 例如,要獲取所有<a>標簽的href屬性,可以這樣做:  
all_links = [a['href'] for a in soup.find_all('a')]  
print("所有鏈接地址:", all_links)  # 假設HTML中有多個<a>標簽,這里將列出它們的href屬性  
# 注意:上面的all_links列表在當前的HTML內容中只有一個元素,因為只有一個<a>標簽

2.?Scrapy

Scrapy是一個流行的高級爬蟲框架,可快速高效地抓取網站并從其頁面中提取結構化數據。

由于 Scrapy 主要用于構建復雜的爬蟲項目,并且它通常與項目文件結構一起使用

Scrapy 不僅僅是一個庫,還可以用于各種任務,包括監控、自動測試和數據挖掘。這個 Python 庫包含一個內置的選擇器(Selectors)功能,可以快速異步處理請求并從網站中提取數據。

# 假設這個文件名為 my_spider.py,但它實際上應該放在 Scrapy 項目的 spiders 文件夾中  import scrapy  class MySpider(scrapy.Spider):  # Spider 的名稱,必須是唯一的  name = 'example_spider'  # 允許爬取的域名列表(可選)  # allowed_domains = ['example.com']  # 起始 URL 列表  start_urls = [  'http://example.com/',  ]  def parse(self, response):  # 這個方法用于處理每個響應  # 例如,我們可以提取網頁的標題  title = response.css('title::text').get()  if title:  # 打印標題(在控制臺輸出)  print(f'Title: {title}')  # 你還可以繼續爬取頁面中的其他鏈接,這里只是簡單示例  # 例如,提取所有鏈接并請求它們  # for href in response.css('a::attr(href)').getall():  #     yield scrapy.Request(url=response.urljoin(href), callback=self.parse)  # 注意:上面的代碼只是一個 Spider 類的定義。  
# 要運行這個 Spider,你需要將它放在一個 Scrapy 項目中,并使用 scrapy crawl 命令來啟動爬蟲。  
# 例如,如果你的 Scrapy 項目名為 myproject,并且你的 Spider 文件名為 my_spider.py,  
# 那么你應該在項目根目錄下運行以下命令:  
# scrapy crawl example_spider

3.?Selenium

Selenium 是一款基于瀏覽器地自動化程序庫,可以抓取網頁數據。它能在 JavaScript 渲染的網頁上高效運行,這在其他 Python 庫中并不多見。

在開始使用 Python 處理 Selenium 之前,需要先使用 Selenium Web 驅動程序創建功能測試用例。

Selenium 庫能很好地與任何瀏覽器(如 Firefox、Chrome、IE 等)配合進行測試,比如表單提交、自動登錄、數據添加/刪除和警報處理等。

from selenium import webdriver  
from selenium.webdriver.common.keys import Keys  
from selenium.webdriver.common.by import By  
from selenium.webdriver.support.ui import WebDriverWait  
from selenium.webdriver.support import expected_conditions as EC  # 設置WebDriver的路徑(根據你的系統路徑和WebDriver版本修改)  
driver_path = '/path/to/your/chromedriver'  # 初始化WebDriver  
driver = webdriver.Chrome(executable_path=driver_path)  try:  # 打開網頁  driver.get('https://www.example.com')  # 等待頁面加載完成(這里使用隱式等待,針對所有元素)  # 注意:隱式等待可能會影響性能,通常在腳本開始時設置一次  driver.implicitly_wait(10)  # 秒  # 查找并輸入文本到搜索框(假設搜索框有一個特定的ID或類名等)  # 這里以ID為'search'的輸入框為例  search_box = driver.find_element(By.ID, 'search')  search_box.send_keys('Selenium WebDriver')  # 提交搜索(假設搜索按鈕是一個類型為submit的按鈕或是一個可以點擊的輸入框)  # 如果搜索是通過按Enter鍵觸發的,可以直接在search_box上使用send_keys(Keys.ENTER)  # 這里假設有一個ID為'submit'的按鈕  submit_button = driver.find_element(By.ID, 'submit')  submit_button.click()  # 等待搜索結果加載完成(這里使用顯式等待作為示例)  # 假設搜索結果頁面有一個特定的元素,我們等待它出現  wait = WebDriverWait(driver, 10)  # 等待最多10秒  element = wait.until(EC.presence_of_element_located((By.ID, 'results')))  # 執行其他操作...  finally:  # 關閉瀏覽器  driver.quit()

4. requests

不用多說,requests 是 Python 中一個非常流行的第三方庫,用于發送各種 HTTP 請求。它簡化了 HTTP 請求的發送過程,使得從網頁獲取數據變得非常簡單和直觀。

requests 庫提供了豐富的功能和靈活性,支持多種請求類型(如 GET、POST、PUT、DELETE 等),可以發送帶有參數、頭信息、文件等的請求,并且能夠處理復雜的響應內容(如 JSON、XML 等)。

import requests  # 目標URL  
url = 'https://httpbin.org/get'  # 發送GET請求  
response = requests.get(url)  # 檢查請求是否成功  
if response.status_code == 200:  # 打印響應內容  print(response.text)  
else:  # 打印錯誤信息  print(f'請求失敗,狀態碼:{response.status_code}')

5.?urllib3

urllib3 是 Python內置網頁請求庫,類似于 Python 中的requests庫,主要用于發送HTTP請求和處理HTTP響應。它建立在Python標準庫的urllib模塊之上,但提供了更高級別、更健壯的API。

urllib3可以用于處理簡單身份驗證、cookie 和代理等復雜任務。

import urllib3  # 創建一個HTTP連接池  
http = urllib3.PoolManager()  # 目標URL  
url = 'https://httpbin.org/get'  # 使用連接池發送GET請求  
response = http.request('GET', url)  # 檢查響應狀態碼  
if response.status == 200:  # 打印響應內容(注意:urllib3默認返回的是bytes類型,這里我們將其解碼為str)  print(response.data.decode('utf-8'))  
else:  # 如果響應狀態碼不是200,則打印錯誤信息  print(f'請求失敗,狀態碼:{response.status}')  # 注意:urllib3沒有直接的方法來處理JSON響應,但你可以使用json模塊來解析  
# 如果響應內容是JSON,你可以這樣做:  
# import json  
# json_response = json.loads(response.data.decode('utf-8'))  
# print(json_response)

6. lxml

lxml是一個功能強大且高效的Python庫,主要用于處理XML和HTML文檔。它提供了豐富的API,使得開發者可以輕松地讀取、解析、創建和修改XML和HTML文檔。

from lxml import etree  # 假設我們有一段HTML或XML內容,這里以HTML為例  
html_content = """  
<html>  <head>  <title>示例頁面</title>  </head>  <body>  <h1>歡迎來到我的網站</h1>  <p class="description">這是一個使用lxml解析的示例頁面。</p>  <ul>  <li>項目1</li>  <li>項目2</li>  </ul>  </body>  
</html>  
"""  # 使用lxml的etree模塊來解析HTML或XML字符串  
# 注意:對于HTML內容,我們使用HTMLParser解析器  
parser = etree.HTMLParser()  
tree = etree.fromstring(html_content, parser=parser)  # 查找并打印<title>標簽的文本  
title = tree.find('.//title').text  
print("頁面標題:", title)  # 查找并打印class為"description"的<p>標簽的文本  
description = tree.find('.//p[@class="description"]').text  
print("頁面描述:", description)  # 查找所有的<li>標簽,并打印它們的文本  
for li in tree.findall('.//li'):  print("列表項:", li.text)  # 注意:lxml也支持XPath表達式來查找元素,這里只是簡單展示了find和findall的用法  
# XPath提供了更強大的查詢能力

其他爬蟲工具

除了Python庫之外,還有其他爬蟲工具可以使用。

八爪魚爬蟲

八爪魚爬蟲是一款功能強大的桌面端爬蟲軟件,主打可視化操作,即使是沒有任何編程基礎的用戶也能輕松上手。

官網下載:https://affiliate.bazhuayu.com/hEvPKU

八爪魚支持多種數據類型采集,包括文本、圖片、表格等,并提供強大的自定義功能,能夠滿足不同用戶需求。此外,八爪魚爬蟲支持將采集到的數據導出為多種格式,方便后續分析處理。

亮數據爬蟲

亮數據平臺提供了強大的數據采集工具,比如Web Scraper IDE、亮數據瀏覽器、SERP API等,能夠自動化地從網站上抓取所需數據,無需分析目標平臺的接口,直接使用亮數據提供的方案即可安全穩定地獲取數據。

網站使用:https://get.brightdata.com/webscra

亮數據瀏覽器支持對多個網頁進行批量數據抓取,適用于需要JavaScript渲染的頁面或需要進行網頁交互的場景。

Web Scraper

Web Scraper是一款輕便易用的瀏覽器擴展插件,用戶無需安裝額外的軟件,即可在Chrome瀏覽器中進行爬蟲。插件支持多種數據類型采集,并可將采集到的數據導出為多種格式。

無論是Python庫還是爬蟲軟件,都能實現數據采集任務,可以選擇適合自己的。當然記得在使用這些工具時,一定要遵守相關網站的爬蟲政策和法律法規。

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

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

相關文章

基于BP神經網絡的雜草智能識別系統(雜草識別、Python項目)

基于BP神經網絡的雜草智能識別系統 項目介紹 本項目是一個基于PyQt5和BP神經網絡的雜草智能識別系統。系統通過圖像處理和神經網絡技術&#xff0c; 能夠識別8種不同的雜草類別。用戶可以通過上傳圖片&#xff0c;系統會自動識別圖片中的雜草類別&#xff0c;并顯示識別結果和…

Python3筆記之號稱替代pip的uv包管理器

uv是什么&#xff1f; uv&#xff0c;這是一個由 Astral 團隊開發的極快速的Python包和項目管理工具&#xff0c;用Rust語言編寫。它集成了多種功能&#xff0c;旨在替代pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv等多個工具&#xff0c;提供更高效、更全面的Py…

IT管理思路

甲方CIO和IT管理者-如何做好組織級IT能力提升_嗶哩嗶哩_bilibili

ChatGPT的GPT-4o創建圖像Q版人物提示詞實例展示

最近感覺GPT-4o發布的新功能真的強大&#xff0c;所以總結了一些提示詞分享給大家&#xff0c;大家可以去試試&#xff0c;玩法多多&#xff0c;可以用GPT-4o生成圖片&#xff0c;然后用可靈進行圖生視頻&#xff0c;就能去發布視頻了&#xff01;接下來和筆者一起來試試&#…

Transformer Decoder Block的幾個優化方案

寫在前面 在大型語言模型(LLM)的演進浪潮中,Transformer 架構憑借其強大的并行計算能力和對長距離依賴的出色捕捉,奠定了核心地位。然而,標準的 Transformer Decoder Block 遵循著一種相對固定的模式:先進行自注意力(Self-Attention)捕捉上下文信息,再通過前饋神經網…

五種IO模型與select和poll分別實現多路轉接

五種IO模型與select和poll分別實現多路轉接 何為IO 不論是在前面文件部分&#xff0c;還是后面的網絡部分&#xff0c;IO都是非常常見的。但是當時只是簡單對IO進行提及&#xff0c;并沒有對IO的本質進行介紹。那么到底何為IO&#xff1f;IO全稱為輸入和輸出&#xff0c;而任…

單例模式的寫法(保證線程安全)

1. 引言 1.1 什么是單例模式&#xff1f; 單例模式&#xff08;Singleton Pattern&#xff09;是一種創建型設計模式&#xff0c;它確保一個類只有一個實例&#xff0c;并提供一個全局訪問點。 核心思想&#xff1a;控制實例化過程&#xff0c;避免重復創建對象。 1.2 為什么…

C++ 環境設置

C++ 環境設置 引言 C++作為一種高性能的編程語言,廣泛應用于系統軟件、游戲開發、實時系統等領域。為了能夠順利進行C++編程,我們需要在計算機上配置合適的開發環境。本文將詳細講解如何在Windows、macOS和Linux系統中設置C++開發環境。 Windows系統下C++環境設置 1. 安裝…

【Kafka基礎】ZooKeeper在Kafka中的核心作用:分布式系統中樞神經系統

在分布式系統的世界里&#xff0c;協調和管理多個節點間的狀態是一項復雜而關鍵的任務。Apache Kafka作為一款高性能的分布式消息系統&#xff0c;其設計哲學是"專為單一目的而優化"——即高效處理消息流。為了實現這一目標&#xff0c;Kafka選擇將集群協調管理的重任…

<《AI大模型應知應會100篇》第8篇:大模型的知識獲取方式及其局限性

第8篇&#xff1a;大模型的知識獲取方式及其局限性 摘要 大模型&#xff08;如GPT、BERT、Qwen、DeepSeek等&#xff09;憑借其卓越的自然語言處理能力&#xff0c;已經成為人工智能領域的明星。然而&#xff0c;這些模型“知道”什么&#xff1f;它們如何獲取知識&#xff1f…

ESModule和CommonJS在Node中的區別

ESModule console.log(require);//>errorconsole.log(module);//>errorconsole.log(exports);//>errorconsole.log(__filename);//>errorconsole.log(__dirname);//>error全部報錯commonjs console.log(require);console.log(module);console.log(exports);co…

Spring Boot 配置文件加載優先級全解析

精心整理了最新的面試資料和簡歷模板&#xff0c;有需要的可以自行獲取 點擊前往百度網盤獲取 點擊前往夸克網盤獲取 Spring Boot 配置文件加載優先級全解析 Spring Boot 的配置文件加載機制是開發者管理不同環境配置的核心功能之一。其通過外部化配置&#xff08;Externaliz…

2025 年陜西消防設施操作員考試攻略:歷史文化名城的消防傳承與創新?

陜西擁有豐富的歷史文化遺產&#xff0c;眾多古建筑分布其中&#xff0c;同時也在不斷推進現代化建設&#xff0c;消防工作面臨傳承與創新的雙重任務&#xff0c;這在考試中也有所體現。? 考點融合與特色&#xff1a;一方面&#xff0c;古建筑的消防保護是重點&#xff0c;包…

【Unity網絡編程知識】C#的 Http相關類學習

1、搭建HTTP服務器 使用別人做好的HTTP服務器軟件&#xff0c;一般作為資源服務器時使用該方式&#xff08;學習階段建議使用&#xff09;自己編寫HTTP服務器應用程序&#xff0c;一般作為Web服務器或者短連接游戲服務器時使用該方式&#xff08;工作后由后端程序員來做&#…

Android Studio - 解決 Please Select Android SDK

一、出現的問題 點擊 Run 后彈窗&#xff0c;圖一位置出現圖二提示。 二、解決辦法 進入 Tools -> SDK Manager&#xff0c;在 Android SDK Location 點擊 Edit&#xff0c;一直 Next 就解決了。

UE5學習筆記 FPS游戲制作44 統一UI大小 sizeBox

如果我們希望多個類似的UI大小一樣&#xff0c;例如不同菜單的標題&#xff0c;可以使用sizeBox組件 我們在標題控件上&#xff0c;用sizeBox包裹所有子物體 然后指定他的最小寬高&#xff0c;或最大寬高 如果指定的是最小寬高&#xff0c;當子元素&#xff08;如圖片&#xf…

MCP協議介紹

MCP協議&#xff08;Model Context Protocol&#xff0c;模型上下文協議&#xff09;是由Anthropic公司推出的開放協議&#xff0c;旨在為AI大模型與外部數據源、工具之間建立標準化交互框架。其核心價值在于突破傳統API限制&#xff0c;通過統一接口實現AI與多源數據、工具的雙…

C#里使用WPF的MaterialDesignThemes

先要下載下面的包: <?xml version="1.0" encoding="utf-8"?> <packages><package id="MaterialDesignColors" version="5.2.1" targetFramework="net48" /><package id="MaterialDesignTheme…

基于 Spring Boot 瑞吉外賣系統開發(四)

基于 Spring Boot 瑞吉外賣系統開發&#xff08;四&#xff09; 新增分類 新增分類UI界面&#xff0c;兩個按鈕分別對應兩個UI界面 兩個頁面所需的接口都一樣&#xff0c;請求參數type值不一樣&#xff0c;type1為菜品分類&#xff0c;type2為套餐分類。 請求方法都為POST。…

神經網絡 | 基于脈沖耦合神經網絡PCNN圖像特征提取與匹配(附matlab代碼)

內容未發表論文基于脈沖耦合神經網絡(PCNN)的圖像特征提取與匹配研究 摘要 本文提出一種基于脈沖耦合神經網絡(Pulse-Coupled Neural Network, PCNN)的圖像特征提取與匹配方法。通過模擬生物視覺皮層神經元的脈沖同步發放特性,PCNN能夠有效捕捉圖像紋理與邊緣特征。實驗表…