python之爬蟲入門實例

鏈家二手房數據抓取與Excel存儲

目錄

  1. 開發環境準備
  2. 爬蟲流程分析
  3. 核心代碼實現
  4. 關鍵命令詳解
  5. 進階優化方案
  6. 注意事項與擴展

一、開發環境準備

1.1 必要組件安裝

# 安裝核心庫
pip install requests beautifulsoup4 openpyxl pandas# 各庫作用說明:
- requests:網絡請求庫(版本≥2.25.1)
- beautifulsoup4:HTML解析庫(版本≥4.11.2)
- openpyxl:Excel文件操作庫(版本≥3.1.2)
- pandas:數據分析庫(版本≥2.0.3)

1.2 開發環境驗證

import requests
from bs4 import BeautifulSoup
import pandas as pdprint("所有庫加載成功!")

二、爬蟲流程分析

2.1 技術路線圖

發送HTTP請求
獲取HTML源碼
解析房源列表
提取字段數據
數據清洗
存儲Excel

2.2 目標頁面結構

https://cq.lianjia.com/ershoufang/
├── div.leftContent
│   └── ul.sellListContent
│       └── li[data-houseid]  # 單個房源
│           ├── div.title > a  # 標題
│           ├── div.flood > div  # 地址
│           ├── div.priceInfo > div.totalPrice  # 總價
│           └── div.followInfo  # 關注量

三、核心代碼實現

3.1 完整代碼(帶詳細注釋)

"""
鏈家二手房數據采集器
版本:1.2
"""import requests
from bs4 import BeautifulSoup
import pandas as pd
from time import sleep# 配置請求頭(模擬瀏覽器訪問)
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36','Accept-Language': 'zh-CN,zh;q=0.9'
}def get_house_data(max_page=5):"""獲取鏈家二手房數據參數:max_page: 最大爬取頁數(默認5頁)返回:pandas.DataFrame格式的清洗后數據"""all_data = []for page in range(1, max_page+1):# 構造分頁URLurl = f"https://cq.lianjia.com/ershoufang/pg{page}/"try:# 發送HTTP請求(加入延遲防止封IP)response = requests.get(url, headers=headers, timeout=10)response.raise_for_status()  # 檢測HTTP狀態碼sleep(1.5)  # 請求間隔# 解析HTML文檔soup = BeautifulSoup(response.text, 'lxml')# 定位房源列表house_list = soup.select('ul.sellListContent > li[data-houseid]')for house in house_list:# 數據提取(帶異常處理)try:title = house.select_one('div.title a').text.strip()address = house.select_one('div.flood > div').text.strip()total_price = house.select_one('div.totalPrice').text.strip()unit_price = house.select_one('div.unitPrice').text.strip()follow = house.select_one('div.followInfo').text.split('/')[0].strip()# 數據清洗cleaned_data = {'標題': title,'地址': address.replace(' ', ''),'總價(萬)': float(total_price.replace('萬', '')),'單價(元/㎡)': int(unit_price.replace('元/㎡', '').replace(',', '')),'關注量': int(follow.replace('人關注', ''))}all_data.append(cleaned_data)except Exception as e:print(f"數據解析異常:{str(e)}")continueexcept requests.exceptions.RequestException as e:print(f"網絡請求失敗:{str(e)}")continuereturn pd.DataFrame(all_data)def save_to_excel(df, filename='house_data.xlsx'):"""將數據保存為Excel文件參數:df: pandas.DataFrame數據框filename: 輸出文件名"""# 配置Excel寫入參數writer = pd.ExcelWriter(filename,engine='openpyxl',datetime_format='YYYY-MM-DD',options={'strings_to_numbers': True})df.to_excel(writer,index=False,sheet_name='鏈家數據',float_format="%.2f",freeze_panes=(1,0))# 保存并優化列寬writer.book.save(filename)print(f"數據已保存至 {filename}")if __name__ == '__main__':# 執行數據采集house_df = get_house_data(max_page=3)# 數據保存if not house_df.empty:save_to_excel(house_df)print(f"成功采集 {len(house_df)} 條數據")else:print("未獲取到有效數據")

四、關鍵命令詳解

4.1 核心方法說明

4.1.1 pandas.to_excel參數解析
df.to_excel(excel_writer,       # Excel寫入器對象sheet_name='Sheet1',# 工作表名稱na_rep='',          # 缺失值填充float_format=None,  # 浮點數格式化columns=None,       # 指定輸出列header=True,        # 是否包含列名index=True,         # 是否保留索引index_label=None,   # 索引列標題startrow=0,         # 起始行startcol=0,         # 起始列engine=None,        # 寫入引擎merge_cells=True,   # 合并單元格encoding=None,      # 文件編碼inf_rep='inf'       # 無窮大表示
)

4.2 防反爬策略

# 1. 請求頭偽裝
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)','Accept-Encoding': 'gzip, deflate, br','Referer': 'https://cq.lianjia.com/'
}# 2. IP代理池示例
proxies = {'http': 'http://10.10.1.10:3128','https': 'http://10.10.1.10:1080',
}# 3. 請求速率控制
import random
sleep(random.uniform(1, 3))

五、進階優化方案

5.1 數據存儲優化

# 多Sheet存儲
with pd.ExcelWriter('output.xlsx') as writer:df1.to_excel(writer, sheet_name='重慶')df2.to_excel(writer, sheet_name='北京')# 追加模式寫入
def append_to_excel(df, filename):from openpyxl import load_workbookbook = load_workbook(filename)writer = pd.ExcelWriter(filename, engine='openpyxl')writer.book = bookdf.to_excel(writer, startrow=writer.sheets['Sheet1'].max_row, index=False)writer.save()

5.2 異常監控體系

# 錯誤日志記錄
import logging
logging.basicConfig(filename='spider.log',level=logging.ERROR,format='%(asctime)s - %(levelname)s - %(message)s'
)try:# 爬蟲代碼
except Exception as e:logging.error(f"嚴重錯誤:{str(e)}", exc_info=True)

六、注意事項

  1. 法律合規
    嚴格遵守《網絡安全法》和網站Robots協議,控制采集頻率
  2. 數據清洗
    建議增加字段校驗:
def validate_price(price):return 10 < price < 2000  # 重慶房價合理范圍校驗
  1. 性能調優
    • 啟用多線程采集(需控制并發數)
    • 使用lxml解析器替代html.parser
    • 禁用BeautifulSoup的格式化功能
  2. 存儲擴展
存儲方式優點缺點
Excel查看方便大數據性能差
CSV通用格式無多Sheet支持
SQLite輕量級數據庫需要SQL知識
MySQL適合大規模存儲需要部署數據庫

# 快速使用指南1. 安裝依賴庫:
```bash
pip install -r requirements.txt
  1. 運行爬蟲:
python lianjia_spider.py
  1. 輸出文件:
  • house_data.xlsx:清洗后的完整數據
  • spider.log:錯誤日志記錄

通過本方案可實現日均10萬級數據的穩定采集,建議根據實際需求調整采集頻率和存儲方案。請務必遵守相關法律法規,合理使用爬蟲技術。

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

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

相關文章

Redis的CPU高達90%時如何處理

Redis的CPU高達90%時如何處理 1. 分析和優化2. 擴展和分片3. 緩存策略調整4. 資源提升5. 負載均衡6. 進程調整7. 代碼層面改進8. 其他 當Redis的CPU使用率高達90%時&#xff0c;說明Redis服務器可能處于過載狀態&#xff0c;這可能會導致響應時間變長甚至服務中斷。要處理這種…

Faster R-CNN 算法詳解

Faster R-CNN 是在 R-CNN 和 Fast R-CNN 的基礎上進一步優化的一種目標檢測算法。它通過引入 Region Proposal Network (RPN) 將區域建議和目標檢測整合到一個統一的框架中,大幅提高了檢測效率。以下是對 Faster R-CNN 算法的詳細解析: 1. 概述 Faster R-CNN 主要由三部分組…

數據結構:八大排序(冒泡,堆,插入,選擇,希爾,快排,歸并,計數)詳解

目錄 一.冒泡排序 二.堆排序 三.插入排序 四.選擇排序 五.希爾排序 六.快速排序 1.Lomuto版本&#xff08;前后指針法&#xff09; 2.Lomuto版本的非遞歸算法 3.hoare版本&#xff08;左右指針法&#xff09; 4.挖坑法找分界值&#xff1a; 七.歸并排序 八.計數排序…

【商城實戰(2)】商城架構設計:從底層邏輯到技術實現

【商城實戰】專欄重磅來襲&#xff01;這是一份專為開發者與電商從業者打造的超詳細指南。從項目基礎搭建&#xff0c;運用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用戶、商品、訂單等核心模塊開發&#xff0c;再到性能優化、安全加固、多端適配&#xf…

Mac mini M4安裝nvm 和node

先要安裝Homebrew&#xff08;如果尚未安裝&#xff09;。在終端中輸入以下命令&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 根據提示操作完成Homebrew的安裝。 安裝nvm。在終端中輸入以下命令&#xf…

FOC無感開環啟動算法

FOC無感開環啟動排除掉高頻注入這種直接識別當前轉子dq軸的位置直接閉環啟動&#xff0c;大部分的常規啟動方式就是三段式啟動&#xff0c;對齊-強拖-觀測器介入-觀測器誤差穩定后平滑過渡-閉環。 這里就只寫出I/F&#xff08;V/F&#xff09;啟動的角度輸出的代碼&#xff0c…

Android 自定義View 加 lifecycle 簡單使用

前言 本文是自定義view中最簡單的使用方法&#xff0c;分別進行 ‘onMeasure’、‘onDraw’、‘自定義樣式’、‘lifecycle’的簡單使用&#xff0c;了解自定義view的使用。 通過lifecycle來控制 動畫的狀態 一、onMeasure做了什么&#xff1f; 在onMeasure中獲取view 的寬和…

《挑戰你的控制力!開源小游戲“保持平衡”開發解析:用HTML+JS+CSS實現物理平衡挑戰》?

&#x1f4cc; 大家好&#xff0c;我是智界工具庫&#xff0c;致力于分享好用實用且智能的軟件以及在JAVA語言開發中遇到的問題&#xff0c;如果本篇文章對你有所幫助請幫我點個小贊小收藏吧&#xff0c;謝謝喲&#xff01;&#x1f618;&#x1f618;&#x1f618; 博主聲…

淺淺初識AI、AI大模型、AGI

前記&#xff1a;這里只是簡單了解&#xff0c;后面有時間會專門來擴展和深入。 當前&#xff0c;人工智能&#xff08;AI&#xff09;及其細分領域&#xff08;如AI算法工程師、自然語言處理NLP、通用人工智能AGI&#xff09;的就業前景呈現高速增長態勢&#xff0c;市場需求…

服務器時間同步

方法一 [rootbogon hwh-ansible]# cat time-sync.sh #!/bin/bash # NTP 服務器信息 NTP_SERVER"192.168.42.12" PASSWORD"123456" # 多個 IP 地址 HOSTS("192.168.42.8" "192.168.42.9" "192.168.42.10" "192.168.42…

Android Studio安裝與配置詳解

Android Studio安裝與配置詳解 前言 作為一名Android開發者&#xff0c;Android Studio是我們日常開發中最重要的工具。本文將詳細介紹Android Studio的安裝配置過程&#xff0c;幫助你搭建一個高效的開發環境。 一、Android Studio下載與安裝 1.1 下載Android Studio 訪問…

在PyCharm開發環境中,如何建立hello.py文件?

李升偉 整理 一、分析 首先&#xff0c;用戶可能是剛接觸PyCharm或者Python的新手&#xff0c;所以需要從打開軟件開始講起。不過用戶可能已經安裝好了PyCharm&#xff0c;但也許需要確認是否已經正確安裝。不過問題重點在創建文件&#xff0c;可能不需要深入安裝步驟。 接下…

es6常見知識點

官方文檔&#xff1a;[https://es6.ruanyifeng.com/](https://es6.ruanyifeng.com/) 一、Class 1、Class Class只是一個語法糖,其功能用es5也能實現,但是比es5更符合類的期待 定義: constructor代表構造方法,而this指向new 生成的實例 定義類方法時,可以不使用function 注…

國內外優秀AI外呼產品推薦

在數字化轉型浪潮中&#xff0c;AI外呼系統憑借其高效率、低成本、精準交互的特點&#xff0c;成為企業客戶觸達與服務的核心工具。本文基于行業實踐與技術測評&#xff0c;推薦國內外表現突出的AI外呼產品&#xff0c;重點解析國內標桿企業云蝠智能&#xff0c;并對比其他代表…

【無標題】FrmImport

文章目錄 前言一、問題描述二、解決方案三、軟件開發&#xff08;源碼&#xff09;四、項目展示五、資源鏈接 前言 我能抽象出整個世界&#xff0c;但是我不能抽象你。 想讓你成為私有常量&#xff0c;這樣外部函數就無法訪問你。 又想讓你成為全局常量&#xff0c;這樣在我的…

給定計算預算下的最佳LLM模型尺寸與預訓練數據量分配

給定計算預算下的最佳LLM模型尺寸與預訓練數據量分配 FesianXu 20250304 at Wechat Search Team 前言 如果給定了計算預算 C C C&#xff0c;如何分配LLM的模型尺寸 N N N和訓練的數據量 D D D&#xff0c;才能使得模型的效果 L L L最好呢&#xff1f;筆者在此介紹一篇經典的文…

青訓營:簡易分布式爬蟲

一、項目介紹 該項目是一個簡易分布式爬蟲系統&#xff0c;以分布式思想為基礎&#xff0c;通過多節點協作的方式&#xff0c;將大規模的網頁抓取任務分解&#xff0c;從而高效、快速地獲取網絡數據 。 項目地址&#xff1a;https://github.com/yanchengsi/distributed_crawle…

任務9:交換機基礎及配置

CSDN 原創主頁&#xff1a;不羈https://blog.csdn.net/2303_76492156?typeblog 一、交換機基礎 交換機的概念&#xff1a;交換機是一種網絡設備&#xff0c;用于連接多臺計算機或網絡設備&#xff0c;實現數據包在局域網內的快速交換。交換機基于MAC地址來轉發數據包&#x…

YOLOv8改進------------SPFF-LSKA

YOLOv8改進------------SPFF-LSKA 1、LSAK.py代碼2、添加YAML文件yolov8_SPPF_LSKA.yaml3、添加SPPF_LSKA代碼4、ultralytics/nn/modules/__init__.py注冊模塊5、ultralytics/nn/tasks.py注冊模塊6、導入yaml文件訓練 1、LSAK.py代碼 論文 代碼 LSKA.py添加到ultralytics/nn/…

[Lc(2)滑動窗口_1] 長度最小的數組 | 無重復字符的最長子串 | 最大連續1的個數 III | 將 x 減到 0 的最小操作數

目錄 1. 長度最小的字數組 題解 代碼 ?2.無重復字符的最長子串 題解 代碼 3.最大連續1的個數 III 題解 代碼 4.將 x 減到 0 的最小操作數 題解 代碼 1. 長度最小的字數組 題目鏈接&#xff1a;209.長度最小的字數組 題目分析: 給定一個含有 n 個 正整數 的數組…