久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

pywebcopy離線歸檔與整站鏡像實戰(zhàn):參數(shù)、避坑與校驗

pywebcopy離線歸檔與整站鏡像實戰(zhàn):參數(shù)、避坑與校驗 簡介pywebcopy 是一個用 Python 編寫的網(wǎng)頁抓取與歸檔庫面向需要保存完整網(wǎng)頁或整站鏡像的開發(fā)者、爬蟲學(xué)習(xí)者和資料歸檔人員解決頁面樣式、腳本、圖片等靜態(tài)資產(chǎn)分散、離線閱讀不便的問題。壓縮包共 32 個文件約 65KB以 19 個 py 源碼模塊為核心輔以 8 個 md 說明文檔、2 個 yml 配置文件及 requirements、許可證等輔助文件便于閱讀實現(xiàn)、運行示例和二次開發(fā)。已有 570 人學(xué)習(xí)或下載。它支持一次調(diào)用保存包含 CSS、JS 和圖像的網(wǎng)頁也可克隆完整網(wǎng)站并重新映射資產(chǎn)與鏈接代碼中涵蓋爬蟲、解析、API、頁面結(jié)構(gòu)與配置等模塊并強調(diào)遵循 robots.txt提供直接 API 與子類擴展方式。對鏡像過程中的資源下載、鏈接重寫和配置管理有較清晰的組織適合用來理解站點鏡像流程、搭建離線歸檔腳本或進行定制化抓取實踐。1. 一個離線歸檔需求把 pywebcopy 推到了臺前上周有位做前端的朋友找我一套已經(jīng)下線的活動頁要原樣搬到內(nèi)網(wǎng)讓審核同事在沒網(wǎng)的環(huán)境里點開就能看。瀏覽器右鍵「另存為」最省事但一個頁面三十多張圖存下來的 HTML 里引用全被改成了本地絕對路徑換個目錄就裂碰上帶查詢串的 CDN 圖片文件名還會互相覆蓋最后只剩一張。這類活兒的正解是寫幾行 Python而 pywebcopy 就是專門干這個的庫——它把鏡像網(wǎng)頁和網(wǎng)站拆成「抓 HTML、找依賴、下載資源、改寫引用」四步最后落盤成一個雙擊就能打開的目錄。它適合做內(nèi)容歸檔、離線演示、設(shè)計參考站快照的從業(yè)者不適合直接拿來對付需要登錄態(tài)或者純 JS 渲染的站點這條邊界后面會反復(fù)提到。2. 最小閉環(huán)從 pip 到一份能雙擊打開的離線頁面先把單頁跑通再談?wù)?。很多人上來就save_website一個域名結(jié)果跑了兩小時抓回來一堆日歷頁和搜索結(jié)果頁磁盤漲了十幾個 G真正想要的正文目錄反而沒抓全。單頁驗證能讓你在十分鐘內(nèi)看清產(chǎn)物結(jié)構(gòu)知道資源落在哪、引用被改成什么樣后面出問題才有對照。2.1 它憑什么能把頁面拆開再裝回去pywebcopy 的內(nèi)部流程大致分三層。第一層是請求層用一個會話對象去拿 HTML帶上常規(guī)的 User-Agent 和超時第二層是解析層把 HTML 丟給解析器遍歷link[relstylesheet]、script[src]、img[src]、source[srcset]這些節(jié)點把所有外部引用收集成一張資源清單CSS 文件還會再進去掃一遍url(...)和import第三層是改寫層資源逐個下載到本地同時把 HTML 里的絕對 URL 替換成相對路徑。理解這個三層結(jié)構(gòu)很關(guān)鍵因為它決定了失敗長什么樣。如果是請求層掛了你會看到ConnectionError或者 403如果是解析層漏了表現(xiàn)是「頁面能打開但某類資源沒有」比如字體文件全丟如果是改寫層出錯表現(xiàn)是文件明明下載下來了但 HTML 里指向的還是外網(wǎng)地址離線打開一片空白。排查時先定位在哪一層比盲目加參數(shù)有用得多。還有一個容易忽略的點它改寫的是「引用」不是「內(nèi)容」。CSS 文件里如果嵌套了三層import或者 JS 里動態(tài)拼了一個圖片路徑這些都不在靜態(tài)解析的射程內(nèi)。這不是缺陷是靜態(tài)抓取的天然邊界后面第 4 章會給出補刀方案。2.2 裝好環(huán)境跑通第一次 save_webpage建議單獨開一個虛擬環(huán)境因為 pywebcopy 會拉進 requests、beautifulsoup4、lxml 這一串依賴混在系統(tǒng)環(huán)境里容易和別的項目打架。python -m venv venv source venv/bin/activate # Windows 用 venv\Scripts\activate pip install pywebcopy python -c import pywebcopy; print(pywebcopy.__file__)最后一行能打印出安裝路徑說明導(dǎo)入沒問題。接下來是最小調(diào)用把目標地址、產(chǎn)物根目錄、任務(wù)名三個東西給齊就行from pywebcopy import save_webpage # 單頁歸檔抓目標頁本身和它引用的 css / js / 圖片 save_webpage( urlhttps://demo-site.test/blog/2024/activity.html, project_folder./mirror, # 產(chǎn)物根目錄不存在會自動創(chuàng)建 project_nameactivity_2024, # 本次任務(wù)的子目錄名相當(dāng)于任務(wù) ID overwriteTrue, # 同名任務(wù)目錄已存在時整個覆蓋 delay0.3, # 每次請求之間的間隔單位秒 )這段代碼里url必須帶完整 scheme只寫域名會直接拋異常project_folder和project_name拼起來才是最終落在磁盤上的任務(wù)目錄所以project_name別隨便起建議用「日期 頁面 slug」方便日后回溯overwriteTrue在調(diào)試期很省心但它會刪掉整個舊目錄重來一旦你把它設(shè)成某個已經(jīng)歸檔好的歷史任務(wù)名之前的產(chǎn)物就沒了。歸檔場景下我一般設(shè)成False看到目錄已存在的報錯反而說明沒誤傷。跑完之后先別急著驗收用tree看一眼結(jié)構(gòu)比任何文檔都直觀tree -L 3 ./mirror/activity_2024 | head -402.3 產(chǎn)物目錄里到底落了什么不同版本在子目錄命名上會有些差異但骨架是一致的HTML 按 URL 的 path 映射成目錄層級資源集中落在頁面同級或子級的資源目錄里。第一次跑完建議對照下面這張表逐個確認缺哪一類就說明哪一層的解析漏了。路徑 / 文件內(nèi)容驗收要點project_folder/project_name/任務(wù)根目錄每次調(diào)用生成一個命名要可回溯與 URL path 對應(yīng)的.html頁面主體打開后正文應(yīng)完整不依賴網(wǎng)絡(luò)資源子目錄css / js / 字體 / 圖片目錄名隨版本略有差異以實際產(chǎn)物為準HTML 內(nèi)的引用屬性已改寫成相對路徑用編輯器搜索https://應(yīng)基本清空原始 HTML 備份部分版本改寫前的副本有的話留著出問題能對比驗收動作可以很簡單把網(wǎng)線拔了雙擊那個 HTML看三件事——正文在不在、樣式對不對、圖片裂沒裂。三樣都過單頁這條鏈路就算通了。有一樣不過回到 2.1 的三層模型去定位。2.4 三個必須先定下來的參數(shù)單頁場景真正需要調(diào)的參數(shù)不多但下面這幾個一旦定錯后面整站鏡像會放大成災(zāi)難。參數(shù)默認值作用我一般怎么定project_folder當(dāng)前目錄產(chǎn)物根目錄掛到獨立數(shù)據(jù)盤別放代碼倉庫里project_name按 URL 生成本次任務(wù)子目錄日期_slug歸檔場景絕不復(fù)用overwriteFalse同名任務(wù)是否覆蓋調(diào)試True正式歸檔Falsedelay0請求間隔秒目標站有頻控就調(diào)到 0.51.0threadedFalse是否多線程下載單頁無所謂整站建議關(guān)zip_projectFalse抓完是否打包成 zip需要交付單個文件時開delay這個參數(shù)值得單獨說一句。它控制的是每次請求之間的等待看起來不起眼但在整站鏡像里是決定你會不會被目標站限流的關(guān)鍵。很多人第一次跑整站就把delay設(shè)成 0、threaded開成 True結(jié)果前兩百個請求很順第三百個開始全變 429后面抓回來的全是錯誤頁還得清空重來。3. 整站鏡像max_depth 與域名邊界決定你抓到的是站點還是垃圾場單頁跑通之后save_website的誘惑很大——一行調(diào)用抓一整個站。但整站鏡像的本質(zhì)是「從一個入口出發(fā)做廣度優(yōu)先遍歷」你不畫邊界它就會順著分頁、日歷、標簽、搜索參數(shù)一路爬下去最后抓回來的東西和你想歸檔的內(nèi)容可能只重合三成。這一章講的就是怎么畫這個邊界。3.1 save_website 和 save_webpage 的差別不在抓多抓少兩者真正的差別在于「有沒有 URL 隊列」。save_webpage是一次性的解析當(dāng)前頁、下載依賴、改寫、結(jié)束不關(guān)心頁面里指向的其他 HTML。save_website維護一個待抓隊列每抓到一個 HTML 就從中提取站內(nèi)鏈接判斷是否在白名單內(nèi)、是否超過深度、是否命中黑名單通過了才入隊。這個機制帶來兩個直接后果。第一深度是相對入口頁計算的入口頁算第 0 層它鏈出去的算第 1 層max_depth3意味著最多跟三層再深的頁面不會被抓。第二去重完全依賴 URL 字符串同一個頁面如果有?fromhome和?fromlist兩個入口會被當(dāng)成兩個不同頁面各抓一遍產(chǎn)物里出現(xiàn)兩份內(nèi)容相同、路徑不同的 HTML。這一點在 CMS 站點上特別常見。所以整站鏡像的第一件事不是調(diào)深度而是想清楚「哪些 URL 形態(tài)是同一個頁面的不同馬甲」把它們?nèi)M黑名單。3.2 用 allowed_domains 和 blacklist_urls 畫一個抓取圍欄下面這份調(diào)用是我在歸檔一個內(nèi)容站時的常用配置注釋寫得比較細可以直接照著改from pywebcopy import save_website save_website( urlhttps://demo-site.test/, project_folder./mirror, project_namedemo_site_full, # 從入口算起最多跟三層再深基本是分頁和日歷價值低且量大 max_depth3, # 域名白名單寫域名不寫 URL子域要單獨列出來 allowed_domains[demo-site.test, static.demo-site.test], # 正則黑名單注意把點號轉(zhuǎn)義否則 . 會匹配任意字符 blacklist_urls[ rdemo-site\.test/logout, rdemo-site\.test/search\?, rdemo-site\.test/calendar/, rdemo-site\.test/tag/, r\.(zip|pdf|mp4|iso)$, # 大文件先排除避免把磁盤打滿 ], delay1.0, # 一秒一個請求禮貌且不容易被限流 threadedFalse, # 大站關(guān)掉多線程隊列順序更可控 overwriteFalse, )allowed_domains是一個常見翻車點。它的語義是「允許抓取的域名」不包含主域之外的 CDN 域名時頁面里那些托管在 CDN 上的圖片可能抓不到。穩(wěn)妥做法是先把頁面里的資源域名掃一遍把靜態(tài)資源域也加進去。至于資源抓取是否嚴格受這個白名單約束不同版本行為有差異所以最終還是要靠產(chǎn)物驗收來判斷別把它當(dāng)成鐵律。blacklist_urls用的是正則匹配匹配對象是完整 URL。寫的時候把/logout、/search?、/calendar/這幾類先排掉能省掉一大半無效請求。帶查詢串的 URL 記得把?也轉(zhuǎn)義進去否則只匹配到路徑部分。3.3 delay 和 threaded 的取舍限速比并發(fā)重要整站鏡像最常見的誤區(qū)是把「抓得快」當(dāng)成目標。實際上你真正要的是「抓得全且不重來」而重來的成本遠高于慢一點的成本。配置組合適用場景風(fēng)險threadedFalse, delay0.5~1.0絕大多數(shù)整站歸檔慢但產(chǎn)物完整、可復(fù)現(xiàn)threadedFalse, delay0本地起服務(wù)測試對真實站點不要這么干threadedTrue, delay1.0大型靜態(tài)站、內(nèi)網(wǎng)環(huán)境隊列順序亂日志難對賬threadedTrue, delay0不推薦極易觸發(fā)限流抓到大量錯誤頁我自己的習(xí)慣是第一次跑永遠用單線程加 1 秒間隔先抓個二三十頁看看產(chǎn)物質(zhì)量和日志確認沒問題再決定要不要提速。提速的方式我傾向于「分批跑」而不是「調(diào)高并發(fā)」——把站點按欄目拆成多個任務(wù)每個任務(wù)用不同的project_name跑完再合并。這樣任何一個批次失敗損失都是局部可重跑的。還有一點容易被忽略delay作用的是請求之間的間隔但整站鏡像里有一部分耗時是資源下載那部分如果不走同一個限速器實際壓力可能比你預(yù)期的大。所以跑的時候盯著目標站的響應(yīng)碼看一旦出現(xiàn) 429 或 503 的批量出現(xiàn)立刻停把delay翻倍再繼續(xù)。3.4 robots 與 bypass_robots 的邊界pywebcopy 有一個bypass_robots參數(shù)含義是抓取時是否忽略目標站的 robots.txt 限制。這個參數(shù)的默認值是False也就是默認遵守。我的建議很明確除了你自己擁有或者明確獲得授權(quán)的站點其他場景一律保持默認。robots.txt 表達的是站點運營方對爬蟲的意愿繞過它既可能違反站點條款也會讓你在對方日志里變成明顯的異常流量。歸檔公開內(nèi)容時正確的做法是先看一眼目標站的 robots.txt瀏覽器直接訪問/robots.txt就能看確認你要抓的路徑不在禁止列表里再按delay限速慢跑。還有一層現(xiàn)實考慮即便技術(shù)上繞過了對方一旦識別出高頻訪問封的是 IP 段你的整個抓取任務(wù)會從某一刻起全部返回 403而你已經(jīng)抓下來的半成品還得手工清理。這筆賬怎么算都不劃算。4. 避坑與排查五條用真實故障換來的記錄這一章里的每一條都是我在不同項目里實實在在撞過的。按「現(xiàn)象 → 原因 → 解決」寫方便你對照自己的報錯直接定位。4.1 頁面能打開但樣式全丟、圖片全裂現(xiàn)象HTML 雙擊能打開正文文字也在但整頁沒有排版控制臺里一堆 404指向的路徑形如./_internal/xxx/default.css實際磁盤上沒有這個文件。原因CSS 文件內(nèi)部的url(...)引用是相對于 CSS 文件自身位置的不是相對于 HTML。pywebcopy 在改寫 CSS 內(nèi)容時如果import形成了多層嵌套或者 CSS 里用了url(../fonts/a.woff2)這種跨級相對路徑改寫結(jié)果可能算錯基準目錄導(dǎo)致資源被下載到了另一個位置而引用路徑指向空處。解決先手工確認基準。打開產(chǎn)物里的 CSS 文件搜索url(看改寫后的路徑再對照磁盤上資源實際所在目錄兩者一比對就知道偏移在哪。如果只是少量文件對不上寫個腳本按「CSS 文件所在目錄 引用路徑」把文件挪到正確位置或者反向改寫 CSS 里的路徑import re from pathlib import Path def fix_css_urls(css_file: Path, assets_dir: Path): 把 CSS 里指向不存在文件的 url() 改成指向 assets_dir 下的同名文件 text css_file.read_text(encodingutf-8, errorsignore) def repl(m): ref m.group(1).strip(\) if ref.startswith((data:, http://, https://)): return m.group(0) name Path(ref).name candidate assets_dir / name if candidate.exists(): rel candidate.relative_to(css_file.parent) return furl({rel.as_posix()}) return m.group(0) css_file.write_text(re.sub(rurl\(([^)])\), repl, text), encodingutf-8)這段邏輯的關(guān)鍵是relative_to它算出的是從 CSS 文件所在目錄到資源文件的真實相對路徑比手工拼字符串可靠。參數(shù)assets_dir要指向你實際發(fā)現(xiàn)資源所在的目錄跑之前先find一遍確認。4.2 抓回來一片空白HTML 里只有一個空的掛載點現(xiàn)象產(chǎn)物 HTML 打開是白屏查看源碼只有div idapp/div和幾個 script 標簽正文一個字都沒有。原因目標是單頁應(yīng)用正文由 JS 在瀏覽器里渲染出來服務(wù)器返回的原始 HTML 本身就是空的。pywebcopy 拿到的是服務(wù)器響應(yīng)不是渲染后的 DOM所以它抓到的就是那個空殼。解決在 pywebcopy 之前插一步預(yù)渲染用無頭瀏覽器把頁面跑一遍、拿到渲染后的 HTML再喂給后續(xù)流程。常見做法是from playwright.sync_api import sync_playwright def render_html(url: str, timeout: int 30000) - str: 用無頭瀏覽器拿到 JS 執(zhí)行完之后的 DOM 快照 with sync_playwright() as p: browser p.chromium.launch(headlessTrue) page browser.new_page() # networkidle 表示等網(wǎng)絡(luò)靜默比 load 更適合異步渲染的頁面 page.goto(url, wait_untilnetworkidle, timeouttimeout) html page.content() browser.close() return html拿到html之后有兩條路一是寫入本地臨時文件起一個python -m http.server讓 pywebcopy 從這個本地地址抓這樣資源引用還能正常解析二是自己解析這份 HTML 把資源抓全完全繞開 pywebcopy 的抓取層。前者改動小后者可控性強我一般先用前者快速驗證。4.3 一批圖片落地后只剩一張文件名互相覆蓋現(xiàn)象頁面引用了logo.png?v1、logo.png?v2、logo.png?v3三個版本產(chǎn)物目錄里只有一張logo.png頁面上三個位置顯示的是同一張圖。原因落盤時文件名通常取自 URL 的 path 部分查詢串被丟掉了。三個 URL 的 path 完全相同自然寫到同一個文件后寫的覆蓋先寫的。解決抓取前先自己把資源本地化用「path 查詢串哈希」生成唯一文件名改寫 HTML 里的引用為相對路徑然后再讓 pywebcopy 處理頁面。這樣 pywebcopy 看到的已經(jīng)是本地相對引用不會再重復(fù)下載也不會撞名import hashlib, os from urllib.parse import urljoin, urlsplit import requests from bs4 import BeautifulSoup ASSET_ATTRS {img: src, script: src, link: href} def localize_assets(page_url: str, html: str, out_dir: str ./assets) - str: os.makedirs(out_dir, exist_okTrue) soup BeautifulSoup(html, html.parser) for tag, attr in ASSET_ATTRS.items(): for node in soup.find_all(tag): raw node.get(attr) if not raw or raw.startswith(data:): continue abs_url urljoin(page_url, raw) parts urlsplit(abs_url) # 用查詢串的短哈希做文件名后綴保證同 path 不同 query 不撞 digest hashlib.md5(parts.query.encode()).hexdigest()[:8] if parts.query else base os.path.basename(parts.path) or index if digest: stem, dot, ext base.rpartition(.) base f{stem}.{digest}.{ext} if dot else f{base}.{digest} target os.path.join(out_dir, base) if not os.path.exists(target): resp requests.get(abs_url, timeout15) resp.raise_for_status() with open(target, wb) as f: f.write(resp.content) node[attr] os.path.relpath(target, .).replace(os.sep, /) return str(soup)digest只取 8 位沖突概率在單站規(guī)模下可以忽略os.path.relpath算出相對當(dāng)前工作目錄的路徑所以調(diào)用這個函數(shù)時的工作目錄要和后續(xù) pywebcopy 的project_folder保持同一基準否則改寫出來的相對路徑會偏。4.4 中文全是亂碼英文正?,F(xiàn)象抓下來的頁面中文變成???–?這種字符英文和數(shù)字完全正常。原因目標站響應(yīng)頭里沒給charset或者給了一個錯誤的默認值比如ISO-8859-1而頁面實際是 GBK 或 UTF-8 編碼。requests 在沒有明確聲明時會按 HTTP 規(guī)范回退到 ISO-8859-1解出來就是亂碼。解決抓之前先探一次編碼再決定怎么傳。探測代碼如下import requests resp requests.get(https://demo-site.test/news/legacy.html, timeout10) # 先看響應(yīng)頭聲明再看內(nèi)容推測兩者不一致時以推測為準 print(declared:, resp.encoding) print(detected:, resp.apparent_encoding)較新版本的 pywebcopy 支持傳入編碼相關(guān)的關(guān)鍵字參數(shù)把探測到的值傳進去即可。如果你的版本不認這個參數(shù)退路是先按正確編碼把內(nèi)容寫成臨時 HTML 文件本地起一個 http 服務(wù)讓 pywebcopy 從本地地址抓——本地服務(wù)的響應(yīng)頭你可以完全控制編碼問題就繞過去了。4.5 整站跑到一半卡住內(nèi)存持續(xù)上漲現(xiàn)象任務(wù)跑到幾百個頁面之后速度明顯變慢進程內(nèi)存一路漲到幾個 G最后要么被系統(tǒng)殺掉要么一直掛在那里不動。原因遞歸隊列沒有做上限控制加上threadedTrue時多個線程同時往隊列里塞 URL去重表膨脹再加上每個頁面的 DOM 對象沒有被及時釋放累積起來就是內(nèi)存雪崩。站點越大、重復(fù)入口越多這個問題越明顯。解決三個動作一起做。第一關(guān)掉多線程threadedFalse把并發(fā)壓力換成可預(yù)測的順序執(zhí)行。第二把blacklist_urls補齊尤其是帶分頁參數(shù)的?page、帶排序參數(shù)的?sort這些是隊列膨脹的主要來源。第三分批跑按欄目或按字母區(qū)間拆成多個任務(wù)每個任務(wù)用獨立的project_name跑完再合并目錄。批量跑的時候在外面套一層循環(huán)單任務(wù)失敗不影響后續(xù)日志里記清楚哪一批失敗了好補跑。注意整站鏡像前先估算體量。用max_depth1試跑一次看單頁平均產(chǎn)物大小和頁面數(shù)乘以預(yù)估總頁數(shù)得出來的數(shù)字如果超過磁盤剩余空間的七成就先拆批次。5. 封裝成能反復(fù)用的鏡像工具批處理、增量與產(chǎn)物校驗單次調(diào)用解決不了「每周歸檔一次」這種需求。真正要長期用得往上包一層命令行入口負責(zé)批量調(diào)度狀態(tài)庫負責(zé)跳過沒變的頁面校驗?zāi)_本負責(zé)在交付前兜底。這三塊加起來不到兩百行但能把返工率壓下去一大截。5.1 用 argparse 包一層命令行一次傳多個入口核心訴求是「一條命令跑完一批 URL單個失敗不中斷」。下面這版實現(xiàn)故意做得樸素沒有引入額外依賴import argparse import time from pathlib import Path from urllib.parse import urlsplit from pywebcopy import save_webpage, save_website def build_parser(): p argparse.ArgumentParser(description批量鏡像網(wǎng)頁或站點) p.add_argument(urls, nargs, help入口 URL可以傳多個) p.add_argument(-o, --out, default./mirror, help產(chǎn)物根目錄) p.add_argument(-n, --name, defaultNone, help任務(wù)名默認按時間戳生成) p.add_argument(-d, --depth, typeint, default1, help1 表示只抓單頁大于 1 表示按深度遞歸) p.add_argument(--delay, typefloat, default0.8, help請求間隔秒) p.add_argument(--overwrite, actionstore_true) return p def main(): args build_parser().parse_args() stamp time.strftime(%Y%m%d_%H%M%S) for idx, url in enumerate(args.urls): name args.name or fjob_{stamp}_{idx} common dict( project_folderargs.out, project_namename, overwriteargs.overwrite, delayargs.delay, threadedFalse, ) try: if args.depth 1: save_webpage(urlurl, **common) else: # netloc 作為域名白名單生產(chǎn)環(huán)境建議顯式傳入配置 domain urlsplit(url).netloc save_website(urlurl, max_depthargs.depth, allowed_domains[domain], **common) print(f[ok] {url} - {Path(args.out) / name}) except Exception as exc: # 單個任務(wù)失敗只記錄不中斷整批 print(f[fail] {url}: {exc}) if __name__ __main__: main()幾個設(shè)計取舍值得說明。depth1走單頁分支、大于 1 走整站分支是為了讓同一個命令既能做快速快照又能做深度歸檔不用記兩套參數(shù)。urlsplit(url).netloc直接把入口域名當(dāng)白名單省掉手填但如果目標站的資源在獨立 CDN 域上這個默認值會漏抓所以正式場景還是建議加一個--allow-domain參數(shù)手動補。異常捕獲用寬泛的Exception在批處理場景里是對的——你寧可吞掉一條錯誤日志也不愿意因為第 3 個 URL 掛了導(dǎo)致后面 50 個沒跑。5.2 用 SQLite 記狀態(tài)跳過沒變化的頁面每周歸檔一次同樣的站點如果每次都全量重抓時間和帶寬都浪費在沒變的頁面上。判斷頁面變沒變最可靠的是服務(wù)端給的ETag和Last-Modified這兩個頭在 HEAD 請求里就能拿到成本極低。先建一張狀態(tài)表主鍵是 URL記錄兩個校驗值和時間戳import sqlite3 DB mirror_state.db def init_db(): conn sqlite3.connect(DB) conn.execute( CREATE TABLE IF NOT EXISTS pages ( url TEXT PRIMARY KEY, etag TEXT, last_modified TEXT, fetched_at INTEGER, status INTEGER ) ) conn.commit() return conn def need_refetch(conn, url, etagNone, last_modifiedNone): row conn.execute( SELECT etag, last_modified FROM pages WHERE url ?, (url,) ).fetchone() if row is None: return True # 沒記錄過必須抓 if etag and etag ! row[0]: return True # ETag 變了內(nèi)容有更新 if last_modified and last_modified ! row[1]: return True return Falseneed_refetch的判斷順序有講究先看有沒有記錄再看 ETag最后看 Last-Modified。ETag 優(yōu)先級更高是因為它通常是對內(nèi)容做哈希算出來的比時間戳精確有些服務(wù)器只給其中一個所以兩個都要兼容。注意etag and ...這個寫法etag為空字符串時直接短路返回False避免把「服務(wù)端沒給 ETag」誤判成「內(nèi)容變了」而觸發(fā)全量重抓。配套的調(diào)度循環(huán)大致是先對每個 URL 發(fā) HEAD 請求拿兩個頭查庫判斷要不要抓要抓才調(diào) pywebcopy抓完把新值寫回去。整站鏡像場景下這套邏輯要放在 URL 入隊的那一層而不是抓完再判斷否則省不下請求。5.3 交付前的三道校驗別讓殘缺產(chǎn)物出門抓完之后最怕的是「看起來抓完了其實缺了一半」。寫一個校驗函數(shù)把產(chǎn)物目錄里所有 HTML 的相對引用掃一遍檢查目標文件是否存在import re from pathlib import Path from urllib.parse import unquote, urlsplit REF_RE re.compile(r(?:src|href)([^])) def find_missing_refs(root: str, limit: int 30): 掃描產(chǎn)物里所有本地引用返回指向不存在文件的條目 root_path Path(root) missing [] for html in root_path.rglob(*.html): text html.read_text(encodingutf-8, errorsignore) for ref in REF_RE.findall(text): if ref.startswith((http://, https://, data:, #, mailto:, javascript:)): continue # 去掉查詢串和錨點再解碼百分號編碼才是真實的文件路徑 target (html.parent / unquote(urlsplit(ref).path)).resolve() if not target.exists(): missing.append((str(html.relative_to(root_path)), ref)) if len(missing) limit: return missing return missing三個細節(jié)決定這個腳本準不準。第一過濾協(xié)議前綴時要帶上javascript:和mailto:否則一堆內(nèi)聯(lián)腳本會被誤報。第二必須unquote因為 HTML 里的中文路徑通常是百分號編碼的不還原就會算出不存在的路徑。第三用limit截斷站點大的時候缺失項可能有幾千條全部打印出來反而看不到重點先看前三十條足夠判斷是系統(tǒng)性問題還是零星遺漏。校驗結(jié)果怎么用如果缺失集中在某幾類資源上比如所有字體都缺說明是解析層的系統(tǒng)性問題回到第 4 章對應(yīng)條目排查如果缺失是零散的、每次跑的都不一樣多半是網(wǎng)絡(luò)超時導(dǎo)致的下載失敗把delay調(diào)大重跑一遍缺失的部分即可。6. 進階把預(yù)渲染和特性補刀接進同一條流水線走到這一步pywebcopy 能覆蓋的場景已經(jīng)比較清楚了靜態(tài)渲染的內(nèi)容站、文檔站、活動頁歸檔幾行代碼就能出可用產(chǎn)物。剩下的短板集中在兩類一類是 JS 渲染一類是 HTML 特性覆蓋不全這兩塊都可以在調(diào)用它之前用幾十行代碼補上。先看一張對比表把不同頁面類型的推薦路徑列清楚省得每次都重新想頁面類型直接 save_webpage預(yù)渲染后再抓說明服務(wù)端渲染的內(nèi)容頁可用不必要首選方案成本最低靜態(tài)文檔 / 博客可用不必要注意 CSS 里的字體和 import單頁應(yīng)用產(chǎn)物為空殼必選先拿到渲染后 DOM 再抓重圖片的電商詳情頁部分可用建議srcset 多分辨率容易漏抓需要登錄的頁面不可用不可用會話態(tài)不在這個工具的射程內(nèi)預(yù)渲染那一步在第 4 章已經(jīng)給過代碼這里補一個把兩者串起來的做法先用無頭瀏覽器拿到渲染后的 HTML寫到一個臨時目錄起一個本地靜態(tài)服務(wù)再把本地地址交給 pywebcopy。這樣 pywebcopy 的解析和改寫能力仍然能用上同時它面對的不再是空殼。落地時注意本地服務(wù)的端口要固定別用隨機端口否則日志里的產(chǎn)物路徑每次都不一樣排查時對不上號。另一個高頻遺漏是srcset。響應(yīng)式圖片會給多個分辨率候選pywebcopy 對這類屬性的處理在不同版本上不一致穩(wěn)妥做法是在抓之前把srcset壓成一個src只保最大的一張import re def flatten_srcset(html: str) - str: 把 srcset 壓成單個 src取候選列表里最后通常最大的一張 def repl(m): candidates [c.strip().split()[0] for c in m.group(1).split(,) if c.strip()] if not candidates: return m.group(0) return fsrc{candidates[-1]} return re.sub(rsrcset([^]), repl, html)這個替換是粗暴的它不管原來的img上有沒有src直接覆蓋。生產(chǎn)環(huán)境里要先判斷節(jié)點是否已有src有的話只在srcset存在時才改沒有的話補一個。取最后一張是因為大多數(shù)站點的srcset按從小到大排列最后一張分辨率最高離線歸檔場景下清晰度比體積重要。最后說個我自己的習(xí)慣每次歸檔任務(wù)開始前先在紙上寫三行——這次要抓什么、抓到什么程度算完成、產(chǎn)物交給誰。這三行寫不出來說明需求還沒想清楚這時候調(diào)參數(shù)都是瞎調(diào)。鏡像網(wǎng)頁這件事工具只占三成剩下七成是想清楚邊界。前面那些踩坑記錄有一半是因為我一開始沒寫這三行。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91社操逼| 嗯嗯啊啊操我| 你草精品在线视频| 2025亚洲男人天堂| 国产亚洲国产超碰| 亚洲激情综合另类男同| 精品人妻一区二区三区四区不卡在| 乱日视频| 欧美日韩国产在线| 97国产高清视频在线观看| 蜜臀久久99精品久久久久久-DVD原版全| 麻豆天美在线喷水AV| 亚洲人妻一区二区三区| 亚洲天堂性爱| 天天操天天插| 另类在线| 射丝袜高跟鞋99| 一区二区娱乐网站| 欧亚乱色熟女一区二区| 91狠狠综合久久久| 国产亚洲国产超碰| 天天干夜夜操网| 国产精品白领在线观看| 亚洲性爱电影| 欧美aa一级片| 亚洲AV永久无码一区仙野| 午夜黄色免费在线观看| 激情干在线| 99视频这有这里有精品| 色播五月婷婷| 亚洲色五月| 国产九月婷婷| 高清不卡国产| 热天堂一区二区| 99热在线观看| 超碰欧美97资源| 日本三级韩国三级美三级91| 人妻丝袜一区二区三区在线| 欧美色网络| 天天干夜夜鈤| 日韩性爱一级片| 久久国产AⅤ| 日韩免费av片高清无码| www.亚洲成人一区| 色综合av男人天堂| 99色在线| 久久的网站啊啊啊啊啊| 欧美日韩人妻婷婷一区| 这里都是精品| 国产精品久久久| 婷婷超| a片 xxxx受爽视频| 麻豆天美91| 美日韩男女操屄视频| 日韩三级在线观看网站| 中文字幕av乱伦| 久久久久国产精品片区无码直播| 自拍偷拍2025在线观看| av72网| 日本幼女18+| 玖玖久久久| 粉嫩av平台| 老子午夜伦不卡影院| 91社操逼| 精品精品精品| AV色五月天| 国产一线二线三线av| 亚洲精品久久久久毛片A片拉屎| 思思热一热婷婷热一热| 天天综合网国产| 91女人的网站| 色综合1991| site:sinbotex.com| 91久久免费视频互動交流| 黑人狂躁日本妞一区二区三区| 色999五月色| 国产一级久久久| 舔舔啊| 亚洲人成在线放东京热| av在线免费一区二区| 天美麻花大全视频| 欧美激情超碰777| 骚女高跟AV在线| 91丝袜美女视频| 久久久久国产精品喷潮免费观看臀| 丁香五月电影| 操逼无毒无码免费视频| 丝袜人妻av一区二区| 久久综合激情| 新97国产超碰| 精品国产Av无码久久久亚洲| 亚洲精品日日夜夜52| 国产专区路线| 日骚逼视频| 综合免费无码中文| 亚洲熟女乱熟乱熟妇综合网二区| 人妻天堂网| 中国zzijzzijzzwww精品| xxx亚洲午夜天堂| 欧美亚洲首页| 裸体美女免费看网站青草| 欧美成人综合| 在线中文字幕极品av| caopeng97| 91亚洲色图| 色欧美天天| 国内一级精品| 狠狠穞A片一區二區三區| 国产精品久久久午夜夜伦鲁鲁| 久久久久久久伊人精品| 午夜性| 亚洲高清自拍| 久久久久国产亚洲一区欧美色图日韩| 久一区久久蜜桃| 91久久久久久| 啊啊啊啊啊啊在线| www久久久| 97神马久久| 欧美人妻一区| 91在线国产后入风骚翘臀美女素人| 精品成人无码| 免费成人在线熟妇网| 日韩精品人妻一| 夜夜狠狠躁日日躁色视频| 78久久| 人妻夜夜爽天天爽麻豆三区网站 | 青青草依人大香蕉| 91碰碰碰| 日韩成人无码| 人妻在线大香蕉| 最近2018中文字幕在线高清第一页| 91人妻人人妻| 性饥渴少妇av无码毛片| 加勒比伊人综合| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 夫妻天天操岛国视频| 99啪啪视频| 超碰人人干天天射| 麻豆久久视频在线地址| 国产辣妈在线视频福利| 好一吊区二区| 三级三级三级日本99| 91性片| 久久熟女人| 色翁荡息又大又硬又粗又爽| 加勒比综合a∨| 99综合免费视频| 深喉吞精| 97色诱| 蜜臀久久99精品久久久久久成人小说| 91视频伊人| 99re黄| 无码高清专| 一区二区不卡免费| 嗯嗯啊啊亚欧精品| 99操逼| 日韩二三区| 91色综合激情| 亚洲成人激情小说视频| 欧美精品自慰系列寂寞少妇| 日本好吊色视频| 午夜乱轮操逼视频免费看| 射欧美综合| 激情无码日韩| 亚洲国产精品久久久久婷婷老年| 少妇高潮对白在线观看| 老鸭窝在线视频播放| 亚洲一区二区三区四区视频| 日韩大香蕉AV影片| 日本丝袜美腿人妻九九| 精品一区二区久久| 插B在线观看| 国产 日韩 欧美一区| 久操国产在线| 欧色网址| A啊啊在线观看| 啊啊啊骚| 97超级欧美| 婷婷五月天基地| 日本成人A片网站| 97在线视频网站| 久久草视频污视频| 欧美国产有色电影| 绑缚麻绳人妻寝取完整版| 丁香婷婷久久 | 午夜后入| 国产夜夜操| 色五月网址| av午夜影院在线播放| 蜜臀99久久精品久久久懂爱| 天天操天天干美女网址导航| 91网站在线播放| 91欧美偷拍| 小泽玛利亚一二三| 殴美牲| 色婷久久| 国产成人网站在线观看| 大香蕉久| 91 手机在线播放 绯色| 亚洲天堂综合AV| 午夜精品探花| 99在线观看| 欧美婷婷五月天| 欧美日韩性爱操大逼| 久久欲| 青娱乐福利99| 天天谢天天干| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 人人弄人人摸| 欧美日韩插逼视频| 亚洲五码一区二区三区| 亚洲图片欧洲图片aⅴ| 国产亚洲精品农村妇女| 美女极品一区二区三区| 亚洲综合精品国产一区| 日韩久久激情精品| 9久久精品| 亚洲国产日韩欧美熟妇在线| 日本久久精品| 夜夜肏2021| Av色五月| 国产精品不卡一区二区三区| 999色欧美中文字幕| 97视频一区| 欧美熟妇精品黑人巨大91| 加勒比综合网| 超清福利精品视频在线| 国产一区二区av综合| 综合影视国产无码| 99欧美| 91女人的网站| 婷婷香网站| 台湾佬中文娱乐网久久久久久久久久com | 中文字幕中文字幕一区二区| 亚欧Av| 五月综合久久| 欧美色66| 屁股久久久久久久久| 中文字幕欧美精品亚洲日韩蜜臀| 日韩亚洲欧美中文字幕| www.91理论| 亚洲福利中文字幕在线| 久久久久久久78| 久久综合av| 欧美亚洲韩国视频十五区| 丝袜AV一区二区三区| 男女啪啪啪18禁网站| 91精品女厕偷拍视频| 桃色五月天| 综合激情97 | 97久久久精品| 日本 情色 1区2区3区| 欧美性91| 男女激情黄色网址| 好爽,再快点啊哈嗯嗯嗯嗯| 91超碰碰在线| 午夜精品久久久| 中日亚韩免费视频| 97精彩视频网站| 呦女网站| 欧亚无码视频| 曰韩精品九九无码| 国产精品高朝久久久久久久| 日韩偷拍一区二区三区 | 91男同| 国产精品点击进入在线影院高清| 欧美人人AAA| 超碰激情808| 中文字幕激情小说| 成人av动漫在线观看| 久久亚洲不卡一区二区三区| 国产精品操| 日韩AC| 九九热精彩视频| 亚洲一区二区在线观看91| 亚洲码专区| 超碰在97| av在线一区二区三区| 嗯嗯啊啊用力视频免费| 九九九九九精品| 久久久婷婷| 九九九九九九免费视频| 丝袜剧情| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 东北女人av| 骚熟女AV网| 国产精品蜜乳AV| 天天碰操中国年青熟妇| 亚洲男人久久综合天堂| 91热情品| 高清无码在线播放网站| 啊啊啊啊好疼视频| 黄色小视频日本txt| 亚洲涩涩| 丰满岳乱妇一区二区三区| 亚洲另类综合欧美| 操国产逼| a人欧美综合天堂麻豆| 精品视频一区二区| 日韩三级网址| 日韩熟女操逼| 加勒比AV天堂| 人人操人人大香蕉| 欧美在线大香999| 日韩乱伦视频| 亚州男人天堂| 99热99re超碰精品| 日韩精品一区二区日韩| 久湿久久| 五月天伊人| 91精品国产一区三一| 少妇二级| 级做a爱无码性色永久免费| 伊人久久国产免费观看视频| 无码免费精品高清| 啊啊嗯嗯好爽| 精品一区二区久久| 狠狠干综合| 可免费观看的av毛片中日美韩| 国产精品乱人伊人网| 视频国产成人精品日本亚洲18| 99re6久热只有精品6在线直播| 日本熟妇浓毛hdsex| 天天摸夜夜摸| 91高清无码下载| 91丝袜人妻| 99啪| 国产精品午夜高潮呻吟久久av| 欧美性高潮在线| 青娱乐 成人娱乐在线| 99re国产精品视频| 一二三区精品视频| 日本天天干天天搞一区| 婷婷激情四射| 午夜.DJ高清在线观看免费7| 久久风骚城市人| 人妻天堂综合网| 偷拍三区| 亚洲中字幕日本一区二区三区| 偷拍色图| 四虎AV影视国产精品亚洲精品| 日本道久久综合色色| 国产老太乱伦一区| 91中出在线| 综合网欧| 伊人久久亚洲中文字幕| 色情五月丁香| 国产白嫩漂亮KTV在线| 欧美成97爱| 国内操逼视频二区| 九九九久千久久激情蜜桃在线看 | 天堂69亚洲精品中文字| 无马一区二区| 小草av不卡亚洲二区| 校园春色之综合网| 激情色播| 在线可观看的黄色网址| 久久综合国产精品国产| 国产成人在线观看网址| 91欧美色| 午夜精品久久久久久久第一页按摩| 操B久久| 怡红院视频在线| 视频分类 国内精品| 四虎午夜影院| 在线观看中文字幕| 91丨人妻丨国产丨丝袜| 亚洲成人ab| 日韩91网| 天天干人人乐| 97爱爱官网| 人妻熟女一区二区| 另类老少妇| 久久久久久久综合,国产| 裸模AV女优| 色盈盈影院| 英伦大奶子熟妇吊带| 综合熟女| 丰满人妻-区二区三区免费| 精品国产一级久久| 国产精品自产拍在线观看社区| 欧美强奸乱能| 5月婷婷6月六月丁香| 操操逼操操逼操操逼逼| 东北丰满熟女国产一区| 午夜一级免费毛片| 一本大道不卡一二三区| 一本一道vs波多野结衣| 久久99午夜精品一区人妻| 日日操丁香五月天| 少妇高潮对白在线观看| 综合一区中亚洲国产成人综合精品 | 午夜啊啊| 亚洲天堂2020| 久久男人的天堂| 激情婷婷综合久久| 一起草欧美| 亚洲日韩美女中文字幕乱| 92午夜免费福利视频| 激情啪啪拍91| 精品国产乱码久久久久久久久1| 天综合网| 大乔未久88一区| 九九九九97| 精人妻一区二区三区| 蜜臀久久99精品久久久久久| 91香蕉国产尤物视频| 边做饭边操逼逼| 3d成人精品一区二区| 国产中文字幕曰本毛片| 亚洲五月丁香花狠狠干一区二区三区| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 91丝袜美腿网站| 老熟女熟妇| 麻豆天美在线喷水AV| 欧美 日韩第一性色| 日本欧美不卡| 日韩欧美中文日韩欧美色| 黑人黄片在线免费观看| 国产精品久久久久久夜夜夜| 91n免费处女| 亚洲97资源| 久久久精品网站| 亚洲一级性爱视频免费看| 99啪啪视频| 骚乳在线| 99热线麻豆| 国产在线综合福利网站| 午夜精品视频777| 美女露胸露奶头| 美女骚尻视频| 欧美gv在线观看| 熟女六十路| 91色噜噜狠狠| 999精品久久久久久久| 高清国产成人无码| 加勒比无码一区二区三区| 欧美情色贴图| 97欧美超碰| 婷婷AV一区二区三区| 色五月69夫妻| 亚洲成人贴图| 丁香婷婷久久 | 蜜臀无码视频在线观看| 99在线精品视频| 精品人妻一二三四区视频| 96精品久久久久久久久久| 国产做?爰片久久毛片?片美国| 色诱中文字幕| 国产精品久久久吖| 91久精品| 亚洲人妻久久| 日日干夜夜干| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 欧美高清在线| 精品中文字幕一区二区l - 百度| 99国产在线绯色一区| 国产人妻久久精品一区二区三区| 色色色色日本| 久久熟女久| 自怕偷自怕亚洲精品| 性色高清在线| 国产又色又粗又黄又爽| 96爱综合| 一区不卡在线观看av| 色综合中文字幕不卡| 欧美在线天堂| 射 色综合| 亚洲另类春色| 大稥蕉免费视频这里只有精品| 欧美大的香蕉有线电视视频| 九九色综合| 97Ai亚洲| 尤物av网站| 乱伦熟女论坛| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 精久久久| 色综合久久久久| 干b网| 久操热线| 亚洲欧美伦综合| 精品久久視頻在线| 欧美不卡五十路| 欧美精品第四五页中文字幕在线观看| 青青青国产手线观看视频2| 中文字幕乱碼在线| 国产高清MV操逼视频| 久久久久久裸体| 欧美亚洲日本激情在线| 97色综合中文网| 91狠狠综合久久久久久| 亚洲精品三区在线观看| 亚洲综合 欧美| 久久激情网| 97精品| 日韩精品9999| 丰满人妻av一区二区三区| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 乱伦一二三| 91久久堂| 91精品久久久久久77777| 欧洲综合色图| 亚州综合AⅤ| 国产一级αv免费看片| 亚洲熟妇A V黑人| 超碰97资源大奶| 免费在线黄片视频| 97超碰日韩| 夜夜嗨绯色| 久久 国产精品 一区| 精品熟女呻吟久久91| 青青草白白色| 婷婷五月影院| 啪啪AV导航| 青青草久草| 视频二区熟女人妻| 国产性刺激| 婷婷五月天AV| 精品少妇人妻av久久免费| 97超级久久| 免费成人在线熟妇网| 国产三级在线现体验区| 91日韩| 夜夜操狠狠操| 国产精品无码久久久久2025| 丝袜视频网国产90| 操b网站亚洲无码| 五月丁香激情综合| 老熟女乱子伦中文字幕一区二区| 天堂性色| 在线洲亚线| 96国产污污污丝袜| 青青草在线成人视频| 日韩中文字幕二区| 91香蕉视频在线观看免费| 躁躁躁日日躁2020| 国内成人圈中文字幕无码视频 | 精品视频在线观看| 2020中文字幕在线| 丝袜狂射91| 亚洲综合性感在线| 四虎 精品 WWW| 日韩av乱伦| 最新的亚洲无吗| 欧美一二三级精品在线| 日韩福利电影网| 综合久久2017| 另类欧美色| 国产嫩草精品A88AV| 国产精品久久久久久9999| 日韩少妇丰满亚洲| 久久精品亚洲东京热色播| 久操视频免费在线观看| 天天影视综合网欧美精品| 五月天婷婷基地| 日本精品不卡一二三区| 乱伦系列一区二区| wwwcaobibi| 岛国黄色大片网站| 日本熟女中文| 操碰91| 九九在线精品| 懂色AV一区二区三区| 国产亚洲一黄| 欧美专区在线| 综合网~91综合网| 天天色怡春院| 久久久草草精品| 欧美色老汉| 国产成人五月天丁香花| 免费一二区| 国产强奸乱伦无码视频| 秋霞一级A片黄色视频| 操婢日韩| 久草免费在线一区二区| 狠狠操狠狠插| 日日日啊啊啊| 久久久禁| 亚州欧美另类| 一区AV| 免费观看国产不卡av| 成人美女av| av九九| 亚洲天堂另类小说男人| 2017大香蕉国产精品久久| 国产精品3| 99999亚洲| 超碰在线欧美性爱激情| 思思性爱| 精品国产乱码久久久久久影片| 亚洲天堂女优在线| 无码人妻系列少妇| 伊人麻豆传媒| 人人操人人操人人操人人操人人操人人人11.CM| 免费一级a毛片久久久久久鸭绿欲| 亚洲av影院在线观看| 天天爽天天爽| 国产精品丝袜久久亚洲不卡| 91bbbbbb| 亚洲第2页| 超碰97欧美在线 | 人人操人人舒服| A 天堂在线观看视频| 中文字幕高清20页视频| 九九国产热| 婷婷五月天激情四射| 中文字幕乱在线伦视频中文字幕乱码在线| 婷婷五月天伊人| 久久国99999| 国产精品农村妇女| 国产精品呦一区二区三区| 首页亚洲国产高跟丝袜诱惑视频| 久日91在线| 久久精品| 欧美色五月| 欧美色图人妻| 影音先锋每日最新资源在线观看| 99综合视频一体| 欧美精品久久| 国产丝袜美女在线一区| 婷婷久久综合| 熟妇女伦乱视频视频| 两女互慰AV高潮喷水在线观看| 五月综合视频| 欧美亚洲韩国视频十五区 | 91色综合激情| 97精品免费视频网站| 一级A片女人高潮叫床| 你草精品在线视频| 欧美人体性爱互联网第一页婷婷日本| 国产精品无码AV网站| 99久在线精品99re8a| 国产无码精品久久久久久| 九九亚洲视频| 亚洲九九视频| 欧美黄色片AAAAA| 9997se| av在线免费一区二区| 2019AV天堂| 久久国产逼| 久久天天躁日日躁狠狠躁 | 欧美|91色综合| 欧美色图欧美| 日韩三级一区| 中文久久久| 啊啊啊啊嗯嗯嗯用力好爽 | 高清无码国产亚洲| 极品一区二区三区免费| 艹比视频国产精品| 五月天AV资源| 色婷婷综合网| 日韩小电影| 操少妇很爽av| 亚洲国产一级黄色视频| 97日视频| 亚欧日韩成人| 亚洲久草AV色图| 任你爽视频| 日本久久超碰| 99re3这里只有精品| 中文AV制服乱伦| 国产精品熟女九九九| 无码国产Av| 国模91| 色5月婷婷| 91综合熟女| 中文字幕加勒比海高清无码免费视频 | 国产一线二线三线av| 日日狠狠久久偷偷色综合免费| 日本欧美不卡| 色爱综合网欧美| 一本大道不卡一二三区| 精品制服美女中文一区二区三区| www色色com| 久久69| 绑缚麻绳人妻寝取完整版| 三级网色| 日夜伊人网| 狠狠夜色午夜久久综合在线| 婷婷亚洲五月***久久| 欧美91变态| 欧洲精品人妻| 久久婷婷五月天| 综合影院永久入口国产| 是还免费视频1727我| 91九色首页| 天天看天天干| 色天天野狼综合社区| 中文字幕老熟妇黄色视频| 免费观看性欧美一级| 国产又长又大又粗的视频| 精品久久青青草| 99久久婷婷丁香| 热热色91| 欧美激情久久久久| www.狠狠干.coom| 亚洲第2页| 亚洲色图欧美色图另类图片| 97视频在线免费播放| 天堂蜜桃无码视频一区二区| 日本操大逼| 国产女大学生AV| 久久精品综合| 又黄又粗又硬又长又大| 大香蕉婷婷| 中国大陆国产高清AⅤ毛片| 96精品久久| 欧美日韩97在线| 欧亚不卡| 小草三级久久观看| 超碰在线99| 久久毛卡| 久久久久久久九九九九九九| 青青青青操国内视频在线| 精彩久久中文| 老熟妇综合| 久久久工口| 婷婷色网| 精品人妻美妇91job| 日韩精品一区二区日韩| 日本性感人妻91| 夜夜爽夜夜高潮夜夜爽| 国产自偷| 色悠久久久av| 亚洲第91页| 欧美五区| 欧美性战999| 玖玖视频在线资源一区二区三区| 2018色综合天天操| 亚洲AV无码国产精品久久久久 | 日韩丝袜二区| av在线不卡一区二区三区| 亚洲一卡二卡在线免费| 久久精品国产精品一区 | 久久曰曰| 九九性爱网| 一级久久久久久久久久久| 国内偷自视频区视频综合| 午夜男女爽爽大片免费观看| 97九色| 欧美成人一级麻豆| 国产精品久久久| 91网站18| 91福利网在线观看| 韩国免费播放一级毛片| 四虎国产精品永久在线囯在线| 欧美成人性活片| 91精品91久久久久77777俄罗斯老妇姓x| 久久老熟女| 伊香蕉综合久久久久久久噜噜噜| 欧美高清91| 欧美姓爱综合网| 久久久久九九九| 欧美一区二区三区不卡高清视频| 一级片视频啪啪| 久久欲| 久久久久久久国产视频| 日韩不卡a级视频专区| 强奸乱亚洲| 青青草日韩无码| 亚州操操穴网| 欧美亚洲美少妇一区二区| 天堂涩涩| 大逼色网站| 亚洲午夜未满十八勿入网站日本又色又爽又黄| 国产精品爆乳懂色蜜乳| 超碰无码加勒比| 97国产高清视频在线观看| 欧美一级A片在线看视频性色| 丁香六月激情综合| 大香蕉十区| 亚洲欧洲第二视频在线观看色图| 天天综合网视频91| 伊人天天久久动态图| 91丨豆花丨熟女| 2024人人操人人摸| 91N五十路| 免费97视频| 久热热| 国产一在线观看| 超碰av在线| 丁香婷婷激情五月天无毒不卡| 精品无码产区一区二| 日韩有码专区| 人人操人人搞人人草| 香蕉久久国产AV一区二区| 在线综合 亚洲 欧美中文字幕 | 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 国产日韩精品人妻久久久久色欲网站| 操屄不卡视频| 好吊色一区| a啊啊啊啊啊啊啊啊一区二区| 国产强奸无码乱伦| 亚洲成A∨人影院在线欢看| 午夜天天碰综合视频| 国产情色在线| 综合影院永久入口国产| 日欧操屄视频| 婷婷五月天无码| 色99999| 色小视频蜜乳| 97 九色| 日韩三级伊人| 婷婷久久五月天| 中字一区| 国产美女销魂在线观看不卡| 欧美男人一区| 超碰 欧美| 中国国产精品一区视频| 婷婷综合在线观看| 亚洲丝袜少妇在线| 91free福利| 人妻天天爽| 欧美日韩另类在线| 国产性感骚丝袜在线| 精品国产99999| 深夜国产一区二区三区在线看| 99re8超碰| 男人的天堂网页| www.色婷婷| 伊人欧美大香蕉视频| 午夜偷拍久久熟女| 国产妇女精品视频青青草| 91P0RNY大屁股人妻| 久久久久久性爱片| 伊人操| 亚洲精品色| 九t超碰| 日本三级韩三级99久久| 亚洲日本大香蕉1| 爆操无码| 青青草一本道福利视频| 伊人女女资源在线观看| 麻豆黄站| 伦理片秋霞免费影院| 美国三级日本三级久久99| 久久毛卡| 九九九九九九九九九九九蜜桃| 免费一级特黄特色大片在线观看看| 亚州乱码中文字幕综合久久久| 国产亚洲色停停久久99精品91| 免费的av网| 91大神精品长腿在线观看网站| 国产性刺激| 亚洲日本激情| 神马影院午夜福利久久久| 精品午夜福利国产一区二区在线观看| 97自拍一区| 九九久久一区二区伦理| 91老熟女91老女人| 亚洲人妻AV| 亚洲色图欧美色图另类图片| 干B视频伊人网| 久久久久亚洲三级电影| 五月开心久久AV官网| 333kkkk·亚洲com久久| 色婷婷日韩精品一区二区三区| 午夜大香蕉| 国产精品不卡高清在线观看| 91色综合激情| 色嗨嗨在线| 久草精品在线| 中文啪啪视频| 国产精品视频自拍在线| 十八禁电影伊人网| 天天干天天拍| 一本色道综合久久欧美| 色眯眯av| 骚逼高潮久久精品| 亚洲av综合伊人久久| 精品人妻一区二区三区夜夜| 探花一区在线| 久久久96| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 9色国产精品一区粉嫩| 久日91在线| 99久久99九九99九九九| 人人爱人人乐人人操| 日本九九久久99| 色噜噜婷婷| 久久久国产av美女私房| 九九久精品| 国产白嫩精品久久| 天天干天天狼在线视频| 日本操逼视频免费| 九99久久| 97久久精品亚洲中六字幕| 中文字幕av亚洲在线| 操碰97| 久久精品国产97欧美精品亚洲| 操人妻丝袜高跟| 日韩黄色一区二区三区| TS人妖另类精品视频系列| 九99久久| 97爱亚洲综合色| 色色色综合网| 操逼操逼视频操逼| 亚洲影院无码在线| 欧美综合色,www| 农村妇女精品一区二区| 精品少妇后入一区二区三区四区人妻巨乳| 超碰在线香蕉| 国产精品又黄又猛又粗| 蜜臀99久| 伊人9| 九一精品牛牛一区二区| 中文字暮97| 啊视频在线| 国产精品嫩草影院免费| 亚洲一区中文精品| 超碰九7免费| 亚洲久久天堂| 99在线啪| 91强在线播放| 超硑97精品| 久无码| 日韩AV一区二区三区四四| 人妻精品视频一区二区| 口爆吞精在线观看| 成全在线观看免费观看| 肏逼视频日本| 国产精品ww久久| 欧美色图 色综合图| 欲色综合| 久9爱精品| 亚州五月| 91模特在线观看| 久久久久久九九九九九九| av72网| 91麻豆一二三区| 亚洲欧洲色情高清| 久久蜜色情在线视频xxx免费观看| 精品无码久久久| 狼人综合婷婷激情四射 | 国产热RE99久久6国产精品首| 色伊人91| 成人免费福利在线观看| 十八禁的黄污污免费网站| 岛国大片在线观看网站入口| 国产成人午夜视频网址| 人人操人人插人人摸人人干| 爽极品影院| 亚洲精品国产专区在线观看| 在线a v| 天天色综亚洲91污| 欧美一级黄色18片免费看| 久久久久国产精品片区无码直播| 91三级理论片播放器| 96久久精品一二三区色欲| 户外裸露刺激视频第一区| 3p国产色噜噜一区| 99精品久久| 欧美日韩国产传媒在线精品| 欧美有码亚洲中文字幕一区二区三区四区 | 粉嫩小泬久久久一区二区| 色网在线| 超碰在线综合97| 变态综合色| 久久AV无码AV| 乱伦a片视频| 无码免费精品高清| 99啪啪| 蜜桃中文字日产乱幕4区| 美女91在线观看| 青青青草伊人精品| 一本色道人妻久久| 极品销魂美女一区二区| 久久久国产亚洲精品系列| 五月婷婷无码| 91亚洲欧美色图| 久久精品高清无码一区| 久久岛国| 黄色人人| 久久久久9999| 伊人丝袜美腿高跟在线观看高清| 超碰久久综合| 中文字幕三四区| 久久一区二区高清免费| 婷婷爱五月| 婷婷另类小说| 日韩久射综合| 欧美偷拍区| 熟女乱伦二区| 亚洲成人精品久久久| 疯操AV| 国产精品嫩草影院午夜两性 | 97国产天堂岛| 国产在线激情| 国产女同视频在线播放| 色99色| 97伪v| 午夜精品久久一区二区| 欧美v亚洲v日韩v最新在线二区 | a片久久久久久久久久久久 | 久久精品国产亚洲AV片多多| 翘臀vidoes| 人人妻天天做天天爽| 国产 日韩,欧美 自拍| 精品亚洲国产成人AV制服丝袜| 99爱久久视频频| 十八禁黄色| 懂色天天爱天天日天天射天天澡| 日韩AV电影网站| 日夜尻逼网| 天天草夜夜草高潮片| 欧美精品另类人妖xxxx| 自拍啪啪视频| 色婷婷激一区二区三区 | 亚洲在线A| 欧美αv.com| 精品国产污一区二区三区| 亚洲色图A| 全球成人中文在线| 国产精品丝袜久久亚洲不卡| 欧美亚洲自拍另类人妻| 婷婷五月天成人| 校园春色欧美| 97精品熟女少妇一区| 日日夜夜骚| 久久一二三四| 9/A片| 欧美性暴力| 屌色在线97视频| 97ai亚洲| 久操大香蕉| 大香蕉一人| 国产无套粉嫩白浆在| 男女性扦B| 日韩AV无码中文一区二区| 欧美人妻中出| 强奸国产在线| 亚洲日韩欧美一区二区| 国产日产精品久久快鸭的功能介绍| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 大香蕉伊人在线成人AV在线观看| 久久久久99999| 五月激情综合网| 蜜臀网 一区| 国内外色色色色色成人视频| 久久蜜桃一区二区| AV中文在线| 999精品女人| 亚洲AV无码天美传媒一区| 国产白丝av| 精品99999久久久久久| A级在线视频| 久草婷婷| 久久人人爽爽人人爽人人片αV| www.高清无码诱惑一区.com | 91欧美丝袜| 高清在线偷拍自拍视频| 丝袜美腿操av| 日韩精品一二三四| 大香蕉一级黄色片久久| 和协无码影院| 日韩免费大片一级播放| 日韩精品一区,二区 九九...老司机| 黄片免费看黄片免费看| 亚洲图片 欧美电影| 婷婷五月花| 欧美人体性爱互联网第一页婷婷日本| 国产精品青青草| 人人干黄色| 搡老女人老91妇女熟女| 综合婷婷| 亚洲一级黄色毛片| 嗯嗯啊好大| 久久精品性| 亚洲成人激情小说视频| 青青青艹在线视频| 婷婷五月综合在线| 亚洲精品久久久久毛片A片拉屎| 久久超碰、| 午夜精品久久久久久久99蜜桃一| 一本色道人妻久久| 国产91精品久久久久久久网曝门| 嗯啊抽插大香蕉网页| 校园春色美腿丝袜 | 天天插夜夜操| yazhououmeizongya| 少妇99成人麻豆| 做爱A级亚欧| 天天综合中文字幕 91| 99亚洲人人| 91九九| 一级@啪啪视频| 99久在线精品99re8蜜桃| 国产福利夜| 九九色婷婷| 9丨亚洲一区二区在线| 综合自拍| 久9久9精品| 日韩精品区二区三区不卡| 国产欧美精选自拍一区| 天天欧美| 91少妇通奸网站| 亚洲精品丝袜| 717影院理论午夜伦八戒| 欧洲亚洲国产综合在线| 色九久| 天天综合网合集91| 中文字幕版| 99在线精品视频| 亚洲乱码国产乱码精网站| 欧美一区二区男人天堂| 蜜桃香蕉久草精品在线| 男人的天堂VA在线| 97中文天堂| 久热伊人| 可以免费观看的日韩av毛片| 国产乱伦视频污| 精品人妻一区二区三区免费视频| 亚洲色资源| 久久嫩草国产成人一区| 天天插天天插| 干婷婷综合网| 亚洲天堂中文字| 少妇被c 黄 免费观看| 欧美亚洲特P| 久久久天美| 劲爆欧美人妖三区91| 青春草A| 97综合日韩| 黄页大片在线观看| 婷婷六月色| 国产精品青草综合久久| 色成人Www精品永久观看| 一区二区三区在线美女| 天天射天天操天天干天天吃2018| 伊人超碰97| 好湿好紧视频| 偷拍亚洲情色| 99热99re6国产在线播放| 狠综合网| 国产精品suv一区| 91国产大片| 97硬碰| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 国产成人精品午夜福利| 一线黄色免费性爱片| 日本道日本道中文字幕日本道最新日本道在线观看 | 另类小色呦| 欧美专区日本专区| 中日韩欧美精品无码AⅤ一区二区| 亚欧成人综合影院| 国产精品嫩草久久久久| 一级二级三级黑人无码| 天天操人人操狠狠插| 久久久久久久九九九九九九| 色欲久久久久综合网| 八戒午夜福利理论片| 伦激情人妻另类人妻| 久久riav中文精品| 亚洲欧综合另类无码一区| 日韩欧美综合激情| 欧美一级A片在线看视频性色| 亚洲最大无码中文字幕网站| 九九色精品| 欧美成人都市人妻| 四虎永久在线精品免费网址|