閱讀提示:我今天才開始嘗試爬蟲,寫的不好請見諒。
一、準備工具
- requests庫:發送HTTP請求并獲取網頁內容。
- BeautifulSoup庫:解析HTML頁面并提取數據。
- pandas庫:保存抓取到的數據到CSV文件中。
二、爬取步驟
- 發送請求: 對于目標網頁,使用
requests.get()
發送HTTP請求并獲取網頁的HTML內容。 - 解析HTML: 使用
BeautifulSoup
解析網頁,并尋找包含信息的HTML元素。 - 提取數據: 找到合適的HTML標簽和類名,提取信息。
- 分頁爬取: 如果網站有分頁,可以在代碼中處理分頁邏輯,循環抓取每一頁的數據。
- 保存數據: 使用
pandas
或內置的文件寫入功能,將抓取到的數據保存到CSV文件中。
三、爬蟲代碼
網頁
<div class="pic"><em>1</em><a href="https://movie.douban.com/subject/1292052/"><img width="100" alt="肖申克的救贖" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.webp"></a></div>
<div class="bd">
<p>
導演: 弗蘭克·德拉邦特 Frank Darabont 主演: 蒂姆·羅賓斯 Tim Robbins /...<br>
1994 / 美國 / 犯罪 劇情
</p><div>
<span class="rating5-t"></span>
<span class="rating_num" property="v:average">9.7</span>
<span property="v:best" content="10.0"></span>
<span>3148544人評價</span>
</div><p class="quote">
<span>希望讓人自由。</span>
</p>
</div>
?爬蟲代碼:(我這里只爬蟲了一部分)
from bs4 import BeautifulSoup
import requests
import pandas as pddef getFilm():try:# 添加請求頭headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'}# 獲取網頁內容res = requests.get("https://movie.douban.com/top250?start=0&filter=", headers=headers, timeout=10)res.encoding = 'utf-8' # 修正編碼設置# 解析網頁soup = BeautifulSoup(res.text, 'html.parser')# 獲取數據film_data=soup.find('div',class_='hd')if not film_data:print("未找到信息")print(res.status_code) # 應該是200return Nonename=soup.find('span',class_='title').text.strip()score=soup.find('span',class_='rating_num').text.strip()word=soup.find('p',class_='quote')dictum=word.find('span').get_text()df=pd.DataFrame({'電影名':[name],'評分':[score],'寄語':dictum})return dfexcept Exception as e:print(f"發生錯誤: {e}")return Nonedef main():df= getFilm() # 修正變量名if df is not None:print(df) # 打印DataFrameelse:print("未能獲取數據")if __name__ == '__main__':main()
四、拓展(設置請求頭)
請求頭(HTTP Headers)是客戶端(如瀏覽器或爬蟲)在發送 HTTP 請求時,附帶的一組?鍵值對(Key-Value)信息,用于告訴服務器?你是誰、你想獲取什么、以及如何返回數據。
請求頭字段 | 示例值 | 作用 |
User-Agent | Mozilla/5.0 (Windows NT 10.0; Win64; x64) | 告訴服務器你的瀏覽器或設備類型 |
Accept | text/html,application/xhtml+xml | 告訴服務器你希望接收的數據類型 |
Accept-Language | zh-CN,zh;q=0.9 | 告訴服務器你希望返回的語言 |
Referer | https://www.google.com/ | 告訴服務器你從哪個頁面跳轉過來 |
Host | movie.douban.com | 告訴服務器你要訪問的域名 |
Cookie | sessionid=abc123 | 用于身份驗證(如登錄狀態) |
Connection | keep-alive | 控制 TCP 連接是否保持 |
Accept-Encoding | gzip, deflate | 告訴服務器你支持的壓縮方式 |
?