成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

手把手教你使用Python抓取并存儲網頁數據!

開發 后端
本文將基于爬取B站視頻熱搜榜單數據并存儲為例,詳細介紹Python爬蟲的基本流程。如果你還在入門爬蟲階段或者不清楚爬蟲的具體工作流程,那么應該仔細閱讀本文!

爬蟲是Python的一個重要的應用,使用Python爬蟲我們可以輕松的從互聯網中抓取我們想要的數據,本文將基于爬取B站視頻熱搜榜單數據并存儲為例,詳細介紹Python爬蟲的基本流程。如果你還在入門爬蟲階段或者不清楚爬蟲的具體工作流程,那么應該仔細閱讀本文!

[[345561]]

第一步:嘗試請求

首先進入b站首頁,點擊排行榜并復制鏈接

 

  1. https://www.bilibili.com/ranking?spm_id_from=333.851.b_7072696d61727950616765546162.3 

現在啟動Jupyter notebook,并運行以下代碼

  1. import requests 
  2.  
  3. url = 'https://www.bilibili.com/ranking?spm_id_from=333.851.b_7072696d61727950616765546162.3' 
  4. res = requests.get('url') 
  5. print(res.status_code) 
  6. #200 

在上面的代碼中,我們完成了下面三件事

  • 導入requests
  • 使用get方法構造請求
  • 使用status_code獲取網頁狀態碼

可以看到返回值是200,表示服務器正常響應,這意味著我們可以繼續進行。

第二步:解析頁面

在上一步我們通過requests向網站請求數據后,成功得到一個包含服務器資源的Response對象,現在我們可以使用.text來查看其內容

可以看到返回一個字符串,里面有我們需要的熱榜視頻數據,但是直接從字符串中提取內容是比較復雜且低效的,因此我們需要對其進行解析,將字符串轉換為網頁結構化數據,這樣可以很方便地查找HTML標簽以及其中的屬性和內容。

在Python中解析網頁的方法有很多,可以使用正則表達式,也可以使用BeautifulSoup、pyquery或lxml,本文將基于BeautifulSoup進行講解.

Beautiful Soup是一個可以從HTML或XML文件中提取數據的第三方庫.安裝也很簡單,使用pip install bs4安裝即可,下面讓我們用一個簡單的例子說明它是怎樣工作的

  1. from bs4 import BeautifulSoup 
  2.  
  3. page = requests.get(url) 
  4. soup = BeautifulSoup(page.content, 'html.parser') 
  5. title = soup.title.text  
  6. print(title) 
  7. # 熱門視頻排行榜 - 嗶哩嗶哩 (゜-゜)つロ 干杯~-bilibili 

在上面的代碼中,我們通過bs4中的BeautifulSoup類將上一步得到的html格式字符串轉換為一個BeautifulSoup對象,注意在使用時需要制定一個解析器,這里使用的是html.parser。

接著就可以獲取其中的某個結構化元素及其屬性,比如使用soup.title.text獲取頁面標題,同樣可以使用soup.body、soup.p等獲取任意需要的元素。

第三步:提取內容

在上面兩步中,我們分別使用requests向網頁請求數據并使用bs4解析頁面,現在來到最關鍵的步驟:如何從解析完的頁面中提取需要的內容。

在Beautiful Soup中,我們可以使用find/find_all來定位元素,但我更習慣使用CSS選擇器.select,因為可以像使用CSS選擇元素一樣向下訪問DOM樹。

現在我們用代碼講解如何從解析完的頁面中提取B站熱榜的數據,首先我們需要找到存儲數據的標簽,在榜單頁面按下F12并按照下圖指示找到

可以看到每一個視頻信息都被包在class="rank-item"的li標簽下,那么代碼就可以這樣寫

  1. all_products = [] 
  2.  
  3. products = soup.select('li.rank-item') 
  4. for product in products: 
  5.     rank = product.select('div.num')[0].text 
  6.     name = product.select('div.info > a')[0].text.strip() 
  7.     play = product.select('span.data-box')[0].text 
  8.     comment = product.select('span.data-box')[1].text 
  9.     up = product.select('span.data-box')[2].text 
  10.     url = product.select('div.info > a')[0].attrs['href'] 
  11.  
  12.     all_products.append({ 
  13.         "視頻排名":rank, 
  14.         "視頻名": name, 
  15.         "播放量": play, 
  16.         "彈幕量": comment, 
  17.         "up主": up, 
  18.         "視頻鏈接": url 
  19.     }) 

在上面的代碼中,我們先使用soup.select('li.rank-item'),此時返回一個list包含每一個視頻信息,接著遍歷每一個視頻信息,依舊使用CSS選擇器來提取我們要的字段信息,并以字典的形式存儲在開頭定義好的空列表中。

可以注意到我用了多種選擇方法提取去元素,這也是select方法的靈活之處,感興趣的讀者可以進一步自行研究。

第四步:存儲數據

通過前面三步,我們成功的使用requests+bs4從網站中提取出需要的數據,最后只需要將數據寫入Excel中保存即可。

如果你對pandas不熟悉的話,可以使用csv模塊寫入,需要注意的是設置好編碼encoding='utf-8-sig',否則會出現中文亂碼的問題

  1. import csv 
  2. keys = all_products[0].keys() 
  3.  
  4. with open('B站視頻熱榜TOP100.csv', 'w', newline=''encoding='utf-8-sig') as output_file: 
  5.     dict_writer = csv.DictWriter(output_file, keys) 
  6.     dict_writer.writeheader() 
  7.     dict_writer.writerows(all_products) 

如果你熟悉pandas的話,更是可以輕松將字典轉換為DataFrame,一行代碼即可完成

  1. import pandas as pd 
  2. keys = all_products[0].keys() 
  3.  
  4. pd.DataFrame(all_products,columns=keys).to_csv('B站視頻熱榜TOP100.csv', encoding='utf-8-sig'

小結

至此我們就成功使用Python將b站熱門視頻榜單數據存儲至本地,大多數基于requests的爬蟲基本都按照上面四步進行。

不過雖然看上去簡單,但是在真實場景中每一步都沒有那么輕松,從請求數據開始目標網站就有多種形式的反爬、加密,到后面解析、提取甚至存儲數據都有很多需要進一步探索、學習。

本文選擇B站視頻熱榜也正是因為它足夠簡單,希望通過這個案例讓大家明白爬蟲的基本流程,最后附上完整代碼

  1. import requests 
  2. from bs4 import BeautifulSoup 
  3. import csv 
  4. import pandas as pd 
  5.  
  6. url = 'https://www.bilibili.com/ranking?spm_id_from=333.851.b_7072696d61727950616765546162.3' 
  7. page = requests.get(url) 
  8. soup = BeautifulSoup(page.content, 'html.parser') 
  9.  
  10. all_products = [] 
  11.  
  12. products = soup.select('li.rank-item') 
  13. for product in products: 
  14.     rank = product.select('div.num')[0].text 
  15.     name = product.select('div.info > a')[0].text.strip() 
  16.     play = product.select('span.data-box')[0].text 
  17.     comment = product.select('span.data-box')[1].text 
  18.     up = product.select('span.data-box')[2].text 
  19.     url = product.select('div.info > a')[0].attrs['href'] 
  20.  
  21.     all_products.append({ 
  22.         "視頻排名":rank, 
  23.         "視頻名": name, 
  24.         "播放量": play, 
  25.         "彈幕量": comment, 
  26.         "up主": up, 
  27.         "視頻鏈接": url 
  28.     }) 
  29.  
  30.  
  31. keys = all_products[0].keys() 
  32.  
  33. with open('B站視頻熱榜TOP100.csv', 'w', newline=''encoding='utf-8-sig') as output_file: 
  34.     dict_writer = csv.DictWriter(output_file, keys) 
  35.     dict_writer.writeheader() 
  36.     dict_writer.writerows(all_products) 
  37.  
  38. ### 使用pandas寫入數據 
  39. pd.DataFrame(all_products,columns=keys).to_csv('B站視頻熱榜TOP100.csv', encoding='utf-8-sig'

 

責任編輯:趙寧寧 來源: 早起Python
相關推薦

2025-05-07 00:31:30

2021-07-14 09:00:00

JavaFX開發應用

2021-12-02 10:25:25

HttpCanaryApp視頻

2022-12-07 08:42:35

2014-12-11 16:32:38

應用安全Web應用緩存控制頭域

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印機

2021-09-30 18:27:38

數據倉庫ETL

2020-12-08 10:32:15

Python郵件tcp

2021-08-02 07:35:19

Nacos配置中心namespace

2020-10-26 15:09:35

Python爬蟲網頁數據

2020-08-12 09:07:53

Python開發爬蟲

2022-07-22 12:45:39

GNU

2022-10-30 10:31:42

i2ccpuftrace

2020-05-15 08:07:33

JWT登錄單點

2021-03-12 10:01:24

JavaScript 前端表單驗證

2021-12-15 08:49:21

gpio 子系統pinctrl 子系統API

2021-12-29 20:20:25

結構化數據Pandas

2011-02-22 13:46:27

微軟SQL.NET

2021-02-26 11:54:38

MyBatis 插件接口
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 超碰免费在线 | 欧美日韩国产精品一区 | 国产精品久久av | 亚洲人成人一区二区在线观看 | 久久综合伊人 | 国产精品一区二区久久久久 | 国产精品国产精品 | 国产欧美一区二区三区日本久久久 | 国产成人自拍av | 亚洲精品99| 黄色大全免费看 | 99精品欧美一区二区三区综合在线 | 日本网站免费观看 | 午夜视频免费网站 | 国产欧美一区二区三区国产幕精品 | 一本色道久久综合亚洲精品高清 | 色综合久久天天综合网 | 国产精品永久免费视频 | 日一区二区 | 欧美日韩国产高清视频 | 国产乱码精品1区2区3区 | 国产精品亚洲精品久久 | 亚洲视频手机在线 | 国产亚洲精品美女久久久久久久久久 | 无码日韩精品一区二区免费 | 成年人免费在线视频 | 精品欧美乱码久久久久久 | 香蕉大人久久国产成人av | 欧美中文字幕一区 | 久久久久久久久国产精品 | 精品国产视频 | 日本精品视频 | 精品国产1区2区3区 在线国产视频 | 久久精品天堂 | 久久一区二区三区电影 | 久久99深爱久久99精品 | 日韩亚洲一区二区 | 日本又色又爽又黄又高潮 | 99久久免费精品国产男女高不卡 | 国产剧情一区 | 成人在线观 |