【Python網絡爬蟲入門教程1】成為“Spider Man”的第一課:HTML、Request庫、Beautiful Soup庫

Python 網絡爬蟲入門:Spider man的第一課

  • 寫在最前面
    • 背景知識介紹
    • 蛛絲發射器——Request庫
    • 智能眼鏡——Beautiful Soup庫
  • 第一課總結

寫在最前面

有位粉絲希望學習網絡爬蟲的實戰技巧,想嘗試搭建自己的爬蟲環境,從網上抓取數據。

前面有寫一篇博客分享,但是內容感覺太淺顯了
【一個超簡單的爬蟲demo】探索新浪網:使用 Python 爬蟲獲取動態網頁數據

本期邀請了擅長爬蟲的朋友@PoloWitty,來撰寫這篇博客。通過他的專業視角和實戰經驗,一步步引導我們入門,成為一名數據探索的“Spider Man”。

【Python網絡爬蟲入門教程1】成為“Spider Man”的第一課:HTML、Request庫、Beautiful Soup庫
【Python網絡爬蟲入門教程2】成為“Spider Man”的第二課:觀察目標網站、代碼編寫


隨著互聯網數據的指數級增長,了解如何有效地提取這些信息變得越來越重要。無論是文本模型如ChatGPT,還是視覺模型如Stable Diffusion,它們的訓練數據大多來源于互聯網的海量數據。在這個日新月異的大數據時代,爬蟲也算是其中不得不點的一項基礎技能樹了。

本系列文章將深入淺出地介紹Python網絡爬蟲的基礎知識和技術,從 Requests 庫到 Scrapy 框架的 入門級 使用,為你開啟python網絡爬蟲的大門,成為spider man的一員,并最終以ScrapeMe網站作為目標示例,爬取下網站上的可愛又有趣的寶可夢照片。

在開始之前,還要啰嗦幾句疊個甲,網絡爬蟲雖然強大,但在使用時必須遵守法律法規和網站的爬蟲協議。不違法爬取數據,遵守相關法律法規哦~

請添加圖片描述

這是本系列的第一篇文章,將會介紹在編寫網絡爬蟲的過程中需要了解的互聯網前端背景知識,以及兩個簡潔易用的相關庫的使用。

通過本教程,你將學會如何開始使用Python進行網絡爬蟲,從而在這個數據驅動的時代中,更好地利用可用的網絡資源。我們期待看到你成為一名數據探索的“Spider Man”!

歡迎在評論分享在爬蟲中遇到的問題,讓我們一起討論和學習!

背景知識介紹

要成功編寫一個Python爬蟲,關鍵在于對目標網站進行精確的定制化設計。同時,面對常見的反爬蟲機制,你還需要具備應對策略的準備。Python爬蟲的技能樹廣泛而深入,即使是最基礎的爬蟲,也涉及到HTML、CSS和JavaScript等前端知識。在此,我們將簡要介紹這些基礎知識,為你的爬蟲之旅打下堅實的基礎。

HTML是網頁構建的骨架,通過各種標記語言來定義頁面內容。比如<img>標簽用來標記圖像,<a>標簽用來標記鏈接,而文本可以用<p>(段落)或者<h1><h6>(標題)來標記,在爬取的過程中就需要根據這些來對內容進行篩選。CSS則是美化大師,最常用的就是給HTML中的元素加上類名(class)來定義樣式。比如,你可以給所有標題元素指定相同的樣式,這樣就能保持一致風格。

接下來是JS,它讓頁面動起來!一個常見的用法是使用document.getElementBy這類方法獲取頁面上的元素。比如,document.getElementById('someId')可以獲取帶有特定ID的元素,而document.getElementsByClassName('someClass')可以獲取所有擁有相同類名的元素。通過這些方法,你能輕松捕獲頁面上的各種東西,讓爬蟲更精準地抓取你需要的信息!

當然,這里提到的都只是在編寫爬蟲的過程中可能最經常會用到的相關知識,如果想要獲取更多相關內容,可以在網上搜索相關系列課程進行學習(比如菜鳥教程),這里就不再深入展開了。

接下來咱們來看看在編寫爬蟲過程中我們會用到的第一個庫:request庫。

蛛絲發射器——Request庫

現在,咱們來談談requests庫。requests庫就像是蜘蛛俠的蛛絲發射器!想象一下,蜘蛛俠用蛛絲發射器輕松地抓住高樓大廈上的東西,requests庫也能輕松地抓取網頁上的數據!

就像蜘蛛俠能迅速把蛛絲射向目標一樣,requests.get()方法能迅速向網站發出請求,抓取你想要的信息。而且,就像蜘蛛俠可以根據需要調整蛛絲的力度和角度一樣,你也可以用requests庫的不同參數調整請求,讓它更適合你的需求!

有時候,你得給服務器點提示,告訴它你是誰。那就用requestsheaders參數,就像是在門口留個便條一樣。而且,如果你要往網站發送數據,比如登錄信息或者表單內容,requests庫也能搞定!

下面來舉個例子實操一下:

import requests
import jsonurl = 'http://t.weather.sojson.com/api/weather/city/101010100'
response = requests.get(url) # 發送請求并得到返回結果obj = json.loads(response.text) # 加載獲取的json格式數據
print(obj)  

通過上面的代碼,就可以利用天氣api獲取到北京市的天氣。然后這個api返回的內容其實是個json格式的對象,我們可以使用json.loads()方法將其加載為一個python對象。

好了,學習到這里,你其實就已經可以利用request庫和一些api服務設計出一些很炫酷的東西了hhh,比方說利用天氣的api再加上一些網頁的前端知識,你也可以自己做一個天氣預報程序了 ^o^/


但是,如果有小伙伴嘗試把上面的url換成https://www.baidu.com,可能就會發現response.text獲取到的東西有點怪異。別慌!這是因為網頁的內容以一種和平常不一樣的編碼形式展現出來了。

幸運的是,這時就該請出BeautifulSoup登場了!就像spider man的智能眼鏡一樣,BeautifulSoup庫能幫你將那些亂七八糟的字符瞬間變成你看得懂的語言,讓你輕松讀懂網頁的內容!

智能眼鏡——Beautiful Soup庫

當直接使用request庫去請求https://www.baidu.com時,返回的其實是網頁的文本表示,大家一般會使用DOM(文檔對象模型)來對它進行解釋。當你在瀏覽器中打開一個網頁時,瀏覽器會下載網頁的HTML、CSS和JavaScript文件,然后解析這些文件,構建成一個DOM樹。這個樹形結構代表了網頁的層級結構,比如標題、段落、鏈接等等元素以及它們的嵌套關系。

Beautiful Soup就是專為網頁解析設計的,它對于DOM(文檔對象模型)樹的解析簡直游刃有余。用Beautiful Soup,你可以像操作樹一樣操作這個DOM樹,輕松找到你想要的內容。比如,你可以用find()find_all()方法按標簽名或者類名查找元素,就像在樹中找到特定類型的分支一樣。

如果我們拿百度頁面舉例,假設你想找到其中所有的鏈接,現在就可以用類似這樣的代碼來進行實現:

import requests
from bs4 import BeautifulSoupurl = 'https://www.baidu.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')# 找到所有的鏈接
links = soup.find_all('a')# 輸出所有鏈接的地址
for link in links:print(link.get('href'))

除了獲取所有的鏈接,我們還可以利用bs4實現各種各樣的功能,比方說,我們如果將上面的代碼中的'a'替換成'img',將'href'替換成'src',我們便可以獲取到百度頁面中所有圖片的鏈接,如果再利用request庫對這些鏈接地址進行一下請求,我們就可以輕松的爬取下該頁面下所有的圖片了!

第一課總結

通過本系列教程的第一課,你應該已經了解到了使用python編寫爬蟲的一些基礎知識,并且對于requests庫和Beautiful Soup庫有了一定的認識。利用本節課上學到的知識,你就已經可以編寫一些簡單的爬蟲程序啦 ^ o^y

在下一課中,將會利用本堂課上學到的基礎知識,使用requests庫和Beautiful Soup庫編寫針對寶可夢圖片的簡單版爬蟲程序。

歡迎持續關注本系列課程!

簡單的爬蟲程序啦 ^ o^y

在下一課中,將會利用本堂課上學到的基礎知識,使用requests庫和Beautiful Soup庫編寫針對寶可夢圖片的簡單版爬蟲程序。

歡迎持續關注本系列課程!

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

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

相關文章

論文閱讀——Deformable ConvNets v2

論文&#xff1a;https://arxiv.org/pdf/1811.11168.pdf 代碼&#xff1a;https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch 1. 介紹 可變形卷積能夠很好地學習到發生形變的物體&#xff0c;但是論文觀察到當盡管比普通卷積網絡能夠更適應物體形變&#xff…

LeetCode-1566. 重復至少 K 次且長度為 M 的模式【數組 枚舉】

LeetCode-1566. 重復至少 K 次且長度為 M 的模式【數組 枚舉】 題目描述&#xff1a;解題思路一&#xff1a;題意就是找出長度為m且連續重復k次的子數組。解題思路就是暴力枚舉加剪枝。解題思路二&#xff1a;思路差不多解題思路三&#xff1a;0 題目描述&#xff1a; 給你一個…

Numpy數組的去重 np.unique()(第15講)

Numpy數組的去重 np.unique()(第15講) ??????? ??博主 侯小啾 感謝您的支持與信賴。?? ?????????????????????????????????????????????????????????????????????????????????…

Linux權限詳解

Linux權限 文章目錄 Linux權限一、root賬號與普通賬號二、Linux權限管理三、權限權值表示方法四、文件訪問權限的設置方法五、粘滯位六、權限總結 前言&#xff1a; 我們在學習Linux的時候&#xff0c;我們知道在Linux下一切皆文件&#xff0c;而不同的文件對于不同的用戶有不同…

第二十一章總結。。

計算機網絡實現了墮胎計算機間的互聯&#xff0c;使得它們彼此之間能夠進行數據交流。網絡應用程序就是再已連接的不同計算機上運行的程序&#xff0c;這些程序借助于網絡協議&#xff0c;相互之間可以交換數據&#xff0c;編寫網絡應用程序前&#xff0c;首先必須明確網絡協議…

掌握iText:輕松處理PDF文檔-基礎篇

關于iText iText是一個強大的PDF處理庫&#xff0c;可以用于創建、讀取和操作PDF文件。它支持PDF表單、加密和簽署等操作&#xff0c;同時支持多種字體和編碼。maven的中央倉庫中的最新版本是5.X&#xff0c;且iText5不是完全免費的&#xff0c;但是基礎能力是免費使用的&…

2023-12-10 LeetCode每日一題(爬樓梯)

2023-12-10每日一題 一、題目編號 70. 爬樓梯二、題目鏈接 點擊跳轉到題目位置 三、題目描述 假設你正在爬樓梯。需要 n 階你才能到達樓頂。 每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢&#xff1f; 示例 1&#xff1a; 示例 2&#xff1a; 提…

gin投票系統2

投票系統 數據庫的建立 先分析需求&#xff0c;在sql中建立數據庫&#xff0c;關于項目數據庫如何建立可以在“goweb項目創建流程分析中看如何去建表” 成功后目前有四個表&#xff1a; vote&#xff0c;user&#xff0c;vote_opt,vote_opt_user 建立數據庫&#xff0c;可以…

Flink基本轉換算子map/filter/flatmap

map map是大家非常熟悉的大數據操作算子&#xff0c;主要用于將數據流中的數據進行轉換&#xff0c;形成新的數據流。簡單來說&#xff0c;就是一個“一一映射”&#xff0c;消費一個元素就產出一個元素。 我們只需要基于DataStream調用map()方法就可以進行轉換處理。方法需要…

案例026:基于微信小程序的原創音樂系統的設計與實現

文末獲取源碼 開發語言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 數據庫&#xff1a;mysql 5.7 開發軟件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序開發軟件&#xff1a;HBuilder X 小程序…

什么是Restful?

Rest簡介 REST是英文representational state transfer(表象性狀態轉變)或者表述性狀態轉移。Rest是web服務的一種架構風格。使用HTTP,URI,XML,JSON,HTML等廣泛流行的標準和協議。輕量級,跨平臺,跨語言的架構設計。它是一種設計風格,不是一種標準,是一種思想。 Rest架構的主要…

java程序定時器

目錄 1.java定時器原生方法 1.java定時器原生方法 實現每天早上8點執行任務的示例代碼 import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit;public class TimeTest{pub…

汽車網絡安全--關于UN R155認證的思考

1.UN R155概述 2020年6月25日,聯合國頒布了全球首個汽車網絡安全強制性法規 -- UN 155,詳細規定了關于評估網絡安全措施的審核條款、制造商和供應商降低網絡安全風險的方法以及實施風險評估的義務等。 法規適用于與信息安全相關的M類(4輪及以上載客汽車)、N類(四輪載貨汽車)…

SpringBoot項目連接Graylog

直接用logback將控制臺輸出的日志發送到graylog上 1.導入logback依賴 <dependency> <groupId>de.siegmar</groupId> <artifactId>logback-gelf</artifactId> <version>1.1.0</version> </dependency> 2.創建logback-spring.x…

淺談低代碼

低代碼開發是近年來迅速崛起的軟件開發方法&#xff0c;讓編寫應用程序變得更快、更簡單。有人說它是美味的膳食&#xff0c;讓開發過程高效而滿足&#xff0c;但也有人質疑它是垃圾食品&#xff0c;缺乏定制性與深度。你認為低代碼到底是美以下方向僅供參考。味的膳食還是垃圾…

SpringBoot - 四種常見定時器

常見實現方案 Scheduled注解&#xff1a;基于注解Timer().schedule創建任務&#xff1a;基于封裝類Timer線程&#xff1a;使用線程直接執行任務即可&#xff0c;可以與thread、線程池、ScheduleTask等配合使用quartz配置定時器&#xff1a;基于spring的quartz框架 Scheduled注…

golang學習筆記——編寫最簡單的命令行工具

編寫最簡單的命令行工具 用戶輸入bufio 使用go語言編寫最簡單的命令行工具 mkdir hello-cli-demo cd hello-cli-demo # 查看環境變量 go envgo mod初始化 go mod init gitcode.com/m打開vscode&#xff0c;創建main.go package mainimport ("fmt""bufio&qu…

RK3568 CIF和ISP的關聯

1. 引言 在本文檔中&#xff0c;我們將介紹RK3568芯片的CIF&#xff08;Camera Interface&#xff09;和ISP&#xff08;Image Signal Processor&#xff09;模塊。這兩個模塊是RK3568芯片的關鍵組成部分&#xff0c;用于圖像采集和處理。 CIF是一個標準接口&#xff0c;用于…

快速測試 3節點的redis sentinel集群宕機2個節點以后是否仍能正常使用

有同事問我&#xff0c;三個redis sentinel節點&#xff0c;宕機兩個節點以后&#xff0c;是否還能夠正常的通過redis sentinel正常訪問redis的數據。我想了想&#xff0c;理論上是可以的&#xff0c;但是我沒試過&#xff0c;今天有時間就測試了一下。搭建環境和測試代碼的過程…

Java并發(十七)----變量的線程安全分析

1、成員變量和靜態變量是否線程安全 如果它們沒有共享&#xff0c;則線程安全 如果它們被共享了&#xff0c;根據它們的狀態是否能夠改變&#xff0c;又分兩種情況 如果只有讀操作&#xff0c;則線程安全 如果有讀寫操作&#xff0c;則這段代碼是臨界區&#xff0c;需要考慮線…