Python爬蟲入門到實戰(1)-requests庫

一.網絡爬蟲庫

網絡爬蟲通俗來講就是使用代碼將HTML網頁的內容下載到本地的過程。爬取網頁主要是為了獲取網之間需要中的關鍵信息,例如網頁中的數據、圖片、視頻等。

?urllib庫:是Python自帶的標準庫,無須下載、安裝即可直接使用。urllib庫中包含大量的爬蟲功能,但其代碼編寫略微復雜。?? ?

requests庫:是Python的第三方庫,需要下載、安裝之后才能使用。由于requests庫是在urllib軍的基礎上建立的,它包含urllib庫的功能,這使得requests庫中的函數和方法的使用更加友好,因此requests庫使起來更加簡潔、方便。

scrapy庫:是Python的第三方庫,需要下載、安裝之后才能使用。scrapy庫是一個適用于專業應用程序允許用戶開發的網絡爬蟲庫。scrapy庫集合了爬蟲的框架,通過框架可創建一個專業爬蟲系統。

selenium庫:是Python的第三方庫,需要下載、安裝后才能使用。selenium庫可用于驅動計算機中的消覽器執行相關命令,而無須用戶手動操作。常用于自動驅動瀏覽器實現辦公自動化和Web應用程序測試。

二.requests庫和網頁源碼

1.requests庫的安裝

在命令提示符下執行以下命令:

 pip install requests

安裝完后可以使用命令查看庫信息:

pip show requests

?2.網頁源碼

用戶在使用瀏覽器訪間網頁時,往往會忽視網頁的源代碼,而獲取網頁中的信息需要從源代碼出發。例如使用瀏覽器打開首頁,在網頁空白處單擊鼠標右鍵,選擇快捷菜單中的‘查看源碼’。

?網頁中的源代碼形式與HTML代碼形式基本相同,我們可嘗試閱讀網頁中的源代碼通過源代碼可以輕松地獲取網頁中的文字、圖片、視頻等信息,還可以獲取圖片或視頻文件的url并將文件下載到本地。而一個網頁除了HTML代碼還包含JawaScript腳本語言代碼,JavaScript腳本語言使得瀏覽器可以解析和渲染網頁源代碼,使得用戶可以閱覽到圖形界面,而不是閱讀純文本代碼。網頁中有大量數據是包含會在JavaScript腳本語言代碼中的,而通過查看源代碼的方式是無法獲取這些數據的。網頁源代碼中是無法找到的,但可以通過檢查(在網頁空白處單擊鼠標右鍵,選擇快捷菜單中的檢查選項)找到相應的信息

?三.獲取網頁資源

requests庫具有獲取網頁內容和向網頁中提交信息的功能。

1.get()函數

在requests庫中獲取HTML網頁內容的方法是使用get()函數。其使用形式如下:?

get(url,params=None,**kwargs)

參數url:表示需要獲取的HTML網址(也稱為url)。
參數params:表示可選參數,以字典的形式發送信息,當需要向網頁中提交查詢信息時使用。

參數**kwargs:表示請求采用的可選參數。
返回值:返回一個由類Response創建的對象。類Response位于requests庫的models.py文件中。

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

?2.get()搜索信息

當在網頁中搜索人民郵電出版社的某些指定信息時,輸入關鍵詞“Excel”時,從搜索結果網頁中可以看到當前頁面的網址為https://www.ptpress.com.cn/search?keyword=excel.其中https://www.ptpress.com.cn/為官網主頁,search表示搜索,keyword表示搜索的關鍵網(這里為?excel,表示需要搜索的關鍵詞為“excel”),“?”用于分隔search和keyword.在其他網頁中搜索也有與以上類似的效果,search或keyword可能會用其他字符表示,但基本形式是相同的。

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

3.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

4.返回Response對象

通過get()函數獲取HTML網頁內容后,由于網頁的多樣性,通常還需要對網頁返回的Response對象進行設置。Response屬性:

Response包含的屬性有status_code、headers、url、encoding、cookies等。

status_code(狀態碼):當獲取一個HTML網頁時,網頁所在的服務器會返回一個狀態碼,表明本次獲取網頁的狀態。例如訪問人民郵電出版社官網,當使用get()函數發出請求時,人民郵電出版社官網的服務器接收到請求信息后,會先判斷請求信息是否合理,如果請求合理則返回狀態碼200和網頁信息;如果請求不合理則返回一個異常狀態碼。

import requests
r = requests.get('https://www.ptpress.com.cn')
print(r.status_code)
if r.status_code==200:print(r.text)
else:print('本次訪問失敗')

第3行代碼輸出Response對象返回的狀態碼。
第4行代碼用于判斷狀態碼是否為200,如果為200,則輸出獲取的網頁內容,否則表明訪問存在異常。
headers(響應頭):服務器返回的附加信息,主要包括服務器傳遞的數據類型、使用的壓縮方法、語言、服務器的信息、響應該請求的時間等。

url: 響應的最終url位置。
encoding:訪問r.text時使用的編碼。
cookies:服務器返回的文件。這是服務器為辨別用戶身份,對用戶操作進行會話跟蹤而存儲在用戶本地終端數據上的數據。

5.設置編碼

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

如果要設置自動識別網頁的編碼方式,可以使用以下形式:

Response對象.encoding=Response對象.apparent_encoding
import requests
r = requests.get('https://www.baidu.com')
r.encoding = r.apparent_encoding
print(r.text)

6.返回網頁內容

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內容以二進制形式寫入文件。
執行代碼后將在相應文件夾中存儲一張圖片,

6.小項目案例:實現處理獲取的網頁信息

?項目描述:使用get()函數獲取HTML網頁源代碼的目的在于讓獲取的信息為用戶所用。

項目任務?:新書快遞-人郵教育社區”網頁中上架了新書現,需要使用requests庫爬取當前網頁中所有新書的書名。

項目實現步驟:

步驟1,通過使用requests庫獲取“新書快遞-人郵教育社區”網頁的全部內容。
步驟2,從網頁中尋找到圖書名,為了確保獲取正確的圖書名,需要提前在網頁源代碼中尋找到圖書名并觀察它們的特點。其步驟為:首先進入網頁的源代碼頁面,其次觀察到所有新上架圖書的書名都在標簽<h4>中,且位于<h4>標簽的<a>標簽中,標簽中還存在屬性title。這些特點在整個HTML網頁源代碼中是獨一無二的。最后設計正則表達式,過濾開頭為title且結尾為</ a></h4>的字符串內容。

項目實現代碼:

import requests
import re
r = requests.get('https://www.ryjiaoyu.com/tag/details/7')
result = re.findall(r'title=(.+?)">(.+?)</a></h4>',r.text)
for i in range(len(result)):print('第',i+1,'本書: ',result[i][1])

第3行代碼使用get()函數爬取“新書快遞-人郵教育社區”網頁。
第4行代碼使用正則表達式對r.text(網頁中的內容)進行查找,最終找出滿足正則表達式條件的語句

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

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

相關文章

深入理解設計模式之代理模式:原理、實現與應用

在軟件開發中&#xff0c;我們經常需要控制對某些對象的訪問——可能是為了延遲加載、添加額外功能或保護敏感資源。這正是代理模式大顯身手的地方。作為結構型設計模式的重要成員&#xff0c;代理模式在眾多知名框架和系統中扮演著關鍵角色。本文將全面剖析代理模式的方方面面…

VSCode - VSCode 快速跳轉標簽頁

VSCode 快速跳轉標簽頁 1、標簽頁列表快速跳轉 通過快捷鍵 Ctrl Tab 即可快速跳轉標簽頁 # 操作方式先按住 Ctrl 鍵&#xff0c;再按 Tab 鍵&#xff0c;此時&#xff0c;即可打開標簽頁列表&#xff08;保持 Ctrl 鍵一直按住&#xff09;然后&#xff0c;再按 Tab 鍵&#xf…

深入理解設計模式:享元模式(Flyweight Pattern)

在軟件開發中&#xff0c;我們經常會遇到需要創建大量相似對象的情況。如果每個對象都獨立存儲所有數據&#xff0c;將會消耗大量內存資源&#xff0c;導致系統性能下降。享元模式&#xff08;Flyweight Pattern&#xff09;正是為解決這一問題而生的經典設計模式。本文將深入探…

網絡大提速,RDMA,IB,iWrap

本章第一節介紹的存儲設備方面的創新解決了CPU訪問存儲設備的性能問題。但在實際的業務當中,數據的傳輸除了在節點內部的CPU與存儲設備間外,節點之間也存在數據傳輸的需求。本節我們就介紹在網絡傳輸方面是如何提速的。 在介紹新的網絡技術之前,我們看看傳統網絡是如何傳輸…

【C++】紅黑樹,“紅“與“黑”的較量

各位大佬好&#xff0c;我是落羽&#xff01;一個堅持不斷學習進步的大學生。 如果您覺得我的文章有所幫助&#xff0c;歡迎多多互三分享交流&#xff0c;一起學習進步&#xff01; 也歡迎關注我的blog主頁: 落羽的落羽 一、紅黑樹的概念與規則 紅黑樹是一種更加特殊的平衡二…

【愚公系列】《MIoT.VC》001-認識、安裝 MIoT.VC 軟件

??【行業認證權威頭銜】 ? 華為云天團核心成員:特約編輯/云享專家/開發者專家/產品云測專家 ? 開發者社區全滿貫:CSDN博客&商業化雙料專家/阿里云簽約作者/騰訊云內容共創官/掘金&亞馬遜&51CTO頂級博主 ? 技術生態共建先鋒:橫跨鴻蒙、云計算、AI等前沿領域…

git:tag標簽遠程管理

git tag v1&#xff1a;在當前所在分支創建標簽v1git tag -a v2 -m release version&#xff1a;創建一個帶有附注的標簽git tag -d v2&#xff1a;刪除本地標簽git tag&#xff1a;查看標簽git push origin 標簽1 標簽2……&#xff1a;把多個標簽推送到遠程git push origin -…

力扣 hot100 Day49

105. 從前序與中序遍歷序列構造二叉樹 給定兩個整數數組 preorder 和 inorder &#xff0c;其中 preorder 是二叉樹的先序遍歷&#xff0c; inorder 是同一棵樹的中序遍歷&#xff0c;請構造二叉樹并返回其根節點。 //抄的 class Solution { private:unordered_map<int, i…

jvm-sandbox-repeater 錄制和回放

https://github.com/alibaba/jvm-sandbox-repeater/blob/master/docs/user-guide-cn.md 快速錄制自己應用 step0 安裝sandbox和插件到應用服務器 curl -s https://github.com/alibaba/jvm-sandbox-repeater/releases/download/v1.0.0/install-repeater.sh | sh step1 修改repe…

【C++底層剖析】++a vs a++:到底誰是左值,誰是右值?

在 C 編程中&#xff0c;我們經常使用 a 和 a 來實現自增操作。乍一看它們只是“先加還是后加”的語法糖&#xff0c;但你真的理解它們的底層機制、返回值類型和左值右值屬性嗎&#xff1f;1. a 和 a 的基礎區別表達式名稱語義返回值類型左值 / 右值a前置自增先將 a 加 1&#…

【世紀龍科技】汽車故障診斷與排除仿真教學軟件讓課堂更高效安全

隨著汽車產業向智能化、電動化快速轉型&#xff0c;職業院校汽修專業的教學模式正面臨全新挑戰。傳統實車實訓存在成本高、風險大、場景單一等問題&#xff0c;而行業對人才的要求卻越來越高——既需要扎實的理論基礎&#xff0c;又必須具備熟練的故障診斷能力。如何在保證安全…

網絡基礎9:按流負載均衡實驗(等價路由)

實驗eNS拓撲圖&#xff1a;1. 網絡拓撲與 IP 配置AR5&#xff1a;GE0/0/0: 192.168.1.1/24&#xff08;連接 AR6&#xff09;GE0/0/1: 192.168.3.1/24&#xff08;連接 AR8&#xff09;Loopback0: 1.1.1.1/32&#xff08;源地址&#xff09;AR6&#xff1a;GE0/0/0: 192.168.1.…

4G模塊 A7680發送中文短信到手機

命令說明 基礎AT指令 ATi顯示產品的標志信息 ATCIMI查詢IMSI ATCICCID從SIM卡讀取ICCID ATCGSN查詢產品序列號 ATCPIN查詢卡狀態 ATCSQ查詢信號強度 ATCGATT查詢當前PS域狀態 ATCREG查詢GPRS注冊狀態 ATCEREG查詢4G注冊狀態 ATCGPADDR查詢PDP地址 ATCMGF選擇短信格式 ATCMGS發…

深度學習-線性神經網絡

文章目錄線性回歸基本概念隨機梯度下降矢量化加速正態分布和平方損失極大似然估計線性回歸實現從0開始**torch.no_grad()的兩種用途****為什么需要 l.sum().backward()&#xff1f;**調用現成庫softmax回歸圖像數據集從0開始實現softmax利用框架API實現課程學習自李牧老師B站的…

【王樹森推薦系統】推薦系統漲指標的方法04:多樣性

漲指標的方法有哪些&#xff1f; 改進召回模型&#xff0c;添加新的召回模型改進粗排和精排模型提升召回&#xff0c;粗排&#xff0c;精排的多樣性特殊對待新用戶嗎&#xff0c;低活用戶等特殊人群利用關注&#xff0c;轉發&#xff0c;評論這三種交互行為 排序的多樣性 精排多…

1. Spring AI概述

一、前言 Spring AI 是由 Spring 團隊推出的開源項目&#xff0c;旨在為 Java 開發者提供簡潔、一致的 Spring 風格開發體驗&#xff0c;用于構建基于生成式人工智能&#xff08;GenAI&#xff09;和大型語言模型&#xff08;LLM&#xff09;的應用程序。它通過標準化抽象層簡…

[每日隨題10] DP - 重鏈剖分 - 狀壓DP

整體概述 難度&#xff1a;1600 →\rightarrow→ 2200 →\rightarrow→ 2600 P6005 [USACO20JAN] Time is Mooney G 標簽&#xff1a;DP 前置知識&#xff1a;鏈式前向星 難度&#xff1a;綠 1600 題目描述&#xff1a; 輸入格式&#xff1a; 輸出格式&#xff1a; 樣例輸…

【Ubuntu22.04】repo安裝方法

背景 repo是Google開發的用于基于git管理Android版本庫的一個工具&#xff0c;管理多個Git倉庫的工具&#xff0c;它可以幫助您在一個代碼庫中管理多個Git倉庫的代碼。其在鴻蒙操作系統中大量使用。下面我們就介紹repo在wsl中的安裝部署。 安裝方法 使用中國科技大學資源 腳本i…

Vue3的definePros和defineEmits

在 Vue 3 中&#xff0c;defineProps 和 defineEmits 是組合式 API 中用于定義組件的 props 和 事件 的方法&#xff0c;提供了一種更簡潔和明確的方式來管理組件的輸入和輸出。它們屬于 Composition API 的一部分&#xff0c;在 Vue 2 中通常使用 props 和 $emit 來實現。1. d…

【華為機試】122. 買賣股票的最佳時機 II

文章目錄122. 買賣股票的最佳時機 II描述示例 1示例 2示例 3提示解題思路核心觀察關鍵洞察算法實現方法1&#xff1a;貪心算法&#xff08;推薦&#xff09;方法2&#xff1a;動態規劃方法3&#xff1a;動態規劃&#xff08;空間優化&#xff09;方法4&#xff1a;波峰波谷法算…