国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

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

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

pywebcopy離線歸檔與整站鏡像實戰(zhàn):參數(shù)、避坑與校驗 簡介pywebcopy 是一個用 Python 編寫的網(wǎng)頁抓取與歸檔庫面向需要保存完整網(wǎng)頁或整站鏡像的開發(fā)者、爬蟲學習者和資料歸檔人員解決頁面樣式、腳本、圖片等靜態(tài)資產(chǎn)分散、離線閱讀不便的問題。壓縮包共 32 個文件約 65KB以 19 個 py 源碼模塊為核心輔以 8 個 md 說明文檔、2 個 yml 配置文件及 requirements、許可證等輔助文件便于閱讀實現(xiàn)、運行示例和二次開發(fā)。已有 570 人學習或下載。它支持一次調(diào)用保存包含 CSS、JS 和圖像的網(wǎng)頁也可克隆完整網(wǎng)站并重新映射資產(chǎn)與鏈接代碼中涵蓋爬蟲、解析、API、頁面結(jié)構與配置等模塊并強調(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)容歸檔、離線演示、設計參考站快照的從業(yè)者不適合直接拿來對付需要登錄態(tài)或者純 JS 渲染的站點這條邊界后面會反復提到。2. 最小閉環(huán)從 pip 到一份能雙擊打開的離線頁面先把單頁跑通再談整站。很多人上來就save_website一個域名結(jié)果跑了兩小時抓回來一堆日歷頁和搜索結(jié)果頁磁盤漲了十幾個 G真正想要的正文目錄反而沒抓全。單頁驗證能讓你在十分鐘內(nèi)看清產(chǎn)物結(jié)構知道資源落在哪、引用被改成什么樣后面出問題才有對照。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é)構很關鍵因為它決定了失敗長什么樣。如果是請求層掛了你會看到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__)最后一行能打印出安裝路徑說明導入沒問題。接下來是最小調(diào)用把目標地址、產(chǎn)物根目錄、任務名三個東西給齊就行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, # 本次任務的子目錄名相當于任務 ID overwriteTrue, # 同名任務目錄已存在時整個覆蓋 delay0.3, # 每次請求之間的間隔單位秒 )這段代碼里url必須帶完整 scheme只寫域名會直接拋異常project_folder和project_name拼起來才是最終落在磁盤上的任務目錄所以project_name別隨便起建議用「日期 頁面 slug」方便日后回溯overwriteTrue在調(diào)試期很省心但它會刪掉整個舊目錄重來一旦你把它設成某個已經(jīng)歸檔好的歷史任務名之前的產(chǎn)物就沒了。歸檔場景下我一般設成False看到目錄已存在的報錯反而說明沒誤傷。跑完之后先別急著驗收用tree看一眼結(jié)構比任何文檔都直觀tree -L 3 ./mirror/activity_2024 | head -402.3 產(chǎn)物目錄里到底落了什么不同版本在子目錄命名上會有些差異但骨架是一致的HTML 按 URL 的 path 映射成目錄層級資源集中落在頁面同級或子級的資源目錄里。第一次跑完建議對照下面這張表逐個確認缺哪一類就說明哪一層的解析漏了。路徑 / 文件內(nèi)容驗收要點project_folder/project_name/任務根目錄每次調(diào)用生成一個命名要可回溯與 URL path 對應的.html頁面主體打開后正文應完整不依賴網(wǎng)絡資源子目錄css / js / 字體 / 圖片目錄名隨版本略有差異以實際產(chǎn)物為準HTML 內(nèi)的引用屬性已改寫成相對路徑用編輯器搜索https://應基本清空原始 HTML 備份部分版本改寫前的副本有的話留著出問題能對比驗收動作可以很簡單把網(wǎng)線拔了雙擊那個 HTML看三件事——正文在不在、樣式對不對、圖片裂沒裂。三樣都過單頁這條鏈路就算通了。有一樣不過回到 2.1 的三層模型去定位。2.4 三個必須先定下來的參數(shù)單頁場景真正需要調(diào)的參數(shù)不多但下面這幾個一旦定錯后面整站鏡像會放大成災難。參數(shù)默認值作用我一般怎么定project_folder當前目錄產(chǎn)物根目錄掛到獨立數(shù)據(jù)盤別放代碼倉庫里project_name按 URL 生成本次任務子目錄日期_slug歸檔場景絕不復用overwriteFalse同名任務是否覆蓋調(diào)試True正式歸檔Falsedelay0請求間隔秒目標站有頻控就調(diào)到 0.51.0threadedFalse是否多線程下載單頁無所謂整站建議關zip_projectFalse抓完是否打包成 zip需要交付單個文件時開delay這個參數(shù)值得單獨說一句。它控制的是每次請求之間的等待看起來不起眼但在整站鏡像里是決定你會不會被目標站限流的關鍵。很多人第一次跑整站就把delay設成 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是一次性的解析當前頁、下載依賴、改寫、結(jié)束不關心頁面里指向的其他 HTML。save_website維護一個待抓隊列每抓到一個 HTML 就從中提取站內(nèi)鏈接判斷是否在白名單內(nèi)、是否超過深度、是否命中黑名單通過了才入隊。這個機制帶來兩個直接后果。第一深度是相對入口頁計算的入口頁算第 0 層它鏈出去的算第 1 層max_depth3意味著最多跟三層再深的頁面不會被抓。第二去重完全依賴 URL 字符串同一個頁面如果有?fromhome和?fromlist兩個入口會被當成兩個不同頁面各抓一遍產(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, # 大站關掉多線程隊列順序更可控 overwriteFalse, )allowed_domains是一個常見翻車點。它的語義是「允許抓取的域名」不包含主域之外的 CDN 域名時頁面里那些托管在 CDN 上的圖片可能抓不到。穩(wěn)妥做法是先把頁面里的資源域名掃一遍把靜態(tài)資源域也加進去。至于資源抓取是否嚴格受這個白名單約束不同版本行為有差異所以最終還是要靠產(chǎn)物驗收來判斷別把它當成鐵律。blacklist_urls用的是正則匹配匹配對象是完整 URL。寫的時候把/logout、/search?、/calendar/這幾類先排掉能省掉一大半無效請求。帶查詢串的 URL 記得把?也轉(zhuǎn)義進去否則只匹配到路徑部分。3.3 delay 和 threaded 的取舍限速比并發(fā)重要整站鏡像最常見的誤區(qū)是把「抓得快」當成目標。實際上你真正要的是「抓得全且不重來」而重來的成本遠高于慢一點的成本。配置組合適用場景風險threadedFalse, delay0.5~1.0絕大多數(shù)整站歸檔慢但產(chǎn)物完整、可復現(xiàn)threadedFalse, delay0本地起服務測試對真實站點不要這么干threadedTrue, delay1.0大型靜態(tài)站、內(nèi)網(wǎng)環(huán)境隊列順序亂日志難對賬threadedTrue, delay0不推薦極易觸發(fā)限流抓到大量錯誤頁我自己的習慣是第一次跑永遠用單線程加 1 秒間隔先抓個二三十頁看看產(chǎn)物質(zhì)量和日志確認沒問題再決定要不要提速。提速的方式我傾向于「分批跑」而不是「調(diào)高并發(fā)」——把站點按欄目拆成多個任務每個任務用不同的project_name跑完再合并。這樣任何一個批次失敗損失都是局部可重跑的。還有一點容易被忽略delay作用的是請求之間的間隔但整站鏡像里有一部分耗時是資源下載那部分如果不走同一個限速器實際壓力可能比你預期的大。所以跑的時候盯著目標站的響應碼看一旦出現(xiàn) 429 或 503 的批量出現(xiàn)立刻停把delay翻倍再繼續(xù)。3.4 robots 與 bypass_robots 的邊界pywebcopy 有一個bypass_robots參數(shù)含義是抓取時是否忽略目標站的 robots.txt 限制。這個參數(shù)的默認值是False也就是默認遵守。我的建議很明確除了你自己擁有或者明確獲得授權的站點其他場景一律保持默認。robots.txt 表達的是站點運營方對爬蟲的意愿繞過它既可能違反站點條款也會讓你在對方日志里變成明顯的異常流量。歸檔公開內(nèi)容時正確的做法是先看一眼目標站的 robots.txt瀏覽器直接訪問/robots.txt就能看確認你要抓的路徑不在禁止列表里再按delay限速慢跑。還有一層現(xiàn)實考慮即便技術上繞過了對方一旦識別出高頻訪問封的是 IP 段你的整個抓取任務會從某一刻起全部返回 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é)果可能算錯基準目錄導致資源被下載到了另一個位置而引用路徑指向空處。解決先手工確認基準。打開產(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)這段邏輯的關鍵是relative_to它算出的是從 CSS 文件所在目錄到資源文件的真實相對路徑比手工拼字符串可靠。參數(shù)assets_dir要指向你實際發(fā)現(xiàn)資源所在的目錄跑之前先find一遍確認。4.2 抓回來一片空白HTML 里只有一個空的掛載點現(xiàn)象產(chǎn)物 HTML 打開是白屏查看源碼只有div idapp/div和幾個 script 標簽正文一個字都沒有。原因目標是單頁應用正文由 JS 在瀏覽器里渲染出來服務器返回的原始 HTML 本身就是空的。pywebcopy 拿到的是服務器響應不是渲染后的 DOM所以它抓到的就是那個空殼。解決在 pywebcopy 之前插一步預渲染用無頭瀏覽器把頁面跑一遍、拿到渲染后的 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)絡靜默比 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)是本地相對引用不會再重復下載也不會撞名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算出相對當前工作目錄的路徑所以調(diào)用這個函數(shù)時的工作目錄要和后續(xù) pywebcopy 的project_folder保持同一基準否則改寫出來的相對路徑會偏。4.4 中文全是亂碼英文正常現(xiàn)象抓下來的頁面中文變成???–?這種字符英文和數(shù)字完全正常。原因目標站響應頭里沒給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) # 先看響應頭聲明再看內(nèi)容推測兩者不一致時以推測為準 print(declared:, resp.encoding) print(detected:, resp.apparent_encoding)較新版本的 pywebcopy 支持傳入編碼相關的關鍵字參數(shù)把探測到的值傳進去即可。如果你的版本不認這個參數(shù)退路是先按正確編碼把內(nèi)容寫成臨時 HTML 文件本地起一個 http 服務讓 pywebcopy 從本地地址抓——本地服務的響應頭你可以完全控制編碼問題就繞過去了。4.5 整站跑到一半卡住內(nèi)存持續(xù)上漲現(xiàn)象任務跑到幾百個頁面之后速度明顯變慢進程內(nèi)存一路漲到幾個 G最后要么被系統(tǒng)殺掉要么一直掛在那里不動。原因遞歸隊列沒有做上限控制加上threadedTrue時多個線程同時往隊列里塞 URL去重表膨脹再加上每個頁面的 DOM 對象沒有被及時釋放累積起來就是內(nèi)存雪崩。站點越大、重復入口越多這個問題越明顯。解決三個動作一起做。第一關掉多線程threadedFalse把并發(fā)壓力換成可預測的順序執(zhí)行。第二把blacklist_urls補齊尤其是帶分頁參數(shù)的?page、帶排序參數(shù)的?sort這些是隊列膨脹的主要來源。第三分批跑按欄目或按字母區(qū)間拆成多個任務每個任務用獨立的project_name跑完再合并目錄。批量跑的時候在外面套一層循環(huán)單任務失敗不影響后續(xù)日志里記清楚哪一批失敗了好補跑。注意整站鏡像前先估算體量。用max_depth1試跑一次看單頁平均產(chǎn)物大小和頁面數(shù)乘以預估總頁數(shù)得出來的數(shù)字如果超過磁盤剩余空間的七成就先拆批次。5. 封裝成能反復用的鏡像工具批處理、增量與產(chǎn)物校驗單次調(diào)用解決不了「每周歸檔一次」這種需求。真正要長期用得往上包一層命令行入口負責批量調(diào)度狀態(tài)庫負責跳過沒變的頁面校驗腳本負責在交付前兜底。這三塊加起來不到兩百行但能把返工率壓下去一大截。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任務名默認按時間戳生成) 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: # 單個任務失敗只記錄不中斷整批 print(f[fail] {url}: {exc}) if __name__ __main__: main()幾個設計取舍值得說明。depth1走單頁分支、大于 1 走整站分支是為了讓同一個命令既能做快速快照又能做深度歸檔不用記兩套參數(shù)。urlsplit(url).netloc直接把入口域名當白名單省掉手填但如果目標站的資源在獨立 CDN 域上這個默認值會漏抓所以正式場景還是建議加一個--allow-domain參數(shù)手動補。異常捕獲用寬泛的Exception在批處理場景里是對的——你寧可吞掉一條錯誤日志也不愿意因為第 3 個 URL 掛了導致后面 50 個沒跑。5.2 用 SQLite 記狀態(tài)跳過沒變化的頁面每周歸檔一次同樣的站點如果每次都全量重抓時間和帶寬都浪費在沒變的頁面上。判斷頁面變沒變最可靠的是服務端給的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)容做哈希算出來的比時間戳精確有些服務器只給其中一個所以兩個都要兼容。注意etag and ...這個寫法etag為空字符串時直接短路返回False避免把「服務端沒給 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 章對應條目排查如果缺失是零散的、每次跑的都不一樣多半是網(wǎng)絡超時導致的下載失敗把delay調(diào)大重跑一遍缺失的部分即可。6. 進階把預渲染和特性補刀接進同一條流水線走到這一步pywebcopy 能覆蓋的場景已經(jīng)比較清楚了靜態(tài)渲染的內(nèi)容站、文檔站、活動頁歸檔幾行代碼就能出可用產(chǎn)物。剩下的短板集中在兩類一類是 JS 渲染一類是 HTML 特性覆蓋不全這兩塊都可以在調(diào)用它之前用幾十行代碼補上。先看一張對比表把不同頁面類型的推薦路徑列清楚省得每次都重新想頁面類型直接 save_webpage預渲染后再抓說明服務端渲染的內(nèi)容頁可用不必要首選方案成本最低靜態(tài)文檔 / 博客可用不必要注意 CSS 里的字體和 import單頁應用產(chǎn)物為空殼必選先拿到渲染后 DOM 再抓重圖片的電商詳情頁部分可用建議srcset 多分辨率容易漏抓需要登錄的頁面不可用不可用會話態(tài)不在這個工具的射程內(nèi)預渲染那一步在第 4 章已經(jīng)給過代碼這里補一個把兩者串起來的做法先用無頭瀏覽器拿到渲染后的 HTML寫到一個臨時目錄起一個本地靜態(tài)服務再把本地地址交給 pywebcopy。這樣 pywebcopy 的解析和改寫能力仍然能用上同時它面對的不再是空殼。落地時注意本地服務的端口要固定別用隨機端口否則日志里的產(chǎn)物路徑每次都不一樣排查時對不上號。另一個高頻遺漏是srcset。響應式圖片會給多個分辨率候選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按從小到大排列最后一張分辨率最高離線歸檔場景下清晰度比體積重要。最后說個我自己的習慣每次歸檔任務開始前先在紙上寫三行——這次要抓什么、抓到什么程度算完成、產(chǎn)物交給誰。這三行寫不出來說明需求還沒想清楚這時候調(diào)參數(shù)都是瞎調(diào)。鏡像網(wǎng)頁這件事工具只占三成剩下七成是想清楚邊界。前面那些踩坑記錄有一半是因為我一開始沒寫這三行。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
99久视频| 91N综合在线| 91丨国产丨白浆秘 洗澡动漫| yaouchengrenav| 亚洲欧美日韩夜夜| 日韩综合97P| 97干在线| 精品少妇一区二区三区免费观看| 欧美 亚洲精品首页| 国产综合日韩伦理| 日韩激情视频| 免费久久一级毛片大黄| 五月天春色激情网| 另类TS人妖一区二区三区| 亚洲色图超碰在线| 亚洲欧美综合| 亚洲,欧美,春色,另类| 国产丰满少妇久久久精品影院| 97超碰美女| 国产农村一一级特黄毛片| 嗯嗯啊好大| 狠狠操官网| 色91综合网| 91亚洲欧美| 亚洲日韩一区电影| 欧美姓爱综合网| 久久一级无码精品毛片6| 欧美在线 亚洲| 人人操人人操人人人操| 午夜亚洲| 蜜臀精品1区2区| 狠狠操,使劲操| 蜜色网色哟哟| 1024人妻熟女一区二区三区| 懂色av中文字幕| www熟女乱伦com| 亚洲宗合电影| 成人免费在线网站| 猛猛干| 色999亚洲人成色| 美女诱惑一区| 97久久免费| 亚洲精品白浆高清久久久久久| 丁香五月婷婷基地| 是还免费视频1727我| 日韩欧美午夜视频在线| 超碰78| 少妇同性| 夜夜一区二区| 最新国产亚洲精品精品国产亚洲综合| 青青草久草| www.夜夜| 再深点灬舒服灬太大了添视频| 亚洲视频,小说| 一区二区不卡视| 精品人妻夜夜草| 天堂俺去俺来也www久久婷婷| 亚洲 另类 丝袜 自拍 动漫| 大香蕉综合在线| 九九草| 精品人妻一区二区三区夜夜| 大香蕉宗合网在线| 日韩精品一区二区日韩| 欧美同性恋 的搜索结果 - 91n| 91|九色|国产熟女| 高清无码一区二区三区| 欧美肥臀在线| 亚洲天天在线| 综合网97| 九月AV| 成人性爱美曰韩| 久久久久久999| 精品视频97| 久久中文字幕一区不卡| 少妇被c 黄 免费观看| 麻豆国产成人精品| 久久一二三四五六七八九区区区| 爽极品影院| 熟妇一区二区| 91l欧美在线| 中文字幕高清20页视频| 翔田千里av一区二区三区| 日韩电影在线观看网址| 尤物视频新赏网鲜网色诱网| 国产高清不卡视频| 亚洲情色91| 国语对白在线播放视频| 97无码视频在线播放| 热热色综合网| 级品肉射| 肉丝网站91| 91超级碰| 韩日无码在线观看| 萌白酱自拍视频| 91人妻精华帖| 无遮挡又黄又刺激的视频| 婷婷激情丁香| 夜夜嗨老熟女AV一区二区三区| 久久中文色图| 亚州色站 日韩电影| 五月丁香大香蕉| 国产男人又猛又粗又爽| 小日子操bb在线看| 日韩熟女无码| 久久激情婷婷| 亚洲97在线观看| 福利五区| 成人精品无码| 野狼福利社区| 18禁在线视频| 熟女五十路一区二区三| 人人操人人插人www| 日韩三级伊人| 3PAV乱伦视频| 91中出| 97天天综合| 欧美一区二区| 日本人妻最新在线中| 91亚州| 美女诱惑久久| 国产毛片片精品天天看视频| 亚洲婷婷综合网| 97啪啪| 一区二区三| 91天天综合网| 欧美 亚洲 在线| 免费在线视频97| #NAME?| 天天干夜夜鈤| 久久粉色| 国产亚洲精品久久久久小| 热思思免费视频| 狼人狠干| 日本乱人伦片中文三区| 国产大陆天天艹| 中文操嬖片。| 99在线免费视频| 日韩,欧美,中文在线| 5278欧美一区二区三区| 色五月婷婷色| 91人妻人人妻| 亚洲drav色图| 蜜臀AV一区二区三区| 精品少妇99| 亚州性色| 极品综合| 色婷婷色99国产综合精品| 艹少妇网站| 网页导航五月天免费一二三区| 操逼网站地址| 久久久999网站| 四虎视频在线观看| 91美女精品| 亚洲不卡三级手机播放| 中国一级操逼视频| 欧美日本国产日韩激情视频| 99综合| 国产人伦精品一区二区三区 | 精品少妇99| 九九九热| 色情五月丁香| 密臀AV在线| 骚鸭AV| 国产综合色精品在线观看| 国产福利视频精品视频| 久热婷婷| 蜜桃视频一区二区三区| 偷拍精品一区二区三区| 亚洲国产高清福利视频| 亚洲男人的天堂AV| 亚洲人妻爽爽爽| 日本三级A片网站com| 国产日本久久免费精品| 97热视频在线观看| 日本黄大片在线观看视频| 唐山老熟妇露脸啪啪叫| www.色五月| 久久综合女优| 天天做天天爱| 久久丁香| 久久中文字幕女同性恋一区| 日韩av无码网站| 久久久免费的精品| 精品一区二区三区四区女| 亚洲毛片久久| 色香色欲天天综合网天天来吧 | 久草网站免费在线观看| 午夜激情床戏激情| 欧美偷拍| 色噜噜人妻丝袜a∨先锋影| 人人手机欧洲亚洲国产人妻| 亚洲图片小说欧洲| 乱伦av麻豆| 九热大香蕉| 亚洲97综| 美女超碰978| 性欧美| 尤物网址| 久久久久网站-538在线视频-欧美永久乱码 | 国产色综合亚洲色综合吹潮| 96AV精品| 欧美日韩亚洲天堂| 六月丁香久久| 亚洲欧美激情小说| 亚洲成人网站在线观看| 97在线亚洲| 不卡一区二区日本视频| 一区二区首页| 男女做爰猛烈动高潮A片免费应用 少妇厨房愉情理伦片bd在线观看 不卡中文字幕aⅴ在线 | a一区二区三区乱码在线| 人妻夜夜爽天天爽麻豆三区网站 | 超碰在线91| 超碰人人在线| 999精品女人| 九九性爱网| 超碰天天操你比| 国产传媒午夜理伦精品| 精品96久久| 精品国产一区二区三区四区在线看| 男人亚洲91首页在线| 人妖欧美一区二区| 五月天社区| 91丝袜在线播放| 女优视频第10页| 精品国产AV一区天美传媒| 中文字幕一二区二三区人妻专区| 日韩欧美天天爽爽爽天天爽爽| 四虎国产精品永久地址入口| 99国产精品自在自在| 国产黄色 A 片免费看| 日日干日日操五月天伦理视频| 色图综合网| 欧美狠狠鲁| 国产精品福利视频播放| 亚洲麻豆18发?| 国产探花日韩援交| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 一本色道无码DVD中文字幕| 亚洲国产欧美日韩人妻日中文| 国产综合色精品在线观看| 亚洲蜜臀懂色| 国产精品成人久久一区二区三区| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 欧美天堂亚洲电影院一区在线播放| 影音先锋日本一区二区| 久久精品中文字幕女同| 日韩精彩免费| 无码操逼视频一下| 老鸭窝在线视频播放| 久久久一区二区三区四曲免费听 | 俺去俺来也在线www| 亚洲综合嫩| 天堂av2019| 久操网址| 91人妻人人澡人人爽人人精品| 亚洲男人的天堂AV| 亚洲αv一区二区三区| 大香蕉日亚洲日本亚大| 亚洲欧美精品一区天堂久久| 91人妻Pr| 国产成人亚洲精品无码古代早漏男| 乱伦图av| 青娱乐91| 午夜精品人妻二区三区| Julia在线播放亚洲久久| 亚洲第一页欧美| 97在线观看免费| 91狠狠色丁香婷婷综合久久| 影音先锋新男人| 南澳成人一级片在线播放| 国产人伦精品一区二区三区| 色色色99| 上海一级黄片| 2017大香蕉| 九九九精品色乱九九九| 亚洲免费精品一区| 大伊香蕉在线视频免费| 操逼大黄片| 欧美成人精品欧美一级乱黄一区二…| 国产欧美后入| 2025亚洲男人天堂| 999在线电影香蕉| 久久久久久精品免费看A级| 色亚洲欧美| 亚洲第91页 | 91蜜臀熟女| 国产极品一区二区三区三州| 免费1级a做爰片观看| 综合熟妇一区二区三区| 91 国产丝袜在线播放-百度| 色九九九九| 丝袜狠狠草尤物人妻av91| 久热超碰| 亚洲国产成人精品久久久国产成人一区二区三.| 熟妇视频一区二区三区在线| 欧美少妇高潮视频| 久久久内射良家| 欧美熟妇操操视频| 丁香五月天婷婷姐| 六月婷激情福利天堂69| 9色在线| 日本高清_区二区三区| 亚洲 小说 欧美 激情 另类| 精品人妻一区二区三区不卡断| 91男人天堂网| 亚洲熟女乱色一区二区三区久久久 | 日韩97视频| daxiangjiao你懂的| 亚洲日韩欧美一区二区| 亚洲伊人青青草| 日韩人妻精品| 欧美色图校园春色| 欧美日韩国内不卡| 99精品久久久久久久婷婷| 园内精品自拍视频在线播放| 日本理论在线| 精品一区二区成人动漫| 啪啪啪综合网| 91在线|亚| 性色avv| 99啪啪视频| 欧美黑人与女人91~| 久久、1234| #NAME?| 欧美天堂亚洲电影院一区在线播放 | 亚洲资源吧| 四虎影视国产精品| 懂色Av一区二区三区| 麻豆成人影音在线| 国产日韩精品suv| 青春草莓视频在线观看网址| 酒色综合网| 国产精品片| 亚洲春色欧美激情自拍| 操逼1区| 国产强奸91| 青草草免费网站av| 操屄不卡视频| 日本丝袜美腿人妻九九| 俞拍自拍| 久久久久久久人妻丝袜| 日本三级一区二区 在线| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 久久久久9久久久久| 熟女一区二区| 熟女精品一区二区在线观看| 欧美一级二级三级| 日韩极品无码B| 强奸乱伦大香蕉网| 97久久精品亚洲| 91成人在线| 一本大道久| 亚洲色狠| 男女性感激情网站| 天天摸,夜夜摸| 欧美午夜色妇色鬼| 99草精| 国产中出内射一区二区| 牛牛操视频逼| 免费夜夜爱黄色视频毛片| 很黄很污的免费网站| 免费国产| 日本人妻中文字幕精品| 丁香五月性| 99久久综合| 超碰97欧美日韩| 日夜伊人网| 国产中文字幕曰本毛片| 日韩AV一区二区三区三州三州| 色悠久久久av| 综合国产影视三级| 麻豆精品久久久久久久| 老鸭窝黄色视频网站| 国产精品农村妇女| 国产97视频免费观看| 91久精品| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 天天综合91入口| 一级AV性爱| 亚洲激情综合| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 手机av亚洲丝袜美腿日韩第一页二页| 亚欧高清| 欧美一二三区四五区| 欧美性高潮| 色色毛片| 97 亚洲 日韩 欧美 在线| 97久操| 亚洲午夜福利在线影院| 欧美综合网1| 日本十八禁免费看污网站| 夜夜爽77777| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 天天综合网久久ww| 南澳成人一级片在线播放| 小视频玖玖| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 久久国产精品一区二区| 色婷网| 欧美亚洲韩国视频十五区| 欧美日韩国产黄色片| 欧美狠狠弄| 色欲Av人妻精品一区二| 97色97好| 国产精品一区二区校花| 熟女网站最新| 国产美女高潮叫床视频| 夜夜久久久| av在线资源| 十八禁一区二区无码观看| 欧美日日操| 精品性爱久久视频| 东北丰满熟女国产一区| 国产精品久久久久久久免牛肉蒲团| 国产不良强奸视频免费看| 天天综合在线4| 爱爱啊啊啊| 亚洲精品国产AV天美传媒| 欧美片第一页| 殴美日韩m| 欧美福利视频啊啊啊啊| 亚洲人妖网| 日本性爱不卡视频| 婷婷激情丁香| 久久超碰爱| 亚洲国产美女久久久久| 999岛国大片| 国产精品不卡少妇白| 野狼激情网| 级做a爱无码性色永久免费| 亚洲视频小说| 亚洲福利中文字幕在线| 天天操熟妇| 亚洲少妇色| 欧美日韩啪啪电影| 久久久久人| 五月婷婷五月天| 日韩免费中文字幕视频| 9997se| 殴美性色a级欧美| 在线视频 亚洲精品| 97国产天堂岛| 色色五月天婷婷| 激情熟女12P| 大香蕉日韩欧美| 国产精品老熟女一区二区| 13小男生GAY自慰脱裤子| 亚洲成人一二三区| 韩国一级婬片A片AAAAA| 国产精品懂色tv影视免费观看| 欧美亚洲美少妇一区二区| 男人的天堂在线| 操逼网站地址| 精品九九国产无码| 久久久久久999| 91九九九小逼| 秋霞一级视频在线观看免费| 懂色Av| 久久亚州大香蕉| 二对二中文字幕。| 欧美色五月| 久操网视频| 老熟女网站| 玖玖爱伊人玖玖爱| 亚洲人成网www| 大香蕉专区| 国产资源中文字幕在线| 日韩性色| 超碰视97中文| 99热这里只有精| 色噜噜人妻丝袜a∨先锋影 | 自怕偷自怕亚洲精品| 亚洲欧美洲综合| 国产视频大全| 久久偷拍人| 色噜噜综合在线| 欧美东京热精品A∨| 99亚洲精品| 欧美激情专区| 97久久超碰国产精品| 日韩丝袜高跟制服在线观看| 亚洲AV乱码专区国产噜噜亚洲| 欧美很很操视频| 好吊色青靑草| 色97欧美| 偷拍亚洲视频一区二区三区四区| 天天操美美| 亚洲91亚洲| 黑丝少妇麻豆| 99热免费| 99热97| 天天综合日韩网| 午夜一区| 亚洲精品无码久久AV| 69视频入口| 欧美91精品国产自产| 九九九九九精品视频| 人人操人人精品影片| 黄色高清久久无码依人| 久久人人爽爽爽人久久久| 屌逼麻豆| 国产高清免费不卡av| 日本欧美韩国国产在线| 中国操逼无码| 国产日韩区| 一区二区三区高清天码| 自拍视频一区在线观看| 久草网站免费在线观看| 首页中文字幕中文字幕免费| 久久美女福利是上海美女| 岛园激情| 免费视频无码| 天天拍天天操| 97蜜桃综合| 暖暖精品二区三区观看| 国精综合一二三区影视| 日日黄色三级网站| 综合色久欲| 亚洲春色欧美| 在线视频97| 国产精品麻豆成人av| 九九九精品成人免费视频小说| 蜜臀一区二区三区在线 | 少妇99成人麻豆| 天美传媒婬乱在| 亚洲牲交| 国产亚洲中文不卡二区| 极品极品色影院| 久久夜黄色无码A级大片| 免费av大片| 亚洲男人天堂2019| 玖玖蜜臀资源网| 亚洲熟女乱综合一区二区三区| 人人搡人人肉久久精品| 91蜜臀人妻中文字幕在线| 综合欧美亚洲| 中文字幕亚洲热播人妻| 欧美色图天堂在线| 蜜臀久久在线视频| 国语精品av| 东京热毛片调教| a级免费在线观看| AV不卡在线| 婷婷五月天网| 免费看污网站| 噜噜噜亚洲精| 欧美一区二区福利在线| 国产农村一一级特黄毛片| 青娱乐 成人娱乐在线| 91色色综合| 久久久久久久精| 最新亚洲人成网站在线影院| 超碰成人免费| 96免费视频在线| 凌辱美少妇久久aV| 99久久久er直播网址| 亚洲日本韩国在线| 日韩丝袜高跟制服在线观看| 无码人妻1727| 精品久久久亚洲AV成人网站| 91天堂视频| 色淫网站优优视频| 久久精品国产亚洲AV嘿嘿| 久妇网| 久热网| 乱伦a片视频| 久热色情精品| 欧美日韩亚洲天堂| 日韩欧美大力操| 欧美亚洲综合色| 久热久一区二区三区| 欧美日韩亚洲少妇寂寞影院正在播放| 日本孕妇一区二区视频操逼免费看 | 色婷婷丁香五月| 玖玖超碰熟| 亚洲熟女性高潮久久久| 爽爽爽免费视频| 少妇久久久| 人妻天天操天天爽视频免费| 91美| 五月婷婷六月天| 中文字幕av一区二区三区人妻少妇| 性影在线视频| 中文字幕精品乱码| 国产福利在线视频网站| 日韩精品三级片长长久久| 久久婷婷一区| 一级免费啪啪片| 香蕉免费一区二区三区不读| 亚洲精品无码久久AV| 国精综合一二三区影视| 久久国产乱子伦精品免费女人| 97激情97激情| 97在线观看播放视频| 午夜精品久久久久久久99热影院 | 五月天春色激情网| 99这里只有精品国产| 嗯嗯啊啊操死我| 欧美探花网| 一区二区三区无卡视频在线观看| 久久天天艹| 免费网站观看www在线观| 天天干天天舔| 高潮综合网| av凤凰久久久| 欧美性夜| 久久一区,青青青青草视频在线播放| 视频国产成人精品日本亚洲18| 欧美狠狠操| 91丨豆花丨熟女| 午夜福利一区二区三区四区五区色婷婷| 性开放中文AV高清无码免费看| 亚洲图片视频小说| 亚洲天堂区| 黄色片A级一区二区三区| 人妻人人澡人人爽人人| 人看人人摸人人操| 人妻精品一区二区| 精品97精品97| aaaa黄片| 久久精品国产亚洲AV清纯| 97露脸精品丝袜| 国产精品久久久久久久久AV大片| 亚洲欧美清纯| 91日产欧美| 国模精品一区二区三区苹果色戒| 国产激情视频一区区三区| 欧美色图成人网一区二区| 日本三级韩三级99久久| 免费a v| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 国产黑白丝在线| 日韩精品99999| 久久亚洲AV无码专区首页| 国内外毛片在线观看| 男人天堂站| 欧美,日韩综合久久| 91五十路| 九九九九97| 97二区四区| 色婷婷九月天天综合| 91这里只有精品| 老女人老91妇女老热女| 91丨九色丨大屁股| 不卡av在线中文字幕| 日本不卡一区二区三区| 九九热九九热| 久久久精品91八戒| 美女啊啊啊啊啊| 欧美日韩大陆黑人少妇99| 97干在线视频| 福利视频香蕉免费一区二区在线| 超碰在线日韩一区| 天天看综合网| 丁香五月AV| 无码高清少妇久久| 亚洲无码视频免费在线观看网址!| 欧美A√综合网| 91精品成人www| 夜夜影视四色| 青娱乐亚洲自拍| 好爽视频在线观看| 亚洲中文字幕一区| 天天综合网1| www.久久99| 一级久久久久久久久久久 | 久久99精品国产| 99综合自拍| 99超碰色| 97精品国产97久久久久久免费| 日韩欧美中文| 亚洲成a人在线观看久| 天天日夜干| 亚洲男人天堂2017| 加勒比少妇AV婷婷六月天超碰超碰| 上床不卡网站| 婷婷五月综合激情| 人妻熟女字幕一区二区| 日本黄 R色 成 人网站| 天天干天天狼在线视频| 国产AV高清AV无码| 亚洲日韩成人性爱视频| 欧亚在线视频| 亚洲 欧美日韩 另类| 欧美东京热精品A∨| 免费a v| 天天澡天天爽日日AV| 欧美天天性| 亚洲乱妇p22| 神马九九| 国产精品久久aV| 精品人妻1区| 99e久久国产精品| 手机在线中文字幕国产| 天天弄天天操| 8050无码八戒| 久久五月视频| 有码免费观看| 91色综合激情| 超碰午夜| 亚洲色图 91| 综合夜夜| 欧州一区二区三区四区| 免费αⅴ在线观看| 亚洲啪啪视频一区二区| 婷婷丁香熟妇综合网| 久久综合激情| 亚洲一二三精品久久网| 黄页大片在线观看| 欧美日韩婷婷中文| 天美久久久久| 亚洲色图91| 国产最新小视频在线播放下载 | 亚洲动态色图| 国产无码三级视频在线观看| 日韩亚洲中文字幕在线| 国产91久久九九免费精品无码| 天天摸,夜夜摸| 熟妇人妻一区二区三区| 久久久成人精品| 综合五月天| WWW啪啪的com| 亚洲夜夜欢无码一区二区| 久久国产99精品72福利| 夜夜高潮夜夜爽高清视频一| 天天搞欧美| 熟女熟妇一区二区三四区| 九九九九精品九九九九| 亚洲暴力强奸AV| 婷婷午夜| 国产日韩欧美| 亚洲熟妇A V黑人| 强奸抽插av| 深夜激情无码| 亚洲……91| 国产精品夜夜夜| 水多多映视AV| 啪啪啪综合网| 亚洲日韩XXX| 日韩9区| 国产真实野战在线视频| 人妻加勒比东京热| 中文字幕精品三级久久久| 99无码| 免费毛片在线播放| 亚洲色图加勒比| 久久久久国色αv免费观看| 一级人妻性爱视频| 欧美国产日韩清纯唯美| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 精品人妻少妇| 精品亚洲国产成人精品| 99999精品成人| 青青操在线视频| 五月天婷精品激情| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | sss视频华人在线| 国产97在线播放| 日韩亚洲中文字幕在线| 九久9热| 亚洲 欧美 色图| 日逼国产| 欧洲亚洲综合| 久久成人国产| 欧美日韩性爱视屏免费看了| 婷婷另类小说| 俞拍久久国应视频| 亚洲欧洲精品视频发布| 久久久久久亚洲精品中文字幕人妻| 国产AV人人夜夜澡人人爽麻豆| 国产天天噜一噜久久久| 欧美一区二区一级岛国大片| 六六久久日韩不卡| 亚洲精品熟妇1区2区3区。| 国产女同在线观看视频| 色色婷婷丁香| 欧美一二级| 中国一级特黄大片护士| 日本三级日本三级三级人妇四虎| 欧美图片校园春色| 日本色色色视频| 日韩人妻精品中文字幕| 少妇熟女1区2区3区| 男人的天堂2010| 青操影院| 美女午夜福利免费视频| 蜜桃视频一区二区三区在线观看| 精品人妻一区二区三区在| 久久久久久国产精品| 亚洲欧美性生活| yaouchengrenav| 亚州操操穴网| 亚洲av青草久久一区二区| 日韩精品一区二区三区四虎影视| 欧美黑人与女人91| 精品人妻中文字幕4399| 国产亚洲色婷婷99精品91| 人妻色偷色噜| 超碰人妻久久人妻中文97| 午夜小电影在线插入淫高潮| 91九久| 大二网站亚洲| 色老汉玖玖爱| 91肉片| 久久色一区| 东京热视频网| 久男人久久| 91一起操| 天天综合-91入口| 美国美女AV在线| 日韩三级在线观看网站| 91国产精品熟女| 国产无码久久高清| 18精品一区| 日本三级一区二区 在线| 国产日韩欧美| 国产亚洲色婷婷久久99精品91葵花宝典| 手机av亚洲丝袜美腿日韩第一页二页| 欧美大香蕉专区网| 亚洲成人在线乱码色午夜| 丰满人妻一区二区三区| 亚洲欧美激情小说| 婷婷尹人大香蕉免费| 91精品人| 午夜精品久久久久久久男人的天堂 | 免费一级性爱久久| 色婷婷婷五月天激情四射| 黄色片,com| 国产美女自拍视频| 久久精品视频28| 久久精品中文字幕无码l| 国产白丝网站| 五月天开心网| 日本一区视频在线观看| 色综合 加勒比| 天天看综合网| 亚洲一区二区三区播放在线| 天美一二三在线观看Av| 日本一区二区成人在线| 好爽视频在线观看视频| 大香网伊人久久综合网eew| 天天做日日做天天欢。| 97人人色| 91网18| 精品在线观看视频在线| 色噜噜狠狠色综无码久久合欧美| 欧美精品偷拍| 国产懂色精品国产av| 色欲天天综合久久久无码网中文| 干B| 超碰人人妻| 国产Aα| 伊人国产AV| 成人老鸭窝人人在线视频| 性色av蜜臀av色欲aV| 无码天堂| 男人天堂免费| 日韩国产十八禁| 99久久久久| 亚洲精品乱码线路中文字幕| 久久嫩草| 日韩久草| 超碰97久久国| 一道本东京热加勒比一区二区三区 | 久草综合京东| 亚洲图片激情综合另类| 日本大香蕉综合网| 九九九九97| 少妇同性| 2020视频1区2区3区| 人人摸.人人色| 老熟女91| 国产精品午夜精品| 男生女生啊啊啊啊| 国产原创精品| 九九热最新| 第四色奇米影视777| 超碰美国| 91综合天天| 97草草| 青青草色情网站视频| 国产人妻精品久久久一区二区三区| 一级做a爰片性色毛片久久| 大鸡巴久久| 色九九九九九九| 99后入| 91九九九馒头| 久7色| 日本一级一级一级一级| 曰韩精品视频一区二区| 日韩精品在线放| 久久久精品91八戒| V A在线| 男人的天堂 在线一区| 男人的天堂久久久| 亚洲色天| 人妻少妇久久中文字幕一区二区 麻豆 | 亚洲色系另类精品国产| 国产91福利小视频在线观看| 大香久久| 国产精品久久久久婷婷二区次| 色婷婷日韩精品一区二区三区| 日韩黄色小说| 国语精品对白| 亚洲欲色| 97干97色| 日本操逼视频免费| 免费人成毛片乱码| 乱伦一二三| 91国产丝袜足交精品视频| 丁香五月成人| 丁香婷婷久久| 久九干| 天美一二三在线观看Av| 亚洲自拍欧美国产首页网曝| 日韩精品第3页| 日韩无码AB| 亚洲天堂电影网| 久久一二三四五六七八九区| 久久9免费视频| 日日操夜夜操天天操免费观看麻豆| 97天天| 麻豆国产97在线| 日本黄大片在线观看视频| 久久超碰网| 欧美区亚洲区偷拍区| 三级AV入口| 亚洲乱码国产乱码精网站| 人妻丝袜美腿中文字幕| 99re国产精品视频| 两性综合网| 色婷婷五月天| 婷婷激情五月| 顶级少妇BT天堂| 亚洲视频二区 | 九九碰九九爱97超| 91AV入口| 久久久久久久久成人av解说| 99日韩| 9久久9综合| 91久久堂| 亚洲一区二区中文字幕| 日韩有码 一区二区三区| 婷婷五月综合在线| 99久久网站| 精品一区二区三区最新| 亚洲成人妻日韩在线| 欧美天天综合网版| 日韩欧洲操屄视频| 玖玖玖玖精品国产剧情| 女人被添高潮免费视频| 久插综合| 日韩电影中文字幕| 香蕉欧美| 日韩av在线播放不卡| 超硑97精品| chaopen97久久| av网站免费看| 久久大黄片| 免费看久久久性性| 99热99re超碰精品| 欧美Aⅴ| 九九综合久久| 中文字幕视频一区视频二区| 国产原创精品| 欧美亚洲清纯| 国产一区在线播放| 日本激情免费大片| 欧插网站| 久肏视频字幕| 久久免费99精品久久久久久| 91九色精品熟女内射| 亚洲情色五月天 | 欧美日韩亚洲一区二区在线观看| 99综合免费视频| 欧美日韩青操| 91青青在线| 国产精品一区二区 尿失禁| 精品久久久久瑟瑟| 日本 情色 1区| 天天操夜夜嗨| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 日韩综合97p| 操逼操逼视频操逼| 激情文学 国产一二三aV| 97超碰中文在线| 96久久精品一二三区色欲| 成人网欧美风情| 午夜后入| 91av一区二区在线观看| 精品国产乱码久久久久久影片| 亚洲乱熟女一区二区| 久久狠狠色噜噜狠狠狠狠97| 麻豆60秒| 久久精品国产亚洲av水密被窝| 无码人妻丰满热妇又大又粗| 超碰久久网| 欧 美 自 拍 偷 拍| 草b在线| 97欧美资源| 另类天堂| 9精品久久久久| 强奸a片网| 蜜屁Av| 国产精品自在自拍视频| 国产乱人妻精品入口| 亚洲人体视频在线观看| 青青操在线亚洲视频观看欧美在线 | 中文 人妻 制服| 99热91| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 亚洲大胆人体av| 四虎国产精品永久地址入口| 综合亚洲情色| 国产精品ⅴ无码大片在线看.| 欧美午夜视频| 操逼逼中文字幕| 天天综合网AV91| 97超碰磁| 亚洲淫乱骚妇AV| 中文字幕在线观看永久| surenchaopeng| 成年人黄色小视频网站| 偷拍色图| 国产亚洲日本精品在线| 美女上床网站| 色色色色色色色色色色色色色色综合| 欧亚日韩中文在线| 啊啊啊啊啊啊啊国| 四虎精品永久在线观看| 国产人妻精品久久久一区二区三区| 92久久| 97干色天堂| 在线观看AV片| 极品出轨视频网站| 日韩久久三区| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 欧美99热| 欧美一二级| 久久激情综合| 亚洲色图欧美一区二区不卡| 精品一区二区三区四区女 | 性感女人网页在线观看视频| 黄页av| 91大胆欧美| 狠狠操官网| 加勒比av网| 成人性爱全视频观看| 欧美性爱一区二区三区| 韩国女主播青草福利视频| 狠狠操狠狠操操| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 性综合网| 破处bbq| 亚洲成人av色网| 91色人妻| 亚洲凸凹超碰成人| 97舔舔| 操高情无码| 久久久久久久久一区二区三区| 91国产美女丝袜足交精品视频| 国产版a级片直播在线| 97日韩欧美| 蜜桃AV天堂| a网站免费观看| 蜜乳AV免费观看| 欧美91精彩| 麻豆人妻精品一区二区| 亚洲色图尤物视频| 人人妻人人爽人人精品| 欧美色偷拍| 户外裸露刺激视频第一区| 青草综合| 先锋音影AV| 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | 精品国产乱码久久久久久久久1 | 在线色资源| 色女99一级片在线观看| 久久久久亚洲?V片无码V| 九九综合九九综合| 男人天堂久久精品不卡| 亚洲最大黄网| 最新国产亚洲精品精品国产亚洲综合 | 国产精品97视频| av午夜玫瑰| 另类一区| 黄色片一区二区三区四区五区| 人妻久久| 人妻无码视频一区二区三区久久| 啪啪91| 中文字幕 码精品视频网站| 99久国产精品午夜性色福利| 欧美日韩狠狠爱| 97超色| 国产精品乱人伊人网| 天天操天天舔| 久久这里是精品| 精品人妻中文字幕高清| 老司机午夜福利视频一区二区| 成人贴图日韩欧美| 在线不卡视频| 26uuu国产成人综合| 久久99亚洲精品久久99果| 素人伊尹大香蕉免费下载视频| 国产成人AV麻豆| 91欧美高清| 色婷婷综合网| 激情五月婷| 色九九综合| 男人的天堂午夜av| 一级岛国大片| 男女啪啪啪18禁网站| 色妺妺AⅤ| 色妺妺AⅤ| 久久蜜桃一区二区| 东京男人天堂| 91精品少妇搡搡搡| 熟妇高潮精品一区二区三区下载| 综合网欧| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 欧美综合加勒比在线| 欧美日韩99精品麻豆传媒| 日韩精品区二区三区不卡| 精品国产肉丝袜在线拍国语| 日本性爱不卡视频| 2021久久国产综合精品青草| 福利操逼| 91 丝袜在线播放| 熟妇综合一区二区三区| 中文字幕97| 竹菊一区二区三区AV线| 美女十八禁| 欧美少妇高潮| 老熟妇一区二区三区| 国产久9| 超碰97日韩| 欧美特黄视频网站| 强乱老妇中文字幕| 人妻熟女一区二区三区视频| chaopen97久久| 97欧美综合| 成人国产视频在线观看| 日产操逼| 亚洲国产91精品一区二区久久| 久久成人国产精品| 国产精品久久久吖| 人人摸.人人色| 国产精品嫩草影院免费| 婷婷中文网| 99精品网| 男人下部插入女人下部| juliaann精品熟女一区| 五月天综合网| 手机av亚洲丝袜美腿日韩第一页二页| 99re99在线视频| 超碰97网站| 欧美Aⅴ| 激情久久久| 中文字幕乱碼在线| 久久av网|