Python爬蟲原理以及3個小案例(源碼)

一、爬蟲原理

網絡爬蟲是一種用于自動獲取網頁內容的程序。它模擬用戶瀏覽網頁的過程,通過發送HTTP請求獲取網頁的源代碼,并利用解析和提取技術來獲取所需的數據。

1. HTTP請求與響應過程

爬蟲向目標網站發送HTTP請求,請求包含URL、請求方法(如GET或POST)、請求頭(Headers)等。服務器接收到請求后,會返回HTTP響應,其中包含狀態碼、響應頭和響應體(網頁內容)。

2. 常用爬蟲技術

  • 請求庫:例如requestsaiohttp,用于發送HTTP請求。
  • 解析庫:例如BeautifulSouplxmlPyQuery,用于解析網頁內容。
  • 存儲庫:例如pandasSQLite,用于存儲爬取的數據。
  • 異步庫:例如asyncioaiohttp,用于實現異步爬蟲,提高爬取效率。

二、Python爬蟲常用庫

1. 請求庫

  • requests:一個簡潔而強大的HTTP庫,支持HTTP連接保持和連接池、SSL證書驗證、Cookies等。
  • aiohttp:一個基于asyncio的異步HTTP庫,適合高并發的爬蟲場景。

2. 解析庫

  • BeautifulSoup:一個用于解析HTML和XML的庫,簡單易用,支持多種解析器。
  • lxml:一個高效的XML和HTML解析庫,支持XPath和CSS選擇器。
  • PyQuery:一個Python版的jQuery,語法與jQuery類似,易于上手。

3. 存儲庫

  • pandas:一個強大的數據分析庫,提供數據結構和數據分析工具,支持多種文件格式。
  • SQLite:一個輕量級的數據庫,支持SQL查詢,適用于小型爬蟲項目。

接下來,將通過7個Python爬蟲的小案例,幫助大家更好地學習和理解Python爬蟲的基礎知識。以下是每個案例的簡介和源代碼:

案例1:爬取豆瓣電影Top250

這個案例使用BeautifulSoup庫爬取豆瓣電影Top250的電影名稱、評分和評價人數等信息,并將這些信息保存到CSV文件中。

import requests
from bs4 import BeautifulSoup
import csv# 請求URL
url = 'https://movie.douban.com/top250'
# 請求頭部
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}# 解析頁面函數
def parse_html(html):soup = BeautifulSoup(html, 'lxml')movie_list = soup.find('ol', class_='grid_view').find_all('li')for movie in movie_list:title = movie.find('div', class_='hd').find('span', class_='title').get_text()rating_num = movie.find('div', class_='star').find('span', class_='rating_num').get_text()comment_num = movie.find('div', class_='star').find_all('span')[-1].get_text()writer.writerow([title, rating_num, comment_num])# 保存數據函數
def save_data():f = open('douban_movie_top250.csv', 'a', newline='', encoding='utf-8-sig')global writerwriter = csv.writer(f)writer.writerow(['電影名稱', '評分', '評價人數'])for i in range(10):url = 'https://movie.douban.com/top250?start=' + str(i * 25) + '&filter='response = requests.get(url, headers=headers)parse_html(response.text)f.close()if __name__ == '__main__':save_data()

案例2:爬取貓眼電影Top100

這個案例使用正則表達式和requests庫爬取貓眼電影Top100的電影名稱、主演和上映時間等信息,并將這些信息保存到TXT文件中。

import requests
import re# 請求URL
url = 'https://maoyan.com/board/4'
# 請求頭部
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}# 解析頁面函數
def parse_html(html):pattern = re.compile('<p class="name"><a href=".*?" title="(.*?)" data-act="boarditem-click" data-val="{movieId:\\\\d+}">(.*?)</a></p>.*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>', re.S)items = re.findall(pattern, html)for item in items:yield {'電影名稱': item[1],'主演': item[2].strip(),'上映時間': item[3]}# 保存數據函數
def save_data():f = open('maoyan_top100.txt', 'w', encoding='utf-8')for i in range(10):url = 'https://maoyan.com/board/4?offset=' + str(i * 10)response = requests.get(url, headers=headers)for item in parse_html(response.text):f.write(str(item) + '\n')f.close()if __name__ == '__main__':save_data()

案例3:爬取全國高校名單

這個案例使用正則表達式和requests庫爬取全國高校名單,并將這些信息保存到TXT文件中。

import requests
import re# 請求URL
url = 'http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html'
# 請求頭部
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}# 解析頁面函數
def parse_html(html):pattern = re.compile('<tr class="alt">.*?<td>(.*?)</td>.*?<td><div align="left">.*?<a href="(.*?)" target="_blank">(.*?)</a></div></td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?</tr>', re.S)items = re.findall(pattern, html)for item in items:yield {'排名': item[0],'學校名稱': item[2],'省市': item[3],'總分': item[4]}# 保存數據函數
def save_data():f = open('university_top100.txt', 'w', encoding='utf-8')response = requests.get(url, headers=headers)for item in parse_html(response.text):f.write(str(item) + '\n')f.close()if __name__ == '__main__':save_data()

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

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

相關文章

Linux內核 -- DMA控制器之dmaengine框架的注冊與使用流程

Linux Kernel dmaengine 框架 簡介 Linux內核的dmaengine框架是一個用于管理DMA&#xff08;Direct Memory Access&#xff09;操作的通用框架。它抽象了不同DMA控制器的實現&#xff0c;使得上層代碼可以方便地進行DMA傳輸。 初始化流程 1. 驅動注冊 每個DMA控制器驅動都…

定義變量和聲明變量、定義類和聲明類

一、定義變量和聲明變量 在編程中&#xff0c;定義變量和聲明變量是兩個相關但不同的概念&#xff0c;尤其是在靜態類型的編程語言中。靜態類型的編程語言比如Java 1、聲明變量 &#xff08;1&#xff09;定義&#xff1a;聲明變量是指告訴編譯器變量的名字、類型和在某些情…

Mysql:時區問題

Mysql&#xff1a;時區問題 1、時區配置 Mysql默認使用系統的時區 mysql> show global variables like %time%zone%; -------------------------- | Variable_name | Value | -------------------------- | system_time_zone | | | time_zone | SYSTEM…

Multi-Wing Optimiser風扇選型軟件介紹

Multi-Wing Optimiser風扇選型軟件

一、YOLO V10安裝、使用、訓練大全

YOLO V10安裝、使用、訓練大全 一、下載官方源碼二、配置conda環境三、安裝YOLOV10依賴四、使用官方YOLO V10模型1.下載模型2.使用模型2.1 圖片案例 五、制作數據集1.數據集目錄結構2.標注工具2.1 安裝標注工具2.2 運行標注工具2.3 設置自動保存2.4 切換yolo模式2.5 開始標注2.…

Socket.D 開源網絡應用協議,v2.5.9 發布(已有 java, py, js SDK)

Socket.D 協議&#xff1f; Socket.D 是一個基于事件和語義消息流的網絡應用協議。在微服務、移動應用、物聯網等場景&#xff0c;可替代 http、websocket 等。協議詳情參考《官網介紹》。 支持&#xff1a; tcp, udp, ws, kcp 傳輸。 目前&#xff1a;java&#xff0c;kotli…

Python不使用元類的ORM實現

不使用元類的簡單ORM實現 在 Python 中&#xff0c;ORM&#xff08;Object-Relational Mapping&#xff09;是一種將對象和數據庫之間的映射關系進行轉換的技術&#xff0c;使得通過面向對象的方式來操作數據庫更加方便。通常&#xff0c;我們使用元類&#xff08;metaclass&a…

關于go和rust語言的對比

文章目錄 前言Rust 的優勢&#xff1a;Go 的優勢&#xff1a;總結 前言 Go 和 Rust 是兩種現代的系統級編程語言&#xff0c;它們各自擁有獨特的特性和應用場景。以下是它們的一些主要區別&#xff1a; Rust 的優勢&#xff1a; 內存安全&#xff1a;Rust 引入了所有權和借用…

香橙派5plus上跑云手機方案二 waydroid

前言 上篇文章香橙派5plus上跑云手機方案一 redroid(帶硬件加速)說了怎么跑帶GPU加速的redroid方案&#xff0c;這篇說下怎么在香橙派下使用Waydroid。 溫馨提示 雖然能運行&#xff0c;但是體驗下來只能用軟件加速&#xff0c;無法使用GPU加速&#xff0c;所有會很卡。而且…

Pat乙級題解

文章目錄 1~2021 ~ 4041~6061~8081~100101~125 1~20 1001 害死人不償命的(3n1)猜想 B1002 寫出這個數 (20 分) B1003 我要通過&#xff01; B1004 成績排名 1005 繼續(3n1)猜想 B1006 換個格式輸出整數 B1007 素數對猜想 1008 數組元素循環右移問題 B1009 說反話 1010 一元多項…

linux磁盤分區管理

首先關機狀態下&#xff0c;先配置硬盤 硬盤分區管理 識別硬盤 》分區規劃 》 格式化 》 掛載使用 [rootlocalhost ~]# lsblk 查看硬盤 分區劃分&#xff08;m幫助, p 查看分區, n 創建分區, d 刪除分區, q 退出, w 保存&#xff0c; g gpt分區&#xff09; [roo…

絕區陸--大語言模型的幻覺問題是如何推動科學創新

介紹 大型語言模型 (LLM)&#xff08;例如 GPT-4、LLaMA-2、PaLM-2、Claude-2 等&#xff09;已展示出為各種應用生成類似人類文本的出色能力。然而&#xff0c;LLM 的一個鮮為人知的方面是它們傾向于“產生幻覺”或生成不正確或沒有根據的事實陳述。我不認為這僅僅是一個限制…

快速排序算法Python實現

快速排序原理和步驟 快速排序是一種高效的排序算法&#xff0c;基于分治法&#xff08;Divide and Conquer&#xff09;來實現。其基本思想是通過一次排序將數組分成兩部分&#xff0c;其中一部分的所有元素都小于另一部分&#xff0c;然后遞歸地對這兩部分進行排序。以下是快…

前端構建工具(webpackvite)

這里寫目錄標題 構建工具webpack介紹配置文件簡介entryoutputloaderbabel插件開發服務器&#xff08;webpack-dev-server&#xff09;soureMap vite 構建工具 當我們習慣了在node中編寫代碼的方式后&#xff0c;在回到前端編寫html、css、js這些東西會感覺到各種的不便。比如:…

夏季戶外綜合征怎么預防

以下是一些預防夏季戶外綜合征的有效方法&#xff1a; 做好防曬措施&#xff1a; 涂抹高倍數的防曬霜&#xff0c;每隔 2 - 3 小時重新涂抹一次。比如選擇 SPF50、PA 的防曬霜。佩戴寬邊帽子、太陽鏡和遮陽傘&#xff0c;減少陽光直射面部和眼睛。像漁夫帽、大檐帽能有效遮擋陽…

12-阿里云單細胞處理-PBMC(by-jmzeng)

scRNA_10X/seurat-v2/sup-patient1-PBMC.Rmd at master jmzeng1314/scRNA_10X (github.com) s04-運行seurat流程處理一萬個單細胞轉錄組數據并自動化出報告_嗶哩嗶哩_bilibili #section 3已更新#「生信技能樹」單細胞公開課2021_嗶哩嗶哩_bilibili 上傳讀取數據 可以配置租…

模擬型題目

題目類型&#xff1a; 給定操作&#xff0c;允許操作任意次 思路收集&#xff1a; 1.暴力遍歷&#xff1a;如Problem - B - Codeforces 直接讓每一個不同的進行操作 2.歸納&#xff1a;根據模擬來發現規律

RTK_ROS_導航(4):ROS中空地圖的生成與加載

1. 地圖加載 構建空白 Map 如下,以下為python代碼,生成了output_image.pgm 文件 一般你在什么地方運行該代碼,這個文件就生成在什么地方 import numpy as np size = 100 # 單位:m resulition = 0.05 # 單位:mw = round(size / resulition) IMAGE_DATA = np.zeros((w

ChatGPT:Swagger 的疑問

ChatGPT&#xff1a;Swagger 的疑問 這段代碼是做什么的&#xff0c;為什么每個微服務的寫法都一樣 springdoc:api-docs:enabled: true # 1. 是否開啟 Swagger 接文檔的元數據path: /v3/api-docsswagger-ui:enabled: true # 2.1 是否開啟 Swagger 文檔的官方 UI 界面path: /sw…

音視頻解封裝demo:使用libmp4v2解封裝(demux)出mp4文件中的h264視頻數據和aac語音數據

1、README 前言 本demo是使用的mp4v2來將mp4文件解封裝得到h264、aac的&#xff0c;目前demo提供的.a靜態庫文件是在x86_64架構的Ubuntu16.04編譯得到的&#xff0c;如果想在其他環境下測試demo&#xff0c;可以自行編譯mp4v2并替換相應的庫文件&#xff08;libmp4v2.a&#…