Python貝殼網二手小區數據爬取(2025年3月更)

文章目錄

  • 一、代碼整體架構解析
  • 二、各部分代碼詳解
    • 1. main()主函數解析
    • 2. 會話初始化(偽裝瀏覽器身份)
    • 3. 動態參數生成(反爬蟲核心機制)
    • 4. 列表頁抓取(獲取小區列表)
    • 5. 列表頁解析(提取小區信息)
    • 6. 多線程詳情頁抓取(高效采集)
    • 7. 詳情頁解析(深度數據提取)
    • 8. 主流程控制(程序大腦)
  • 三、核心技術點總結
  • 四、完整代碼
  • 五、運行效果
  • 六、特別說明(運行不了的時候看這里!)

在這里插入圖片描述

上次寫了用python爬取安居客二手小區數據,這次應粉絲要求寫一篇爬取貝殼網二手小區數據的教程,因為貝殼網的反爬策略比安居客的更為復雜,所以這次就大膽一試!!!
這次教程內容大部分都是由Ai幫我寫的,所以可能不太詳細!! 歡迎私信或者評論區提問~~
先來看看網頁,在這里找到小區,并選擇具體的市縣區域:
在這里插入圖片描述
然后我們F12打開網絡看看數據在哪里
在這里插入圖片描述
在這里插入圖片描述
我們在這個文檔里面找到了對應的小區數據,言外之意只需要請求這個url即可得到想要的數據啦~
同時,在這些信息里面還有一個小區詳情頁的鏈接,里面有諸如小區的容積率、綠化率、開發商等等信息,我們一起給它爬下來
在這里插入圖片描述


大體思路就是:

  1. 先用一些用戶信息如瀏覽器類型、cookie等信息來包裝爬蟲
  2. 請求一遍小區列表的url來獲取小區總數
  3. 通過小區總數來計算需要請求的頁數,使用for循環來遍歷每一頁的小區
  4. 提取每頁小區的數據,得到每個小區的詳情頁鏈接后繼續發送請求來進入詳情頁
  5. 提取小區詳情頁數據
  6. 將所有結果保存為一個excel表格

廢話不多說,直接上干貨~

一、代碼整體架構解析

# 導入必要庫(相當于工具箱)
import requests  # 網絡請求工具
import time      # 時間控制工具
import random    # 隨機數生成器
import pandas as pd  # 數據表格工具
from bs4 import BeautifulSoup  # HTML解析器
import math      # 數學計算工具
from concurrent.futures import ThreadPoolExecutor, as_completed  # 多線程工具

下面是整體的函數流程以及每個函數大體的作用~

序號函數名稱功能描述輸入參數返回值
1init_session(config)初始化網絡會話對象config: 用戶配置字典requests.Session對象
2get_params(session)生成動態請求參數session: 會話對象請求參數字典
3fetch_list_page()抓取列表頁數據session, page_url解析后的數據列表
4parse_list_page(html)解析列表頁HTML內容html: 頁面源代碼字符串小區信息列表
5fetch_detail_batch()批量抓取詳情頁數據session, urls詳情數據字典
6parse_detail_page()解析詳情頁完整信息session, url詳細字段字典
7crawl_full_data()主控流程(分頁抓取數據)session合并后的完整數據列表

二、各部分代碼詳解

1. main()主函數解析

要修改的地方主要有四個,其余的不需要特別的改動!!!!

  1. 城市(city)
  2. 市縣(region)
  3. Cookies
  4. excel表格輸出的路徑
# 主程序入口(程序起點)
if __name__ == "__main__":# ================== 用戶配置區域 ==================CONFIG = {"city": "fs",       # 目標城市拼音(如: 佛山->fs,上海->sh)"region": "nanhai", # 目標區域拼音(如: 南海區->nanhai)"cookies": {        # 必需Cookie'lianjia_uuid': '自修修改','lianjia_token': '自行修改','security_ticket': '自行修改'},"srcid": "自行修改"}#輸出的excel路徑output_name = f'{CONFIG["city"]}_{CONFIG["region"]}_小區數據.xlsx'# ================================================# 初始化會話session = init_session(CONFIG)# 執行爬取start_time = time.time()final_data = crawl_full_data(session)# 保存結果if final_data:df = pd.DataFrame(final_data)[['小區名稱', '參考均價', '成交信息', '出租信息', '行政區', '商圈', '建筑年代','詳情頁均價', '建筑類型', '房屋總數', '樓棟總數', '綠化率', '容積率','交易權屬', '建成年代', '供暖類型', '用水類型', '用電類型','物業費', '附近門店', '物業公司', '開發商', '詳情頁鏈接']] df.to_excel(output_name, index=False)print(f"數據已保存至: {output_name}")print(f"總計 {len(df)} 條數據,耗時 {(time.time()-start_time)/60:.1f} 分鐘")

🔍 ?參數說明:

  • city:目標城市拼音縮寫(如佛山→fs,廣州→gz)
  • region:目標區域拼音縮寫(如天河區→tianhe)
  • cookies:登錄貝殼網后瀏覽器生成的登錄憑證(關鍵!沒有它無法獲取數據)
  • srcid:加密參數(需從網頁源代碼中復制,定期更新防止失效)
    在這里插入圖片描述

2. 會話初始化(偽裝瀏覽器身份)

def init_session(config):session = requests.Session()  # 創建會話容器session.headers.update({      # 設置請求頭(偽裝瀏覽器)'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...',  # 瀏覽器指紋'Referer': f'https://{config["city"]}.ke.com/'  # 來源頁面})session.cookies.update(config["cookies"])  # 加載登錄憑證return session

🛡? ?參數解析:

  • ?Session對象:保持TCP連接復用,提升訪問速度
  • ?User-Agent偽裝:模擬Chrome瀏覽器訪問(防止被識別為爬蟲)
  • Referer偽造:隱藏真實來源頁面(如訪問北京小區頁時,顯示來自bj.ke.com)
  • ?Cookie管理:自動攜帶登錄憑證(相當于拿著鑰匙開門)

3. 動態參數生成(反爬蟲核心機制)

def get_params(session):return {'_t': str(int(time.time() * 1000)),  # 13位時間戳(防重復)'srcid': session.config['srcid']     # 設備指紋(防篡改)}

? ?時間戳的作用:防止重復請求被識別

  • time.time():獲取當前時間(精確到秒)
  • *1000:轉換成毫秒級精度
  • int():去掉小數部分
  • str():轉換成字符串

🔑srcid的重要性:

  1. 設備唯一標識符(類似手機的IMEI號)
  2. 需定期從網頁源代碼更新(右鍵網頁→查看源代碼→搜索srcid)

4. 列表頁抓取(獲取小區列表)

def fetch_list_page(session, page_url):time.sleep(random.uniform(0.2, 0.4))  # 隨機等待0.2-0.4秒response = session.get(page_url, timeout=8)  # 發送網絡請求return parse_list_page(response.text)  # 解析HTML內容

?? ?時間控制:

  • random.uniform(0.2,0.4):生成0.2到0.4之間的隨機數
  • time.sleep():讓程序暫停指定時間
    ?目的:模擬人類瀏覽行為,防止觸發反爬機制

🚨 ?異常處理:
如果請求失敗(超時、404錯誤等),會自動跳過并打印錯誤信息

5. 列表頁解析(提取小區信息)

def parse_list_page(html):soup = BeautifulSoup(html, 'html.parser')  # 創建HTML解析器items = soup.select('li.xiaoquListItem')      # 定位所有小區條目results = []for item in items:info = {'小區名稱': item.select_one('.title a').text.strip(),  # 提取名稱'參考均價': item.select_one('.totalPrice span').text + '元/㎡' if ... else '暫無數據'# 其他字段類似...}results.append(info)return results

🔍 ?CSS選擇器用法:

  • select_one(‘.title a’):選擇class為"title"的元素下的第一個標簽
  • .text.strip():提取文本內容并去除兩端空白
  • ?條件判斷:如果某個元素不存在(如無均價信息),顯示"暫無數據"

6. 多線程詳情頁抓取(高效采集)

def fetch_detail_batch(session, urls):with ThreadPoolExecutor(max_workers=3) as executor:# 提交所有URL到線程池future_to_url = {executor.submit(parse_detail_page, url): url for url in urls}# 逐個獲取結果for future in as_completed(futures):url = future_to_url[future]details[url] = future.result()time.sleep(random.uniform(0.2, 0.4))  # 保持訪問節奏

🚀 ?多線程原理:

  • ThreadPoolExecutor(max_workers=3):同時開啟3個線程
  • as_completed():哪個線程先完成就先處理結果
  • ?限速機制:每個請求間隔0.2-0.4秒,避免服務器壓力過大

7. 詳情頁解析(深度數據提取)

def parse_detail_page(session, url):soup = BeautifulSoup(response.text, 'html.parser')# 解析多列布局數據def extract_multi_column():data = {}for col in soup.select('.xiaoquInfoItemCol'):for item in col.select('.xiaoquInfoItem'):label = item.select_one('.xiaoquInfoLabel').text.strip()value = item.select_one('.xiaoquInfoContent').text.strip()data[label] = valuereturn data# 提取關鍵字段detail_data = {'房屋總數': ''.join(filter(str.isdigit, multi_col_data.get('房屋總數', ''))) or '0','綠化率': multi_col_data.get('綠化率', '').replace('%', '') if multi_col_data.get('綠化率') else '暫無數據'# 其他字段...}return detail_data

🔧 ?數據清洗技巧:

  • filter(str.isdigit, “總計1582戶”):提取純數字(結果:“1582”)
  • replace(‘%’, ‘’):去除百分比符號(結果:“35”)
  • 容錯處理:使用or和條件表達式處理缺失字段

8. 主流程控制(程序大腦)

def crawl_full_data(session):try:# 獲取總小區數total = int(soup.select_one('h2.total span').text)total_pages = math.ceil(total / 30)  # 每頁30條數據print(f"\n當前區域共有 {total} 個小區")print(f"需要爬取 {total_pages} 頁數據\n")except Exception as e:print(f"獲取總數失敗: {str(e)}")total_pages = 1  # 異常時默認只爬取1頁all_data = []for page in range(1, total_pages + 1):for retry in range(2):  # 最多重試2次try:list_data = fetch_list_page(page_url)detail_results = fetch_detail_batch(list_data)# 合并數據for item in list_data:item.update(detail_results.get(item['詳情頁鏈接'], {}))all_data.extend(list_data)print(f"第{page}頁完成,累計{len(all_data)}條數據")breakexcept Exception as e:print(f"第{retry+1}次重試失敗: {str(e)}")time.sleep(random.uniform(0.2, 0.4))  # 頁間延遲return all_data

📊 ?流程控制要點:

  • ?智能分頁:自動計算總頁數(例如100個小區→4頁)
  • ?雙重保障:每頁最多重試2次,確保數據完整性
  • 數據合并:將列表頁基礎信息與詳情頁數據合并
  • 限速機制:頁間訪問間隔0.2-0.4秒

三、核心技術點總結

  1. 數據清洗三板斧
過濾非數字:filter(str.isdigit, text) → 保留純數字
?文本替換:.replace(old, new) → 刪除/替換特定字符
條件賦值:value if condition else default → 處理缺失數據
  1. 容錯機制設計
 .get(key, default):安全獲取字典值,避免KeyError or '默認值':當結果為空時提供兜底方案if condition:嚴格校驗數據存在性
  1. 字符串處理技巧
.strip():去除首尾空白符
.split():按空白符分割字符串
' '.join(list):用空格連接列表元素

四、完整代碼

import requests
import time
import random
import pandas as pd
from bs4 import BeautifulSoup
import math
from concurrent.futures import ThreadPoolExecutor, as_completeddef init_session(config):"""初始化會話對象"""session = requests.Session()session.headers.update({'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36','Referer': f'https://{config["city"]}.ke.com/xiaoqu/{config["region"]}/'})session.cookies.update(config["cookies"])session.config = config  # 存儲配置信息return sessiondef get_params(session):"""生成動態請求參數"""return {'_t': str(int(time.time() * 1000)),'srcid': session.config['srcid']}def fetch_list_page(session, page_url):"""抓取列表頁數據"""try:time.sleep(random.uniform(0.2, 0.4))response = session.get(page_url, params=get_params(session), timeout=8)response.raise_for_status()return parse_list_page(response.text)except Exception as e:print(f"列表頁請求失敗: {str(e)}")return []def parse_list_page(html):"""解析列表頁信息"""soup = BeautifulSoup(html, 'html.parser')items = soup.select('li.xiaoquListItem')results = []for item in items:try:info = {'小區名稱': item.select_one('.title a').text.strip(),'參考均價': f"{item.select_one('.totalPrice span').text}元/㎡" if item.select_one('.totalPrice') else '暫無數據','成交信息': item.select_one('.houseInfo a[href*="chengjiao"]').text.strip() if item.select_one('.houseInfo a[href*="chengjiao"]') else "暫無成交",'出租信息': item.select_one('.houseInfo a[href*="zufang"]').text.strip() if item.select_one('.houseInfo a[href*="zufang"]') else "暫無出租",'行政區': item.select_one('.district').text.strip() if item.select_one('.district') else "未知區域",'商圈': item.select_one('.bizcircle').text.strip() if item.select_one('.bizcircle') else "未知商圈",'建筑年代': ' '.join(item.select_one('.positionInfo').stripped_strings).split('/')[-1].strip() if item.select_one('.positionInfo') else "未知",'詳情頁鏈接': item.select_one('a.maidian-detail[href]')['href']}results.append(info)except Exception as e:print(f"解析異常: {str(e)}")return resultsdef fetch_detail_batch(session, urls):"""批量獲取詳情頁數據"""details = {}with ThreadPoolExecutor(max_workers=3) as executor:future_to_url = {executor.submit(parse_detail_page, session, url): url for url in urls}for future in as_completed(future_to_url):url = future_to_url[future]details[url] = future.result()time.sleep(random.uniform(0.2, 0.4))return detailsdef parse_detail_page(session, url):"""解析詳情頁完整信息"""try:time.sleep(random.uniform(0.6, 1.0))response = session.get(url, params=get_params(session), timeout=10)soup = BeautifulSoup(response.text, 'html.parser')# 輔助函數:安全提取單列信息def safe_extract_single(label_text):try:item = soup.find('span', class_='xiaoquInfoLabel', string=label_text)return item.find_next('span', class_='xiaoquInfoContent').text.strip()except:return '暫無數據'# 輔助函數:處理多列信息def extract_multi_column():data = {}columns = soup.select('.xiaoquInfoItemCol')for col_idx, col in enumerate(columns):items = col.select('.xiaoquInfoItem')for item in items:label = item.select_one('.xiaoquInfoLabel').text.strip()value = item.select_one('.xiaoquInfoContent').text.strip()data[label] = valuereturn data# 處理多列區域數據multi_col_data = extract_multi_column()# 處理單行區域數據(物業費、附近門店等)detail_data = {'建筑類型': multi_col_data.get('建筑類型', '暫無數據'),'房屋總數': ''.join(filter(str.isdigit, multi_col_data.get('房屋總數', ''))) or '0','樓棟總數': ''.join(filter(str.isdigit, multi_col_data.get('樓棟總數', ''))) or '0','綠化率': multi_col_data.get('綠化率', '').replace('%', '').strip(),'容積率': multi_col_data.get('容積率', '暫無數據'),'交易權屬': multi_col_data.get('交易權屬', '暫無數據'),'建成年代': multi_col_data.get('建成年代', '暫無數據'),'供暖類型': multi_col_data.get('供暖類型', '暫無數據'),'用水類型': multi_col_data.get('用水類型', '暫無數據'),'用電類型': multi_col_data.get('用電類型', '暫無數據'),# 處理單行區域'物業費': safe_extract_single('物業費').split('元')[0].strip(),'附近門店': ' '.join(safe_extract_single('附近門店').replace('\n', ' ').split()),'物業公司': safe_extract_single('物業公司'),'開發商': safe_extract_single('開發商'),'詳情頁均價': f"{soup.select_one('.xiaoquUnitPrice').text.strip()}元/㎡" if soup.select_one('.xiaoquUnitPrice') else '暫無數據'}return detail_dataexcept Exception as e:print(f"詳情頁解析異常: {str(e)}")return {}def crawl_full_data(session):"""完整爬取流程"""config = session.configtry:# 獲取總小區數response = session.get(f"https://{config['city']}.ke.com/xiaoqu/{config['region']}/",params=get_params(session))soup = BeautifulSoup(response.text, 'html.parser')total = int(soup.select_one('h2.total span').text)total_pages = math.ceil(total / 30)# 打印統計信息print(f"\n當前區域共有 {total} 個小區")print(f"需要爬取 {total_pages} 頁數據\n")except Exception as e:print(f"獲取總數失敗: {str(e)}")total = 0total_pages = 0all_data = []for page in range(1, total_pages + 1):page_url = f"https://{config['city']}.ke.com/xiaoqu/{config['region']}/p{page}"for retry in range(2):try:list_data = fetch_list_page(session, page_url)detail_urls = [item['詳情頁鏈接'] for item in list_data]detail_results = fetch_detail_batch(session, detail_urls)for item in list_data:item.update(detail_results.get(item['詳情頁鏈接'], {}))all_data.extend(list_data)print(f"第{page}頁完成,累計{len(all_data)}條數據")breakexcept Exception as e:print(f"第{retry+1}次重試: {str(e)}")        time.sleep(random.uniform(0.2, 0.4))return all_dataif __name__ == "__main__":# ================== 用戶配置區域 ==================CONFIG = {"city": "fs",       # 目標城市拼音(如: 佛山->fs,上海->sh)"region": "nanhai", # 目標區域拼音(如: 南海區->nanhai)"cookies": {        # 必需Cookie'lianjia_uuid': '自行修改','lianjia_token': '自行修改','security_ticket': '自行修改'},"srcid": '自行修改'}#輸出的excel路徑output_name = f'{CONFIG["city"]}_{CONFIG["region"]}_小區數據.xlsx'# ================================================# 初始化會話session = init_session(CONFIG)# 執行爬取start_time = time.time()final_data = crawl_full_data(session)# 保存結果if final_data:df = pd.DataFrame(final_data)[['小區名稱', '參考均價', '成交信息', '出租信息', '行政區', '商圈', '建筑年代','詳情頁均價', '建筑類型', '房屋總數', '樓棟總數', '綠化率', '容積率','交易權屬', '建成年代', '供暖類型', '用水類型', '用電類型','物業費', '附近門店', '物業公司', '開發商', '詳情頁鏈接']]df.to_excel(output_name, index=False)print(f"數據已保存至: {output_name}")print(f"總計 {len(df)} 條數據,耗時 {(time.time()-start_time)/60:.1f} 分鐘")

五、運行效果

在這里插入圖片描述
在這里插入圖片描述

六、特別說明(運行不了的時候看這里!)

  1. 記得替換main里面的各種參數,尤其是cookies!用的cookies是你自己瀏覽器登陸貝殼網,并且完成驗證之后的那個cookies!!!
  2. 如果沒有修改excel輸出路徑找不到輸出的文件,就在這個代碼文件所在的文件夾里面找
  3. 如果嫌爬取速度太慢可以自行修改time.sleep()里的時間,當然間隔越小被反爬的概率越大
  4. 不能保證網頁結構后續恒久不變,比如class的標簽變了需要重新修改對應的標簽,因此代碼也具有時效性~

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

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

相關文章

使用服務器搭建一個專屬的密碼管理工具Vaultwarden

一、服務器配置與Docker環境 ?實例選型與系統準備? ?推薦配置?:?1核2GB內存?(萊卡云L1型實例),Vaultwarden資源占用低,適合輕量級部署?34。?操作系統?:選擇 ?Ubuntu 22.04 LTS?,兼容…

安孚科技攜手政府產業基金、高能時代發力固態電池,開辟南孚電池發展新賽道

安孚科技出手,發力固態電池。 3月7日晚間,安孚科技(603031.SH)發布公告稱,公司控股子公司南孚電池擬與南平市綠色產業投資基金有限公司(下稱“南平綠色產業基金”)、高能時代(廣東橫…

IO學習---->線程

1.創建兩個線程&#xff0c;分支線程1拷貝文件的前一部分&#xff0c;分支線程2拷貝文件的后一部分 #include <head.h> sem_t sem; long half_size 0; // 全局變量&#xff0c;供所有線程共享void* product(void *arg) {FILE *src fopen("IO.text", "…

深度學習分詞器char-level實戰詳解

一、三種分詞器基本介紹 word-level&#xff1a;將文本按照空格或者標點分割成單詞&#xff0c;但是詞典大小太大 subword-level&#xff1a;詞根分詞&#xff08;主流&#xff09; char-level&#xff1a;將文本按照字母級別分割成token 二、charlevel代碼 導包&#xff1…

基于SpringBoot實現旅游酒店平臺功能六

一、前言介紹&#xff1a; 1.1 項目摘要 隨著社會的快速發展和人民生活水平的不斷提高&#xff0c;旅游已經成為人們休閑娛樂的重要方式之一。人們越來越注重生活的品質和精神文化的追求&#xff0c;旅游需求呈現出爆發式增長。這種增長不僅體現在旅游人數的增加上&#xff0…

git規范提交之commitizen conventional-changelog-cli 安裝

一、引言 使用規范的提交信息可以讓項目更加模塊化、易于維護和理解&#xff0c;同時也便于自動化工具&#xff08;如發布工具或 Changelog 生成器&#xff09;解析和處理提交記錄。 通過編寫符合規范的提交消息&#xff0c;可以讓團隊和協作者更好地理解項目的變更歷史和版本…

前端實現版本更新自動檢測?

&#x1f916; 作者簡介&#xff1a;水煮白菜王&#xff0c;一位資深前端勸退師 &#x1f47b; &#x1f440; 文章專欄&#xff1a; 前端專欄 &#xff0c;記錄一下平時在博客寫作中&#xff0c;總結出的一些開發技巧和知識歸納總結?。 感謝支持&#x1f495;&#x1f495;&a…

硬件基礎(4):(5)設置ADC電壓采集中MCU的參考電壓

Vref 引腳通常是 MCU (特別是帶有 ADC 的微控制器) 上用來提供或接收基準電壓的引腳&#xff0c;ADC 會以該基準電壓作為量程參考對輸入模擬信號進行數字化轉換。具體來說&#xff1a; 命名方式 在不同廠家的 MCU 中&#xff0c;Vref 引腳可能會被標記為 VREF / VREF- / VREF_…

postman接口請求中的 Raw是什么

前言 在現代的網絡開發中&#xff0c;API 的使用已經成為數據交換的核心方式之一。然而&#xff0c;在與 API 打交道時&#xff0c;關于如何發送請求體&#xff08;body&#xff09;內容類型的問題常常困擾著開發者們&#xff0c;尤其是“raw”和“json”這兩個術語之間的區別…

為什么要使用前綴索引,以及建立前綴索引:sql示例

背景&#xff1a; 你想啊&#xff0c;數據庫里有些字段&#xff0c;它老長了&#xff0c;就像那種 varchar(255) 的字段&#xff0c;這玩意兒要是整個字段都拿來建索引&#xff0c;那可太占地方了。打個比方&#xff0c;這就好比你要在一個超級大的筆記本上記東西&#xff0c;每…

【語料數據爬蟲】Python爬蟲|批量采集會議紀要數據(1)

前言 本文是該專欄的第2篇,后面會持續分享Python爬蟲采集各種語料數據的的干貨知識,值得關注。 在本文中,筆者將主要來介紹基于Python,來實現批量采集“會議紀要”數據。同時,本文也是采集“會議紀要”數據系列的第1篇。 采集相關數據的具體細節部分以及詳細思路邏輯,筆…

Android 線程池實戰指南:高效管理多線程任務

在 Android 開發中&#xff0c;線程池的使用非常重要&#xff0c;尤其是在需要處理大量異步任務時。線程池可以有效地管理線程資源&#xff0c;避免頻繁創建和銷毀線程帶來的性能開銷。以下是線程池的使用方法和最佳實踐。 1. 線程池的基本使用 &#xff08;1&#xff09;創建線…

SQL29 計算用戶的平均次日留存率

SQL29 計算用戶的平均次日留存率 計算用戶的平均次日留存率_牛客題霸_牛客網 題目&#xff1a;現在運營想要查看用戶在某天刷題后第二天還會再來刷題的留存率。 示例&#xff1a;question_practice_detail -- 輸入&#xff1a; DROP TABLE IF EXISTS question_practice_detai…

深度學習分類回歸(衣帽數據集)

一、步驟 1 加載數據集fashion_minst 2 搭建class NeuralNetwork模型 3 設置損失函數&#xff0c;優化器 4 編寫評估函數 5 編寫訓練函數 6 開始訓練 7 繪制損失&#xff0c;準確率曲線 二、代碼 導包&#xff0c;打印版本號&#xff1a; import matplotlib as mpl im…

【leetcode hot 100 19】刪除鏈表的第N個節點

解法一&#xff1a;將ListNode放入ArrayList中&#xff0c;要刪除的元素為num list.size()-n。如果num 0則將頭節點刪除&#xff1b;否則利用num-1個元素的next刪除第num個元素。 /*** Definition for singly-linked list.* public class ListNode {* int val;* Lis…

【iOS逆向與安全】sms短信轉發插件與上傳服務器開發

一、目標 一步步分析并編寫一個短信自動轉發的deb插件 二、工具 mac系統已越獄iOS設備:脫殼及frida調試IDA Pro:靜態分析測試設備:iphone6s-ios14.1.1三、步驟 1、守護進程 ? 守護進程(daemon)是一類在后臺運行的特殊進程,用于執行特定的系統任務。例如:推送服務、人…

Midjourney繪圖參數詳解:從基礎到高級的全面指南

引言 Midjourney作為當前最受歡迎的AI繪圖工具之一&#xff0c;其強大的參數系統為用戶提供了豐富的創作可能性。本文將深入解析Midjourney的各項參數&#xff0c;幫助開發者更好地掌握這一工具&#xff0c;提升創作效率和質量。 一、基本參數配置 1. 圖像比例調整 使用--ar…

音頻進階學習十九——逆系統(簡單進行回聲消除)

文章目錄 前言一、可逆系統1.定義2.解卷積3.逆系統恢復原始信號過程4.逆系統與原系統的零極點關系 二、使用逆系統去除回聲獲取原信號的頻譜原系統和逆系統幅頻響應和相頻響應使用逆系統恢復原始信號整體代碼如下 總結 前言 在上一篇音頻進階學習十八——幅頻響應相同系統、全…

vue3 使用sass變量

1. 在<style>中使用scss定義的變量和css變量 1. 在/style/variables.scss文件中定義scss變量 // scss變量 $menuText: #bfcbd9; $menuActiveText: #409eff; $menuBg: #304156; // css變量 :root {--el-menu-active-color: $menuActiveText; // 活動菜單項的文本顏色--el…

gbase8s rss集群通信流程

什么是rss RSS是一種將數據從主服務器復制到備服務器的方法 實例級別的復制 (所有啟用日志記錄功能的數據庫) 基于邏輯日志的復制技術&#xff0c;需要傳輸大量的邏輯日志,數據庫需啟用日志模式 通過網絡持續將數據復制到備節點 如果主服務器發生故障&#xff0c;那么備用服務…