網絡爬蟲的詳細知識點

基本介紹

什么是網絡爬蟲

網絡爬蟲(Web Crawler)是一種自動化程序,用于從互聯網上抓取、解析和存儲網頁數據。其核心功能是模擬人類瀏覽行為,通過HTTP/HTTPS協議訪問目標網站,提取文本、鏈接、圖片或其他結構化信息,常用于搜索引擎索引、數據分析或商業情報收集。

robots.txt

robots.txt 文件的作用

robots.txt 是網站根目錄下的一個文本文件,用于告知網絡爬蟲哪些頁面或目錄可以被抓取,哪些應被禁止。它遵循 Robots 排除協議(REP),屬于行業標準而非法律約束。

robots.txt 的基本語法

  • User-agent: 指定適用的爬蟲名稱(如 * 表示所有爬蟲)。
  • Disallow: 禁止訪問的路徑。
  • Allow: 允許訪問的路徑。

示例:

User-agent: *
Disallow: /private/
Allow: /public/

常見規則示例

禁止所有爬蟲訪問整個網站:

User-agent: *
Disallow: /

允許所有爬蟲訪問全部內容:

User-agent: *
Disallow:

禁止特定爬蟲(如 Googlebot):

User-agent: Googlebot
Disallow: /images/

安裝requests庫的方法

使用pip安裝(推薦)


在命令行或終端中運行以下命令,適用于大多數Python環境:

pip install requests

驗證安裝


安裝完成后,在Python交互環境中運行以下代碼確認是否成功:

import requests
print(requests.__version__)

注意事項

  • 確保Python環境已配置PATH變量。
  • 網絡問題可能導致安裝失敗,可嘗試使用國內鏡像源(如清華源):
    pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
    

    網絡爬蟲中的 get() 函數

    get() 是網絡爬蟲中常用的 HTTP 請求方法,主要用于向服務器請求數據,GET請求是爬蟲中最常見和最簡單的請求方法,可以直接將URL輸入,不需要其他轉換,即所有需要請求的信息都包含在URL中。以下是其核心知識點和用法:


    基本語法(Python requests 庫)

    import requestsresponse = requests.get(url, params=None, headers=None, timeout=5)
    
  • url: 目標網頁地址
  • params: 查詢參數字典(如 {'key1': 'value1', 'key2': 'value2'}
  • headers: 請求頭信息(如模擬瀏覽器訪問)
  • timeout: 超時時間(秒)

get()搜索信息

import requests
r = requests.get('https://www.ptpress.com.cn/search?keyword=word')
print(r.text)


get()添加信息

get()函數中第2個參數params會以字典的形式在url后自動添加信息,需要提前將params定義為字典。
?
示例代碼:
?

import requests
info = {'keyword':'Excel' }
r = requests.get('https://www.ptpress.com.cn/search',params=info)
print(r.url)
print(r.text)


第2行代碼建立字典info,包含一個鍵值對。
?
第3行代碼使用get()函數獲取網頁,由于get()中包含參數params,因此系統會自動在url后添加字典信息,形式為https://www.ptpress.com.cn/search?keyword=excel,該使用形式便于靈活設定需要搜索的信息,可以添加或刪除字典信息。
?
第4行代碼輸出返回的Response對象中的url,即獲取網頁的url。

response

    response對象的基本概念

    在爬蟲開發中,response對象通常是HTTP請求后服務器返回的響應封裝,包含狀態碼、響應頭、響應體等關鍵信息。不同庫的response對象結構可能略有差異,但核心功能相似。

    ??????

    response 的屬性

    response 對象通常用于 HTTP 請求的響應處理,其屬性會根據使用的庫或框架有所不同。以下是常見場景下的屬性說明:

    通用 HTTP 響應屬性
    • status_code
      表示 HTTP 狀態碼(如 200、404),用于判斷請求是否成功。

    • headers
      包含響應頭的字典,例如 Content-TypeServer 信息。

    • content
      以字節形式返回原始響應內容,適用于非文本數據(如圖片)。

    • text
      將響應內容解碼為字符串(自動處理編碼),適用于文本數據(如 HTML/JSON)。

    設置編碼
    ?


    當訪問一個網頁時,如果獲取的內容是亂碼,可以通過設置requests.get(url)返回的Response對象的encoding='utf - 8'來修改“Response對象.text”文本內容的編碼方式。同時Response對象中提供了apparent_encoding()方法來自動識別網頁的編碼方式,不過由于此方法是由機器自動識別,因此可能會存在識別錯誤的情況(大部分情況下是可用的)。
    ?
    如果要設置自動識別網頁的編碼方式,可以使用以下形式:
    ?
    Response對象.encoding = Response對象.apparent_encoding
    ?
    示例代碼:
    ?

    import requests
    r = requests.get('此處填入\'百度官網地址\'.com')
    r.encoding = r.apparent_encoding
    print(r.text)


    第3行代碼設置自動識別網頁的編碼方式,執行代碼后的輸出結果中將包含可識別的文字 。

    返回網頁內容


    ?
    Response對象中返回網頁內容有兩種方法,分別是text()方法和content()方法,其中text()方法在前面的內容中有介紹,它是以字符串的形式返回網頁內容。而content()方法是以二進制的形式返回網頁內容,常用于直接保存網頁中的媒體文件。

    import requests
    r = requests.get('https://cdn.ptpress.cn/uploadimg/Material/978-7-115-41359-8/72jpg/41359.jpg')
    f2 = open('b.jpg','wb')
    f2.write(r.content)
    f2.close()


    第2行代碼使用get()方法訪問了圖片url。
    第3行代碼使用open()函數創建了一個‘b.jpg’文件,并且設置以二進制寫入的模式。
    第4行代碼將獲取的url內容以二進制形式寫入文件。
    執行代碼后將在相應文件夾中存儲一張圖片

    代理服務器

    代理服務器在爬蟲中的作用

    代理服務器在爬蟲中主要用于隱藏真實IP地址,避免被目標網站封禁或限制訪問。通過代理IP發送請求,可以模擬不同地區的用戶訪問,提高爬蟲的穩定性和成功率。

    代理服務器的獲取方式

    • 免費代理:公開的代理IP池,但穩定性差,可用率低。
    • 付費代理:提供高可用性和低延遲的代理服務。

    如何在爬蟲中使用代理

    Python的requests庫可以通過proxies參數設置代理:

    import requestsproxies = {"http": "http://10.10.1.10:3128","https": "http://10.10.1.10:1080",
    }response = requests.get("http://example.com", proxies=proxies)
    print(response.text)
    

    代理服務器的管理

    1. IP輪換:隨機或按策略切換代理IP,避免單一IP被封。
    2. 速率控制:控制請求頻率,減小被封禁的概率。

    selenium庫驅動瀏覽器

    安裝Selenium庫

    通過pip命令安裝Selenium庫:

    pip install selenium
    
    pip install selenium -i https://pypi.mirrors.ustc.edu.cn/simple/
    

    下載瀏覽器驅動

    根據使用的瀏覽器下載對應的驅動(以Chrome為例):

    • ChromeDriver:從ChromeDriver官網下載與瀏覽器版本匹配的驅動。
    • 其他瀏覽器
      • Firefox:下載GeckoDriver。
      • Edge:下載EdgeDriver。

    將驅動文件解壓后放入系統路徑(如/usr/local/bin或項目目錄)。

    基本使用方法

    初始化WebDriver并打開瀏覽器:

    from selenium import webdriver# Chrome瀏覽器示例
    driver = webdriver.Chrome(executable_path='path/to/chromedriver')
    driver.get("https://www.example.com")
    

    注意事項

    • 確保瀏覽器驅動版本與瀏覽器版本兼容。
    • 使用完畢后調用driver.quit()釋放資源。
    • 顯式等待比隱式等待更高效,推薦優先使用。

    通過以上方法,可以靈活控制瀏覽器行為,適用于自動化測試、數據抓取等場景。

    ?驅動瀏覽器


    selenium庫支持的瀏覽器包括Chrome、IE 7~11、Firefox、Opera Edge、HtmlUnit、PhantomJS等,幾乎覆蓋了當前計算機端和手機端的所有類型的瀏覽器。在selenium庫源代碼文件下的webdriver中可查看所有支持的瀏覽器類型
    ?
    webdriver的使用形式如下:
    ?

    webdriver.瀏覽器類型名()
    


    例如驅動Chrome瀏覽器的使用方法為webdriver.Chrome(),驅動Opera瀏覽器的使用方法為webdriver.opera()。每個文件夾中都存在一個webdriver.py文件,當調用webdriver.Chrome()時,會默認調用chrome\webdriver.py文件中的類WebDriver。

    webdriver.Chrome()的使用形式如下:
    ?

    webdriver.Chrome(executable_path = "chromedriver", port = 0, options = None)


    功能:創建一個新的Chrome瀏覽器驅動程序。
    ?
    參數executable_path:表示瀏覽器的驅動路徑,默認為環境變量中的path,通常計算機中可能存在多個瀏覽器軟件,當沒有在環境變量中設置瀏覽器path時,可以使用參數options。
    ?
    參數port:表明希望服務運行的端口,如果保留為0,驅動程序將會找到一個空閑端口。
    ?
    參數options:表示由類Options(位于selenium\webdriver\chrome\options.py)創建的對象,用于實現瀏覽器的綁定。
    ?
    示例代碼(驅動Chrome瀏覽器):
    ?

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    chrome_options = Options()
    chrome_options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
    driver = webdriver.Chrome(options=chrome_options)


    ?
    第3、4行代碼使用類Options創建了一個對象?chrome_options?,使用?binary_location()?方法綁定了瀏覽器。
    第5行代碼使用?webdriver.Chrome()?設置?options?參數值為綁定Chrome瀏覽器的對象?chrome_options?。
    執行代碼后將會自動打開Chrome瀏覽器,實現驅動瀏覽器的第一步。
    ?
    注意
    該代碼中的瀏覽器安裝地址為計算機上Chrome瀏覽器的安裝地址,讀者在實踐操作時需要使用自己計算機中瀏覽器的安裝地址。可以通過鼠標右鍵單擊瀏覽器圖標,選擇快捷菜單中的“屬性”選項即可

    加載網頁

    接下來介紹兩種常用的加載瀏覽器網頁的方法。
    ?
    第1種,get()方法。

    get()方法用于打開指定的網頁
    ?
    示例代碼(加載人民郵電出版社官網中的期刊頁):
    ?

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    chrome_options = Options()
    chrome_options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
    driver = webdriver.Chrome(options=chrome_options)
    driver.get('https://www.ptpress.com.cn//periodical')


    第6行代碼使用get()方法加載人民郵電出版社官網的期刊頁,執行代碼后將會自動啟動Chrome瀏覽器并加載出相應網頁,結果如圖15-33所示。
    ?
    第2種,execute_script()方法。execute_script()方法用于打開多個標簽頁,即在同一瀏覽器中打開多個網頁。
    功能:打開標簽頁,同步執行當前頁面中的JavaScript腳本。JavaScript是網頁中的一種編程語言。
    參數script:表示將要執行的腳本內容,數據類型為字符串類型。使用JavaScript語言實現打開一個新標簽頁的使用形式為?"window.open('網站url','_blank');"?。
    ?
    示例代碼(打開多個標簽頁):

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    chrome_options = Options()
    chrome_options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
    driver = webdriver.Chrome(options=chrome_options)
    driver.get('https://www.ptpress.com.cn/')
    driver.execute_script("window.open('https://www.ptpress.com.cn/login','_blank');")
    driver.execute_script("window.open('https://www.shuyishe.com/','_blank');")
    driver.execute_script("window.open('https://www.shuyishe.com/course','_blank');")

    獲取渲染后的網頁代碼


    通過get()方法獲取瀏覽器中的網頁資源后,瀏覽器將自動渲染網頁源代碼內容,并生成渲染后的內容,這時使用page_source()方法即可獲取渲染后的網頁代碼。
    ?
    示例代碼:
    ?

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    chrome_options = Options()
    chrome_options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
    driver = webdriver.Chrome(options=chrome_options)
    driver.get('https://www.ptpress.com.cn/')
    print(driver.page_source)
    


    第7行代碼使用driver對象中的page_source()方法獲取被get()方法獲取到的渲染后的網頁源代碼。

    案例

    提取關鍵字為python的圖書封面圖片:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    import requests
    import rechrome_options = Options()
    chrome_options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
    driver = webdriver.Chrome(options=chrome_options)
    driver.get('https://www.ptpress.com.cn/search?keyword=python')
    a = re.findall('< img src="(.+?jpg)"></div>', driver.page_source)
    i = 1
    for url in a:r = requests.get(url)f2 = open('.\\Python圖書\\' + str(i) + '.jpg', 'wb')i += 1f2.write(r.content)f2.close()

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

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

    相關文章

    AndroidX中ComponentActivity與原生 Activity 的區別

    一、AndroidX 與原生 Activity 的區別 1. 概念與背景 原生 Activity&#xff1a;指 Android 早期&#xff08;API 1 起&#xff09;就存在于 android.app 包下的 Activity 類&#xff08;如 android.app.Activity&#xff09;&#xff0c;是 Android 最初的 Activity 實現&…

    Spring AI 使用 Elasticsearch 作為向量數據庫

    前言 嗨&#xff0c;大家好&#xff0c;我是雪荷&#xff0c;最近在公司開發 AI 知識庫&#xff0c;同時學到了一些 AI 開發相關的技術&#xff0c;這期先與大家分享一下如何用 ES 當做向量數據庫。 安裝ES 第一步我們先安裝 Elasticsearch&#xff0c;這里建議 Elasticsear…

    TypeScript 配置全解析:tsconfig.json、tsconfig.app.json 與 tsconfig.node.json 的深度指南

    前言在現代前端和后端開發中&#xff0c;TypeScript 已經成為許多開發者的首選語言。然而&#xff0c;TypeScript 的配置文件&#xff08;特別是多個配置文件協同工作時&#xff09;常常讓開發者感到困惑。本文將深入探討 tsconfig.json、tsconfig.app.json 和 tsconfig.node.j…

    讀書筆記(學會說話)

    1、一個人只有會說話&#xff0c;才會有好人緣&#xff0c;做事才會順利。會說話的人容易成功。善于說話的人易成功&#xff0c;而不善說話的人往往寸步難行。我們要把話說得好聽&#xff0c;同時更要把事做得漂亮。或許一句話&#xff0c;一件事&#xff0c;就可能使人生的旅途…

    私有服務器AI智能體搭建-大模型選擇優缺點、擴展性、可開發

    以下是主流 AI 框架與模型的對比分析&#xff0c;涵蓋其優缺點、擴展性、可開發性等方面。 文章目錄一、AI 框架對比二、主流大模型對比三、擴展性對比總結四、可開發性對比總結五、選擇建議&#xff08;按場景&#xff09;六、未來趨勢一、AI 框架對比 框架優點缺點擴展性可開…

    OpenCV直線段檢測算法類cv::line_descriptor::LSDDetector

    操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該類用于實現 LSD (Line Segment Detector) 直線段檢測算法。LSD 是一種快速、準確的直線檢測方法&#xff0c;能夠在不依賴邊緣檢測的前提下直接從…

    Go語言流程控制(if / for)

    分支結構package mainimport ("fmt""strconv" )/* 1.順序結構 2.分支結構 3.循環結構 *//* if 條件1 {// 條件1為真時執行的代碼 } else if 條件2 {// 條件1為假但條件2為真時執行的代碼 } else {// 所有條件均為假時執行的代碼 }一種特殊的條件分支結構if…

    wx小程序設置沉浸式導航文字高度問題

    第一步&#xff1a;在app.json中設置"navigationStyle": "custom"第二步驟&#xff1a;文件的home.js中// pages/test/test.js Page({/*** 頁面的初始數據*/data: {statusBarHeight: 0,navBarHeight: 44 // 自定義導航內容區高度(單位px)},/*** 生命周期函…

    C++算法競賽篇:DevC++ 如何進行debug調試

    C算法競賽篇&#xff1a;DevC 如何進行debug調試前言一、準備工作&#xff1a;編譯生成可執行程序二、核心步驟&#xff1a;設置斷點與啟動調試1. 設置斷點2. 啟動調試模式三、調試操作&#xff1a;逐步執行與變量監控1. 逐步執行代碼2. 監控變量值變化四、調試結束前言 在算法…

    語音大模型速覽(三)- cosyvoice2

    CosyVoice 2: Scalable Streaming Speech Synthesis with Large Language Models 論文鏈接&#xff1a;https://arxiv.org/pdf/2412.10117代碼鏈接&#xff1a;https://github.com/FunAudioLLM/CosyVoice 一句話總結 CosyVoice 2 是一款改進的流式語音合成模型&#xff0c;其…

    -lstdc++與-static-libstdc++的用法和差異

    CMakeLists.txt 里寫了&#xff1a; target_link_libraries(${PROJECT_NAME} PRIVATEgccstdc ) target_link_options(${PROJECT_NAME} PRIVATE -static-libstdc)看起來像是“鏈接了兩次 C 標準庫”&#xff0c;其實它們的作用完全不同&#xff1a;1. target_link_libraries(...…

    Redis學習其二(事務,SpringBoot整合,持久化RDB和AOF)

    文章目錄5,事務5.1Redis 事務不保證原子性的原因5.2事務操作過程5.3監控6,SpringBoot整合Redis6.1Redis客戶端6.1.1Jedis簡單使用6.1.2Lettuce&Jedis6.2配置相關6.3使用6.3.1使用RedisTemplate6.3.2Redis工具類7,持久化RDB7.1RDB持久化原理7.2觸發機制save命令flushall命令…

    springboot項目部署到K8S

    java后臺 創建harbor鏡像拉取Secret&#xff1a;kubectl create secret docker-registry harbor-regcred \--docker-server \ #harbor倉庫地址--docker-username \ #harbor 賬號--docker-password \ #harbor密碼-n productionDockerfile FROM *harbor地址*/library/custom-jdk…

    【FPGA開發】一文輕松入門Modelsim的基本操作

    Modelsim仿真的步驟 &#xff08;1&#xff09;創建新的工程。 &#xff08;2&#xff09;在彈出的窗口中&#xff0c;確定項目名和工作路徑&#xff0c;庫保持為work不變(如有需要可以根據需求進行更改)。 &#xff08;3&#xff09;添加已經存在的文件&#xff08;rtl代碼和t…

    服務攻防-Java組件安全FastJson高版本JNDI不出網C3P0編碼繞WAF寫入文件CI鏈

    服務攻防-Java組件安全&FastJson&高版本JNDI&不出網C3P0&編碼繞WAF&寫入文件CI鏈26天 原創 朝陽 Sec朝陽 2025年07月18日 09:23 湖北 標題已修改 演示環境&#xff1a; https://github.com/lemono0/FastJsonParty FastJson全版本Docker漏洞環境(涵蓋1.…

    【Python】DRF核心組件詳解:Mixin與Generic視圖

    在 Django REST Framework (DRF) 中&#xff0c;mixins.CreateModelMixin、mixins.ListModelMixin、GenericAPIView 和 GenericViewSet 是構建 API 視圖的核心組件。以下是對這些組件的主要方法及其職責的簡要說明&#xff0c;內容清晰且結構化&#xff1a;1. mixins.CreateMod…

    HTML+CSS+JS基礎

    文章目錄&#xff08;一&#xff09;html1.常見標簽&#xff08;1&#xff09;注釋&#xff08;2&#xff09;標題 h1~h6&#xff08;3&#xff09;段落 p&#xff08;4&#xff09;換行與空格 br \ &#xff08;5&#xff09;格式化標簽 b i s u&#xff08;6&#xff09;…

    Vue導出Html為Word中包含圖片在Microsoft Word顯示異常問題

    問題背景 碰到一個問題&#xff1a;將包含圖片和SVG數學公式的HTML內容導出為Word文檔時&#xff0c;將圖片都轉為ase64格式導出&#xff0c;在WPS Word中顯示正常&#xff0c;但是在Microsoft Word中出現圖片示異常。具體問題表現 WPS兼容性&#xff1a;在WPS中顯示正常&#…

    橢圓曲線密碼學 Elliptic Curve Cryptography

    密碼學是研究在存在對抗行為的情況下還能安全通信的技術。即算法加密信息&#xff0c;再算法解密出信息。加密分為兩類 1. Symmetric-key Encryption (secret key encryption) 即一種密鑰&#xff0c;加密和解密使用同一密鑰&#xff0c;可相互轉換 2. Asymmetric-key Encry…

    wedo牛-----第47節(免費分享圖紙)

    夸克網盤&#xff1a;https://pan.quark.cn/s/4b40a8d18979 高清圖紙源文件&#xff0c;需要的請自取