python學習筆記--實現簡單的爬蟲(一)

任務:爬取豆瓣最受歡迎的250個電影的資料

鏈接:豆瓣電影 Top 250

用瀏覽器打開后,使用F12或鼠標右鍵--檢查,查看網頁的源代碼,分析網頁結構,如下圖所示:

分析后得知:
1.電影名位于class為hd的div中,里邊嵌套中一層a標簽和span標簽,最終目的地為<span class="title"></span>?;

2.電影評分位于class_="rating_num"的span中;

3.?電影資料位于class_="bd"的div中;

參見下圖:

下面通過編寫python代碼,爬取最受歡迎250部電影的名字,評分和電影資料,并導出到movies.txt文件中, 下面簡要說下編碼實現過程:

1.導入2個第三方庫:requests用于發送請求,bs4用于將復雜的網頁代碼結構解析成可讀性強的書籍目錄索引結構;

2.headers必不可少,很多網頁都有反爬機制,使用headers能在一定程度繞開反爬機制,

3.按照上面分析出,提取出電影名,評分和電影資料,并存儲到各自的集合中;

4.找出總面數,在for循環中逐頁提取;

5.最后把所有頁碼中提取出來的信息輸出到movies.txt文件中。

import bs4
import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}def get_response(url):response = requests.get(url, headers=headers)return responsedef find_movies(response):soup = bs4.BeautifulSoup(response.text, 'html.parser')#電影名movies = []targets = soup.find_all("div", class_="hd")for target in targets:movies.append(target.a.span.text)#電影評分ranks = []targets = soup.find_all("span", class_="rating_num")for target in targets:ranks.append('評分:%s'% target.text)#電影資料messages = []targets = soup.find_all("div", class_="bd")for target in targets:try:messages.append(target.p.text.split('\n')[1].strip()+target.p.text.split('\n')[2].strip())except:continueresult = []length = len(movies)for i in range(length):result.append((movies[i]+ranks[i]+messages[i]+'\n'))return result# 找出一共有多少頁
def find_pages(response):soup = bs4.BeautifulSoup(response.text, 'html.parser')# 找到總頁數total_pages = soup.find("span", class_="next").previous_sibling.previous_sibling.textreturn int(total_pages)# 爬取所有電影
def crawl_movies():url = 'https://movie.douban.com/top250'res = get_response(url)total_pages = find_pages(res)movies = []for i in range(total_pages):page_url = url + '?start=' + str(i*25)page_res = get_response(page_url)movies.extend(find_movies(page_res))with open('movies.txt', 'w', encoding='utf-8') as f:for movie in movies:f.write(movie)if __name__ == '__main__':crawl_movies()

溫馨提示:爬蟲一定要遵守網站的robot協議,友好爬取,別把對方的網站爬崩了。

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

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

相關文章

Postgresql 刪除數據庫報錯

1、刪除數據庫時&#xff0c;報錯存在其他會話連接 ## 錯誤現象&#xff0c;存在其他的會話連接正在使用數據庫 ERROR: database "cs" is being accessed by other users DETAIL: There is 1 other session using the database.2、解決方法 ## 終止被刪除數據庫下…

self Attention為何除以根號dk?(全新角度)

全網最獨特解析&#xff1a;self Attention為何除根號dk&#xff1f; 一、假設條件&#xff1a;查詢向量和鍵向量服從正態分布 假設查詢向量 q i q_i qi?和鍵向量 k j k_j kj?的每個分量均為獨立同分布的隨機變量&#xff0c;且服從標準正態分布&#xff0c;即&#xff1a;…

numpy學習筆記10:arr *= 2向量化操作性能優化

numpy學習筆記10&#xff1a;arr * 2向量化操作性能優化 在 NumPy 中&#xff0c;直接對整個數組進行向量化操作&#xff08;如 arr * 2&#xff09;的效率遠高于顯式循環&#xff08;如 for i in range(len(arr)): arr[i] * 2&#xff09;。以下是詳細的解釋&#xff1a; 1. …

Cursor+Claude-3.5生成Android app

一、Android Studio下載 https://developer.android.com/studio?hlzh-tw#get-android-studio 等待安裝完成 二、新建工程 點擊new project 選擇Empty Activity 起一個工程名 當彈出這個框時 可以在settings里面選擇No proxy 新建好后如下 點擊右邊模擬器&#xff0c…

WPF Reactive 數據綁定

文章目錄 Combox 綁定List-通過枚舉綁定方法一:方法二:Button 綁定TextBlock綁定NumericUpDown綁定Expander綁定checkbox綁定NumericUpDownCombox 綁定List-通過枚舉綁定 方法一: ViewControl using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; usin…

算法及數據結構系列 - 滑動窗口

系列文章目錄 算法及數據結構系列 - 二分查找 算法及數據結構系列 - BFS算法 算法及數據結構系列 - 動態規劃 算法及數據結構系列 - 雙指針 算法及數據結構系列 - 回溯算法 算法及數據結構系列 - 樹 文章目錄 滑動窗口框架思路經典題型76. 最小覆蓋子串567. 字符串的排列438. …

Android adb調試應用程序

啟動app 有的時候app不是預先安裝的&#xff0c;也不能從界面start一個app&#xff0c;這時需要后臺拉起app。 $adb shell am start package.name/Activity.name 例如&#xff0c;android原生camera app&#xff0c; 包名為com.android.camera2&#xff0c; mainActivity名為…

Java EE(15)——網絡原理——TCP協議解析一

一.確認應答/(確認)序列號 接收方接收到數據后&#xff0c;向發送方返回一個確認信號(ack)&#xff0c;告訴發送方數據被成功接收。ACK報文段只是作為確認使用的&#xff0c;一般來說不攜帶應用層數據&#xff08;載荷&#xff09;&#xff0c;也就是說只有報頭部分。但有可能…

node-ddk,electron 組件, 打開新窗口

node-ddk 打開新窗口 https://blog.csdn.net/eli960/article/details/146207062 也可以下載demo直接演示 http://linuxmail.cn/go#node-ddk 本文講解如何在渲染進程發起創建新窗口, 包括 window.open 在主進程定義窗口類型 import main, { NODEDDK } from "node-ddk…

git管理時keil項目忽略文件列表

在使用 Git 管理 Keil MDK&#xff08;μVision 5&#xff09;工程時&#xff0c;需要忽略編譯生成的臨時文件、調試文件、用戶配置等非必要內容。以下是忽略文件的詳細列表及說明&#xff0c;可直接保存為 .gitignore 文件&#xff1a; Keil MDK 工程的 .gitignore 文件 giti…

C#單例模式

單例模式 (Singleton),保證一個類僅有一個實例&#xff0c;并提供一個訪問它的全局訪問點。通常我們可以讓一個全局變量使得一個對象被訪問&#xff0c;但它不能防止你實例化對個對象&#xff0c;一個最好的辦法就是&#xff0c;讓類自身負責保護它的唯一實例。這個類可以保證沒…

ZYNQ的cache原理與一致性操作

在Xilinx Zynq SoC中&#xff0c;Cache管理是確保處理器與外部設備&#xff08;如FPGA邏輯、DMA控制器&#xff09;之間數據一致性的關鍵。Zynq的ARM Cortex-A9處理器包含L1 Cache&#xff08;指令/數據&#xff09;和L2 Cache&#xff0c;其刷新&#xff08;Flush/Invalidate&…

Linux NFS、自動掛載與系統啟動管理指南

1. NFS客戶端掛載導出的目錄的方式 NFS&#xff08;網絡文件系統&#xff09; 允許將遠程服務器的目錄掛載到本地&#xff0c;像訪問本地文件一樣操作遠程文件。掛載方式主要有兩種&#xff1a; 手動掛載&#xff1a;使用 mount 命令&#xff08;臨時生效&#xff0c;重啟后丟…

NO.55十六屆藍橋杯備戰|排序|插入|選擇|冒泡|堆|快速|歸并(C++)

插?排序 插?排序(Insertion Sort)類似于玩撲克牌插牌過程&#xff0c;每次將?個待排序的元素按照其關鍵字??插?到前?已排好序的序列中&#xff0c;按照該種?式將所有元素全部插?完成即可 #include <iostream> using namespace std; const int N 1e5 10; …

【Oracle資源損壞類故障】:詳細了解壞塊

目錄 1、物理壞塊與邏輯壞塊 1.1、物理壞塊 1.2、邏輯壞塊 2、兩個壞塊相關的參數 2.1、db_block_checksum 2.2、db_block_checking 3、檢測壞塊 3.1、告警日志 3.2、RMAN 3.3、ANALYZE 3.4、數據字典 3.5、DBVERIFY 4、修復壞塊 4.1、RMAN修復 4.2、DBMS_REPA…

計算機網絡高頻(二)TCP/IP基礎

計算機網絡高頻(二)TCP/IP基礎 1.什么是TCP/IP?? TCP/IP是一種網絡通信協議,它是互聯網中最常用的協議之一。TCP/IP有兩個基本的協議:TCP(傳輸控制協議)和IP(互聯網協議)。 TCP(Transmission Control Protocol,傳輸控制協議)是一種可靠的、面向連接的協議。它負…

【大模型算法工程】大模型應用工具化、忠誠度以及知識庫場景下PDF雙欄解析問題的討論

1. 大模型時代應用工具化以及無忠誠度現象討論 接觸大模型久了&#xff0c;也慢慢探到一些大模型能力表現非常自然和突出的場景&#xff0c;比如AI搜索&#xff08;依賴大模型的理解總結能力&#xff09;、AI對話&#xff08;即chat&#xff0c;依賴大模型的生成能力&#xff0…

Java EE(13)——網絡編程——UDP/TCP回顯服務器

前言 本文主要介紹UDP和TCP相關的API&#xff0c;并且基于這兩套API實現回顯服務器 UDP和TCP UDP和TCP屬于網絡五層模型中傳輸層的協議 特點&#xff1a; UDP&#xff1a;無連接&#xff0c;不可靠&#xff0c;面向數據包&#xff0c;全雙工 TCP&#xff1a;有連接&#xff…

【藍橋杯】12111暖氣冰場(多源BFS 或者 二分)

思路 這題可以用BFS做&#xff0c;也可以用二分來做。 用二分這里只提供一個思路&#xff1a;對時間來二分查找&#xff0c;check函數就是檢查在特定的時間 t 0 t_0 t0?內每一個暖氣爐的傳播距離能否覆蓋所有格子。 用BFS做&#xff1a; 由幾個點開始向外擴散&#xff0c;知道…

使用bat批量獲取WORD中包含對應字符的段落,段落使用回車換行

get_word_paragraphs.vbs 獲取命令行參數 If WScript.Arguments.Count 0 ThenWScript.Quit 1 End If 獲取 Word 文檔路徑 docPath WScript.Arguments(0) 創建 Word 應用程序對象 Set objWord CreateObject("Word.Application") objWord.Visible False 打開 Word …