日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(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é)構(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 渲染的站點這條邊界后面會反復提到。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__)最后一行能打印出安裝路徑說明導入沒問題。接下來是最小調(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ù)的子目錄名相當于任務(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 對應的.html頁面主體打開后正文應完整不依賴網(wǎng)絡(luò)資源子目錄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 生成本次任務(wù)子目錄日期_slug歸檔場景絕不復用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是一次性的解析當前頁、下載依賴、改寫、結(jié)束不關(guān)心頁面里指向的其他 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, # 大站關(guān)掉多線程隊列順序更可控 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本地起服務(wù)測試對真實站點不要這么干threadedTrue, delay1.0大型靜態(tài)站、內(nèi)網(wǎng)環(huán)境隊列順序亂日志難對賬threadedTrue, delay0不推薦極易觸發(fā)限流抓到大量錯誤頁我自己的習慣是第一次跑永遠用單線程加 1 秒間隔先抓個二三十頁看看產(chǎn)物質(zhì)量和日志確認沒問題再決定要不要提速。提速的方式我傾向于「分批跑」而不是「調(diào)高并發(fā)」——把站點按欄目拆成多個任務(wù)每個任務(wù)用不同的project_name跑完再合并。這樣任何一個批次失敗損失都是局部可重跑的。還有一點容易被忽略delay作用的是請求之間的間隔但整站鏡像里有一部分耗時是資源下載那部分如果不走同一個限速器實際壓力可能比你預期的大。所以跑的時候盯著目標站的響應碼看一旦出現(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é)果可能算錯基準目錄導致資源被下載到了另一個位置而引用路徑指向空處。解決先手工確認基準。打開產(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 標簽正文一個字都沒有。原因目標是單頁應用正文由 JS 在瀏覽器里渲染出來服務(wù)器返回的原始 HTML 本身就是空的。pywebcopy 拿到的是服務(wù)器響應不是渲染后的 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)絡(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)是本地相對引用不會再重復下載也不會撞名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 中文全是亂碼英文正?,F(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 支持傳入編碼相關(guān)的關(guān)鍵字參數(shù)把探測到的值傳進去即可。如果你的版本不認這個參數(shù)退路是先按正確編碼把內(nèi)容寫成臨時 HTML 文件本地起一個 http 服務(wù)讓 pywebcopy 從本地地址抓——本地服務(wù)的響應頭你可以完全控制編碼問題就繞過去了。4.5 整站跑到一半卡住內(nèi)存持續(xù)上漲現(xiàn)象任務(wù)跑到幾百個頁面之后速度明顯變慢進程內(nèi)存一路漲到幾個 G最后要么被系統(tǒng)殺掉要么一直掛在那里不動。原因遞歸隊列沒有做上限控制加上threadedTrue時多個線程同時往隊列里塞 URL去重表膨脹再加上每個頁面的 DOM 對象沒有被及時釋放累積起來就是內(nèi)存雪崩。站點越大、重復入口越多這個問題越明顯。解決三個動作一起做。第一關(guān)掉多線程threadedFalse把并發(fā)壓力換成可預測的順序執(zhí)行。第二把blacklist_urls補齊尤其是帶分頁參數(shù)的?page、帶排序參數(shù)的?sort這些是隊列膨脹的主要來源。第三分批跑按欄目或按字母區(qū)間拆成多個任務(wù)每個任務(wù)用獨立的project_name跑完再合并目錄。批量跑的時候在外面套一層循環(huán)單任務(wù)失敗不影響后續(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任務(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直接把入口域名當白名單省掉手填但如果目標站的資源在獨立 CDN 域上這個默認值會漏抓所以正式場景還是建議加一個--allow-domain參數(shù)手動補。異常捕獲用寬泛的Exception在批處理場景里是對的——你寧可吞掉一條錯誤日志也不愿意因為第 3 個 URL 掛了導致后面 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 章對應條目排查如果缺失是零散的、每次跑的都不一樣多半是網(wǎng)絡(luò)超時導致的下載失敗把delay調(diào)大重跑一遍缺失的部分即可。6. 進階把預渲染和特性補刀接進同一條流水線走到這一步pywebcopy 能覆蓋的場景已經(jīng)比較清楚了靜態(tài)渲染的內(nèi)容站、文檔站、活動頁歸檔幾行代碼就能出可用產(chǎn)物。剩下的短板集中在兩類一類是 JS 渲染一類是 HTML 特性覆蓋不全這兩塊都可以在調(diào)用它之前用幾十行代碼補上。先看一張對比表把不同頁面類型的推薦路徑列清楚省得每次都重新想頁面類型直接 save_webpage預渲染后再抓說明服務(wù)端渲染的內(nèi)容頁可用不必要首選方案成本最低靜態(tài)文檔 / 博客可用不必要注意 CSS 里的字體和 import單頁應用產(chǎn)物為空殼必選先拿到渲染后 DOM 再抓重圖片的電商詳情頁部分可用建議srcset 多分辨率容易漏抓需要登錄的頁面不可用不可用會話態(tài)不在這個工具的射程內(nèi)預渲染那一步在第 4 章已經(jīng)給過代碼這里補一個把兩者串起來的做法先用無頭瀏覽器拿到渲染后的 HTML寫到一個臨時目錄起一個本地靜態(tài)服務(wù)再把本地地址交給 pywebcopy。這樣 pywebcopy 的解析和改寫能力仍然能用上同時它面對的不再是空殼。落地時注意本地服務(wù)的端口要固定別用隨機端口否則日志里的產(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按從小到大排列最后一張分辨率最高離線歸檔場景下清晰度比體積重要。最后說個我自己的習慣每次歸檔任務(wù)開始前先在紙上寫三行——這次要抓什么、抓到什么程度算完成、產(chǎn)物交給誰。這三行寫不出來說明需求還沒想清楚這時候調(diào)參數(shù)都是瞎調(diào)。鏡像網(wǎng)頁這件事工具只占三成剩下七成是想清楚邊界。前面那些踩坑記錄有一半是因為我一開始沒寫這三行。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
天天色播亚洲综合网站| 久久久四区| 久操视频在线观看| 国产福利精品最新在线| 天天操人人操骚逼网站| 国产不良强奸视频免费看| 97香蕉碰碰人妻国产欧美| 1000午夜黄色| 色噜噜精品一区二区三| 国产免费久久精品99re韩国| 夜夜操美女| 青青草日韩无码| 97精品视频在线播放| 黄色成人网久久久久久| 青青草在线成人视频| 99精品无码| 亚洲 小说 欧美 激情 另类| 中文字幕av乱伦| 物尤视频一区二区| 免费的黄片有限公司| 野狼激情网| 蜜臀久久99精品久久久久久婷婷| 加勒比大香蕉视频在线| 激情文学88| 黄页18禁| 97超碰日韩| 婷婷五月综合激情| 羞答答AV中文字| 欧美一区二区观看在线| 日韩精品影视| 97久久超碰| 青青草公开在线免费不卡视频| 色综合网1| 新怡红院| 色爱综合网欧美| 成年人网站在线免费观看| 亚州成人a∨| 超碰成人人人爽人人爽| 97色色,97综合| 亚洲成人黄色在线观看| 亚洲九九爱| 性爱边摸边日免费AV| 久久久精品一区二区| 东亚亚洲无码高清| 美女黄页网站| 色女网日韩| 日韩熟女三十乱伦| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 六月丁香久久| 91亚洲网站| 五月婷婷色色| 欧美日本成人一区二区| 成人综合网 欧美| 欧美日韩电影成人在线| 清纯唯美综合亚洲| 亚洲综合中文字幕有码| 竹菊一区二区三区AV线| 91爽啪| 国产精品ⅴ无码大片在线看.| 走光一区92下载| 玖玖爱免费观看视频| 欧美日韩中文字幕不卡| 试看福利| 奸色色 男人天堂 天天射| 欧美操人视频| 天天天操天天天爱| 无码91| 91在线超高颜值国产| 亚洲永久AV无码精品秋霞| 国产欧美岛国精品一区| 亚洲天堂精品日韩电影| 欧美 亚洲 在线| 午夜精品久久久99| 国产又色又爽又舒服的三级视频| 久久久性| 久9久9久9久9久9久9| 久久秀这里有精品| AV无码久久久精品| 国产日韩无码一区二区三区久久区| 青青欧美| 爱干爱射网啊啊啊| 亚洲AV成人无码一区二区三区在线观看 | 欧美极度丰满熟妇hd| 女生久久网| 99青草| 淫荡熟女乱伦网| 91 丝袜在线播放| 久久啊啊| 老汉网| 成人片在线播放| 欧美不卡五十路| 2003天天干夜夜操| 青青草精玖玖69精品| 欧美疯狂做爰xxxx| 久久久久久久久久久免费精品| 日本高清一本二本免费不卡| 日韩美女高潮喷水视频| 亚洲欧洲小说图片视频 | 97在线免费视频| 色爽——AV| 国产精品经典一卡久久久| 亚洲第一在线视频| 亚洲国产一级精品毛一级精品看免费视频 | 激情久久久| 午夜亚洲WWW湿好大| 94色色电影网| 91女优在线观看 | 精品玖九九久| 91N综合网在线| 啊啊啊好舒服好爽啊啊啊视频| 无码99| 强奸乱伦大香蕉网| 视频国产精品未满十八禁止在线观看| 中国人高清www色视频免费| 亚洲狠狠入| 中文一区在线日| 99免费在线视频| 欧美劲爆视频一区二区| 日韩丰满熟妇| 欧美性爱第一区| 乱伦熟女论坛| 日韩性爱长视频免费| 亚洲情色视频| 国产精品白领在线观看| 亚洲,日韩,欧美,成人播放| 亚洲精品一区二区精华| 欧美大波激情xxxx| 精品日韩人妻视频| 无码操逼视频一下| 免费av高清无码| 久久精品一区二区一8| 成人性交午夜免费片| 亚洲熟妇白浆无码AV| 精品九九九九九九九九九| 欧美性暴力猛交XXXX| 天天爱天天韩国日本牛牛牛牛| 精品一二三区久久AAA片| 99国产精品视频尤物| 最新无码国产| 国产精品久久妻无码网站| 国产午夜在线观看| 福利视频香蕉免费一区二区在线| 亚洲日韩在线a不卡99精品| 97亚洲在线| 94色色电影网| 日本操逼视频不卡直接放| 国产亚洲精品一区二区三区| 蜜乳中文字幕a在线| 性色亚洲| 在线毛片片免费观看| 秋霞网—男女啪啪亚洲免费体验区| 国产日韩精品suv| 日韩免费高清大片在线| 3D污黄视频在线观看| 激情小说成人日本无码一| 久久久久久国产无码精品| 91艹B视频| 无码人妻丰满热妇又大又粗| 色情综合网| 中文字幕高清20页视频| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 免费看污网址| 天天情欲宗合网| 日日骚av| 欧美高清18A片| 激情国产乱伦Av| **一级毛片国产| 亚洲宅男天堂| 国产av热热色| 人妻精品一区二区三区| 欧美成人A√在线一区二区| 中文字幕亚洲永久精品| 久久久av爱| 亚州图片第一页| 欧美性爱一区二区三区| 亚洲一区中文精品| 综合色啪| 国产第二页| 欧美国产婷婷久久| 97精品熟女少妇一区| 色综合久久久久| 亚洲最大的黄色电影网站。| 情色五月天网| 好吊色综合| 不卡av在线中文字幕| 人人操av| 屁股久久久久久久久| 欧美 亚洲| 精品国产三级av韩国在线| 欧美视频一区二区在线| 亚洲色图综合| 欧美色图偷拍另类| 欧美淫乱视频| 欧美成人一区二区三区在线播放 | 中文字幕视频二区| 婷婷AV一区二区三区| 中文字幕久久精品一区| 欧美日日操| 四虎国产成人精品免费一女五男| 亚洲国产精品久久AV| 国产精品青青草| 亚洲图片另类| 97视频7| 国产亚洲女v在线观看| 欧中日成人免费影视| 欧美在线天堂| 91红杏| 中文字幕乱在线伦视频中文字幕乱码在线 | 国产粉嫩出水在线播放| 天综合网欧美| 日本肉体xxxx裸交| 欧美91精品国产自产| 国产一区二区三区中文字幕| 男女一进一出视频久久| 白丝AV网站| 国产欧美日本亚洲精品| 久久久工口| 97在线精品观看视频| 天天综合欧美黑人| 四虎AV无码| 尹人免费观看视频在线| 色阁阁AV综合网| 色噜噜综合在线| 99这里只有精品国产| 91插B网站| 亚洲色性情三级| 丝袜剧情| 永久免费av无码网站国产app| 91欧美丝袜| 18一区二区三区| 美国一区二区免费视频| 精品无码久久久久久久杏吧| 亚洲黄色电影| 亚州欧美在线| 玖玖大干人妻| 97视频新免费| 性色av一区二区| 欧美日韩情色一区二区| 欧美色五月| 亚洲第一狼人丝袜美女另类| 手机在线免费看的av| 国产精品不卡少妇白| 97资源免费视频| 91粉芽高清在线一区二区| 日韩高清黄片| 夜夜操青青草| 97久久国产亚洲精品超碰热| 欧美日韩精品久久久久东北老熟妇| 欧美在线|亚洲| 97K超碰在线| 久久久久久99AV无码免费网站| 久久久96| 天天色播亚洲综合网站| 精品久久久无码| 久久111| 91 国产丝袜在线播放-百度| 女人综合网| 一类av片在线看| 婬女免费一二三区A片| 野狼激情网| 天天躁狠狠躁av| 少妇大屁屁| 欧美性暴力| 久久亚洲欧美中文字幕国语 | 日本超碰在线国产一区| 91爱看| 91青青草| 天堂中文日本在线观看| 久草精品国产蜜臀 | 亞洲久久直播| 嫩草伊人久久精品| 天天干人人看综合| 天天操天天射青青草| 99青草| 久久99九九九九6666免费观看软件| 懂色中文一区二区三区 | 91日韩网站| 日韩丝袜二区| 男女性扦B| 亚洲 日韩 丝袜 熟女 变态| 开心婷婷五月| 欧美v日韩v亚洲v最新在线| 99热婷婷| 九九久久玖玖| 美女在线H91| 欧美一区二区三区不卡高清视频| 中文字幕日韩综合| 五月亭亭六月丁香| 亚洲色图美腿丝袜| 成人一道本免费视频| 黄色二级片网站| 久久久99免费| 欧美第一页| 艹我哪美一区无码| 大香蕉淫人网| 日韩ab网| 激情五月婷婷| 思思视频免费看网站| 亚洲日韩欧美一区二区| 桃花色涩综合影院| 欧美区亚洲区偷拍区| 久婷婷一区| 色香色欲天天综合网天天来吧| 大香蕉在线视频15| www欧美性爱| 97超碰欧美精品| 熟女少妇视频| 啊啊啊免费视频| 国产真实野战在线视频| 超碰综合色| 强乱老妇中文字幕| 欧美图片色综合| 色综合一区二区三巨| 91av熟女人妻| 亚洲午夜精品久久久中文影院| 午夜性刺激视频免费观看| 亚洲精品一区二区三区在线播放| 久久人人看| 日日骚中文字幕| 婷婷成人五月天| 精品美女久久久久| 97公开久久| 国产精品老熟女一区二区| 免费亚洲黄色视频在线观看| 麻豆天美国美国产AV| 黄色人人| 亚洲美女30b| 粉嫩国产精品久久粉嫩| 91九色丰满高潮| 久久婷婷热| 99无码视频| 97久久超碰国产网站| 四虎在线播放| 色99在线| 强奸乱伦大香蕉| 老熟女搡BBBB搡BBBB视频| 日韩超碰97| 天天综合中文字幕 91| 青草伊人网| 最新三级网址| 92人人操人人| 开心激情站| 久久麻豆一区二区| 国产专区路线| 少妇专区一二三四五| 久久超碰免费的| 国产熟女二区| 97伊人超碰| 久久精品国产亚洲粉嫩| 欧美亚洲中文| 欧美日本国产日韩激情视频| 中文字幕在线高清男人的天堂| 亞洲久久直播| 欧美亚洲激情小说| 国产强奸乱伦欧美| 亚洲天堂AV在线播放| 性爱av在线免费观看| 丁香五月性爱| 久久精品中文| 亚洲色天| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 欧亚性爱在线视频| 国产精品午夜高潮呻吟久久av| 开心五月婷婷激情| 成人久久无码www| 一区| 欧美一区二区男人天堂| 狠狠激情综合狠狠操中文字幕| 97操| 五月天综合网| 91美女高潮| 国产一级137片内射麻豆| 国产AV超爽| 欧美久久毛片基地| 亚洲欧美碰碰| 成年女人18级毛片毛片免费观看| 亚洲永久永久永久永久一级一级一级精品| 日韩三级在线观看mp4| 久久久啊啊啊| 欧美中出1| 亚洲高清男人天堂| 夜夜天天噜狠狠爱2021| 大香蕉十区| 强奸乱伦资源| 国产精品欧美激在线| 欧美AB在线| 婷婷五月天激情小说| 久操视频免费观看| 国产又黄又粗的视频| 特级大荫道BBwBBwBBW| 综合亚州欧美| 九九热免费国产视频婷婷伊人五月 | 1二区9| 夜夜操青青草| 俞拍自拍| 97超碰国产精品| 一级性爱视频免费观看 | 日韩免费在线视频观看| 久久精品成人一区二区三区蜜臀| 国产精品麻豆视频网站| 中出20p| 激情九月婷婷| 亚洲国产一级黄色视频| 日韩电影天堂视频一区二区| 少妇高潮对白在线观看| 天天肏夜夜肏| 色五月第四色| 丁香五月偷拍| 影音先锋视频在线| 日本2020一区二区| 蜜臀久久99精品久久久久免费观| 国产中文大片资源中文字幕 | 91网站18在线| 青青草大香蕉视频| 99re这里只有精品3| 综合久久99| 成人性爱视频在线看| 国产一级高跟丝袜| 一区二区三区视频在线观看免费| 久久精品国产精品一区 | 日本黄色大片一级视频免费麻豆| 五月天久久综合网| 亚洲精品aa久久伊人| 自拍大香蕉乱插| 久久久国产成人一区二区三区在线| 国产高清免费不卡av| 国产网红精品| 色婷婷视频| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 人人妻碰人人免费| 97日视频| 99热在线只有精品| 中文字幕奈奈美被公侵犯| 亚洲av无线观看| av九九| 一区二区偷拍拍视频| 天天综合影院91| 亚洲天天精品| 欧美熟妇成人一区二区| 免費黃色視頻觀看一| 欧美少妇一区二区三区| 国产精品另类一区大香蕉| 日韩射图| 韩日色费| 亚州色交| 欧洲精品欧洲精品| 欧美亚洲首页| 国产九九九九九九九九| 少妇与黑人高潮在线| 亚洲自拍青操视频| 久久性爱精品一区| 久久亚洲不卡| 91美女视频。| 国产成人一级av88| 丝袜天堂| 青青草导航在线视频| 九九九九九精品| 日本视频一区二区三区| 狠狠爱综合网| 国产精选三级在线观看| 有码人妻系列| 有码免费观看| 国产呦精品一区二区三区下载| 国产高清成人免费视频| AV九九| 青青草亚洲一区| 欧美一区二区三区黄色影视| 91午夜无码| 抽插爽| 影音先锋每日最新资源在线观看| 综合色图,成人综合网| 亚洲色阁| 久久久精品日本一道| 色香天天| 亚洲情色五月天| 亚洲色图欧美色图另类图片| 日韩欧美亚洲国产日韩| а√天堂资源官网在线资源| 夜夜操av亚洲一区二区| 国产成人精品必看| 日韩精彩视频| 色婷婷基地| 射综合网| 97亚洲欧美日韩| 搡老人老9丨女老熟人| 亚洲 综合 第一页| 日本在线不卡一二区| 国内毛片四区| 人妻精品4K4K4K4K4| 亚洲无码超碰免费| 9999久久久久| 五月天综合网| 免费啪啪av| 日韩97精| 99re6久热只有精品6在线直播 | 操一操摸一摸| 国产 大胆 对白| 亚洲一区二区三区欧美日韩| 成人性生活高清视频在线播放| 免费看毛片操穴| 被男人吃奶很爽的毛片| 超碰综合97在线| 97超碰jingpin| A 在线网址| 夜夜夜夜久久久久| 一区二区三区无卡视频在线观看| 色婷婷狠狠18禁| 97超碰人人模人人拍人人| 欧美在线视频播放| 久久超碰爱| 国产成人自拍视频视频| 中国91AV| 91看黄片| 亚洲人精品久久久| 九九九影院| 91N欧美| 亚洲一区二区中文字幕| 欧美成人一级麻豆| 快播久久人人aV| 少妇与黑人高潮在线| 亚洲国产日韩欧美熟妇在线| 极品综合| 翔田千里A片一区二区| 国产精品农村妇女精品| 青青草字幕AV| 午夜精品久久久99| 欧美制服另类丝袜| 久久性视频| www.伪伪| 国产美女自拍AV| 亚洲欧美色图片| 人妻 欧美亚洲| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 天天综合网~91| 啊啊啊快操我视频| 成人网欧美风情| 日韩人妻少妇 一区二区三区| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 欧美色66| 后入内射蜜桃臀| 国产精品一区人妻精品阁在线| 人妻熟女av国产网站| 无码外流操逼视频| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 男女性无套 免费九一| 久久精品无码一区二区三区| 怡红院网站在线视频| 操淫穴亚洲五月丁香| 污污污8888| 91骚妇| 殴美日韩m| 九久9热| 九九玖玖精品| 狠狠搞 亚洲91| 色老汉色| 中国小夫妻勾搭露脸淫荡对白| 好看的91视频| 嗯嗯啊好大| 久草草一二三四区久久| 天堂综合| rivers-china.com| 91综合无码| 97超碰超| 日本久久女同性恋视频| 日韩在线地址一| 亚洲日本激情| 欧美东京热精品A∨| 蜜桃无码AV一区二区| 国产超碰人人操| 97人人干人人操| 超碰色大香蕉| 国产精品女aA片爽爽视频| 久久精品国产亚洲AV清纯| 久久精品一区二区一8| 国产在线能看的你懂的| 操逼天美3区| 亚洲日韩美国人妻| 超碰狠狠操| 一牛影视久久久一区二区三区| 国产精品亚洲四五区在线观看| av天天在线| 亚洲欧美91√| 欧美色图色综合| 久久久久久69国产一区二区| 天天精品| 欧美专利1区2区3区4区5区免费| 麻豆福利视频导航| 日韩干B| 天美传媒婬乱在| 大香蕉免费3| 亚洲天堂无码| 99久久无色码| 久久精品男人的天堂| 亚州性9| 一区二区三区黄色片a| 超碰人人色| 九久9热| 日韩欧美蜜桃精品久久中文字幕久久 | av橘色网站| 精品无码久久久久久久杏吧| 中国一区二区亚洲人妻| 欧亚综合一卡二卡中文字幕| 欧美激情久| 91人妻人人澡人人爽人人精品| 黑人美精品 A片| 丁香五月激情综合| AV色五月天| 夜夜骑夜夜操| 久久人人爽人人爽人人片Ⅴ| 天天综合有色网| 国产97色在线 | 亚洲| 99亚洲精品| 美日韩成人| 亚洲熟女乱色一区二区三区久久久| 欧美天天搞| 国产精品久久久久久久黄无码| 热久久91婷婷| 欧美激情综合| 91少妇通奸网站| 操www| 午夜福利精品| 国产乱弄免费在线视频。| 大鸡吧尹人在线| 五月天日日操夜夜操| 岛国黄| 午夜天堂网| 97在线免费观看| 99亚洲天堂| 四虎884| 91精品人妻电影| 天美传媒AV国产在线| 亚洲一区二区三区在线激情| 亚洲色偷偷色噜噜狠狠99网| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 综合色99| 人妻少妇精品无码专区二区密桃| 亚洲色 国产 欧美 日韩| 亚洲 欧美 另类 综合 偷拍| 试看日韩黄片| 中文字幕一区二区三区蜜臀| 日本免费一级AAA大片器| 亚洲中文一区二区三区| 九九精品无码专区免费| 国产福利视频精品视频| 日韩中文字幕视频| 亚洲s在线观看| 99在线精品观看视频中文| 夜夜骑日日| 欧美一区二区观看在线| a人片中文字幕一区二区| 久久精品久久久久久久久| 97九色人妻| 亚洲色图欧美色图另类图片| 久久免费中文字幕在线观看| 日本欧美中文字幕| 男人天堂站| 人人做,人人操,人人摸| 欧洲小说色图视频另类| 久久精品中文字幕无码l| 精品久久九| 另类一区| 东京热男人天堂| 视频在线观看一二三区| 久久精品国产亚洲AV高清演员表| 天堂网 主播 亚洲| 婷婷综合网站| 热99这里有精品综合久久| 久久久久久人妻| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 91偷拍欧美亚洲| 日韩欧美午夜一区二区| 操淫穴亚洲五月丁香 | 视频在线观看青青99国产| 国产AV高清AV无码| 色五月AV| 91天天爱| 午夜天堂精品久久久久91| 国产精品内射婷婷一级二| 使劲用力艹少妇视频一区二区| 探花一区在线| 亚洲天堂精品日韩电影| 欧美色色人| 亚洲 日韩 欧美 国产综合体| 精品人妻视频入口| 中精品一区二区三区| 97WW精品| 黄色大香焦1级‘′‘| 久操免费在线| 精品综合久久久久久97| 久无码| 亚洲少妇综合在线播放| 狠狠爱大香蕉| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 日韩成人午夜精品久久高潮| 手机看片1025| 色综合V| 啪啪自拍九九综合| 亚洲性少妇| 国内精品999| 97国产成人精品免费视频| 欧美gv在线观看| 国产久久天堂资源| 999熟女精品| 人人干黄色| 亚洲精品欧洲色| 美女91色黄18| 熟妇一区二区三区| 日本 欧美 亚中文字幕| 国语对白在线播放视频| 内射夫妻三片| 久久日本熟妇熟色一区| 夜夜嗨TV| 东京热不卡视频| 久久九七| 澳门成人网站久国产日韩| 99久久久久| 色综合av男人天堂| 久久国产免费激情视频| 婷婷伊人五月| 久久久96| 97国产超碰| 九t超碰| 91蜜桃传媒精品久久久一区二区| 强奸熟女一区二区三区| 国产精品色哟哟| 蜜桃中文字日产乱幕4区| 一品道视频一区二区三区| 色9999日韩国产| 少妇滛荡视频| 99操碰| 亚洲精品三| 国产小u女在线观看| 中文字幕亚韩| 午夜精品久久久久久久99蜜桃一| 亚洲中文日韩欧美大香蕉视频| 97在线观看播放视频| 色综合V| 在线岛国新天堂8| 免费?级毛片无码?∨蜜芽试看| 69av一区二区三区| 色在线综合| 国产操伦| 亚洲 在线| 国产13区| 视频二区美腿丝袜制服人妻欧美| 三级网色| 一级久久久久久久久久久| 久碰视频| 日本高清视频xxxx| 欧美在线l亚洲| 97 九色| 久久人妻一区二区三区高清| 欧美亚洲涩涩| 丰满欧美放荡少妇在线| 国内外色色色色色成人视频| 高清不卡 中文 人妻| 国产久久久久影院老熟女| 日韩欧美天天爽爽爽天天爽爽| 人妻五十路在线| 91美女高潮| 亚洲综合在线91| 国产精品视频在线观看| 国产精品电影大全| 影音先锋乱伦资源| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 日韩精品人妻中文字有码在线| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 两性色网| 日本久久网| 国产有码一区| 91精品久久久久久久久久| 全国男人天堂网| 亚洲97综| 黄片com.| 天天欧美色| 高清肉丝中文无码| 中国和日本人色哪个不下载能放| 97爱爱爱| 岛国视频免费在线观看| 婷婷在线视频| 精品九九九九九九九九九| 亚洲无码一区成人免费午夜| 黄色免费网| 92午夜免费福利视频| 混色激情av| 欧洲亚洲人人爽爽视频| 熟女人妻精品一区二区视频 | 色诱中文字幕| 久久黄黄黄| wwwxxx日本爽| 国产原创自拍| 超碰视97中文| 亚洲 欧美 日韩 国产一区二区| 韩国成人精品久久久免费看| 超碰97起碰| 亚洲精品黑丝| 无码人妻一区二区三区色欲aⅴ| 久操不卡视频| 日日做夜狠狠爱欧美黑人| 大香蕉综合网| 自拍偷拍2025在线观看| 五十路熟女工口 | 国产在线播放成人免费| www…国产操逼| 天天摸夜夜操视频| 立川理惠被中出无码| 色婷婷综合网| 综合色久欲| 欧美αv.com| 67194无码不卡| AV中亚| 国产精品久久伊人| 精品美女少妇一区二区三区| 亚洲成人激情小说视频| 狠狠操狠狠| asc国产精品| A V视频日本| 国产精品视频播放| 无码不卡八戒| 啊嗯好大视频在线观看| 999综合网| 九99久久| 国产 日韩 欧美高清 | 国产久久免费精品视频| 99久久com免费视频′| 9久热这里只有精品| 成视频在线观看免费看| 舔舔啊| 蜜乳性色无码专日粉嫩骚逼AV| 麻豆激情综合| 日韩在线性爱免费视频| 欧洲精品人妻| 亚洲欧美在线观看免费| 精品无码久久久久| 亚洲欧美在线观看免费| 精品九九九九九九九九九| 亭亭丁香激情| 大香蕉淫人| 成人av福利在线观看| 男人的天堂2018.| 天天干人人看综合| 欧美天堂日韩三级国产传媒| 综合久久久久久久久91| 69综合网| 久久9精品视频| 94色色电影网| 男人天堂一区二区| 搡老女人老91妇女老熟女| 天天淫人人妻日日色| 青春草莓视频在线观看网址| 亚熟在线| 午夜AV人气不卡| 免费超碰97久久| 蜜乳av首页| 久久婷婷成人综合色怡春院| 91精品成人www| 亚洲人妻中文在线视频| 青青伊人久久| 国产情侣自拍在线播放| 亚州性色| 亚洲色9| 午夜寂寞欧美| 超碰97 线线 在现| 四虎视频在线观看| 国产女生在线| 97亚洲精品超碰| 狠肏骚人妻| 一区三区啪啪| 一区二区三区国产在线播放 | 曰本道人妻久久久在线不卡色视频| 欧美刺激色黄片免费看| 97爱爱爱| 综合网97| 久热伊人99re| 白丝1区2区3区| 啊啊啊啊啊啊啊在线| 日本不卡免费二区| 激情网色| 欧美性性性| 欧美精品双插| 五月婷婷丁香| 性爱视频无打码在线观看| 亚州,欧美在线| 九九热免费在线国产视频伊人五月| 中文字幕日韩人妻视频一区二区三区 | 无码操逼视频一下| 欧美亚洲在线| 久久綜合很很很| 狠狠色色| 成人亚欧免费视频| 欧美夜夜草视频| 欧美在线亚洲| 美女黄码视频午夜| 麻豆AV一区二区| 99ri精品| 青娱乐亚洲自拍| 亚洲97| 97色欧洲| 色香在线| 精精夜夜| 亚洲综合激情五月久久| 老司机深夜影院18未满| 青娱乐999| 日逼97| 久久久草草精品| 人人妻人人色| 91女网站| 9九九九九视频在线观看| 熟女精品va中文字幕| 日韩精品在线放| 久久精品一区二区| 中国91AV| 亚洲天堂一二| 国产欧美日产一区二区三区 - 国产欧美日 | 91国产精品在线看| 亚洲精品成人激情在线| 97网色| 五月婷婷hd| 在线播放成人高清免费视频| 国内一级精品| 五月天精品| 伊人在线大香蕉视频久久| 欧美日动态视频| 操逼精品视频| 69人妻精品丰满熟女区| 宅男91视频在线播放| 亚洲色图激情小说| 不卡六六在线91| 中文有码第五页| 任你爽视频| 欧美亚洲综合高清在线| 99热这里都是精品| 久久精品国产亚洲粉嫩| 国内精品99999| 中文字幕第7页| 亚洲第二页| 黄色工厂这里只有精品| 97久久久网站| 国产馆| 少妇高潮一区二区三区在线| 中文字幕精品三级久久久| 久久精品视| 夜夜青青无码影院| 伊人在线大香蕉视频久久| a人欧美综合天堂麻豆| 日韩钢筋无码高清啾啾啾| 中文在线久久字幕| 久久综合久色欧美综合狠狠| 少好三P| 夜夜夜爽www精品视频| 加勒比综合88| 午夜性生活av免费在线看| 国产在线观看一区二区三区| 在线观看一级α片刺激高潮视频| 看免费的黄片| 大香网站| 九九Av| 男人的天堂在线2| 欧美日韩精品国产91| 91欧美丝袜| 91性网| AA级电影三区| 欧美三级中文字幕hd| 91九色精品熟女内射| 91色艳| 老鸭窝黄色视频网站| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 欧美激情性久久久久久| 熟妇的味道HD中文字幕| 日本三级R| 欧美在线官网| 粉嫩久久久久| 天天爱天天操| 热久久国产| 五月天久久久| 免费操逼91| 亚洲一曲日韩精品| 五月婷婷丁香| 天天操人人操骚逼网站| 97国产精品一区| 日韩精品在线视频在线观看| 爱我干综合| 亚洲限制级| 欧美不在线| 一级aaaaa欧美中文字幕录像片| 97爱亚洲| 91人妻素女| 亚洲第一无码播放立川理惠| 色色五月天婷婷| 久久偷偷色综合蜜桃| 日本久久女同性恋视频| 国产九九九九九九九九| 美女主播色欲91抠b在线播放| 97亚洲在线| 亚洲黄色影视| 久久久久久久国产a∨| 一级特黄aaa大片在线观看成人一级片在线观看| 日本一区二区成人在线| 青青草吊丝| 91亚洲欧美激情| 欧美熟女操屄| 精品97精品97| 久久超碰97| 亚洲色欲天天人妻无码系列专区| 国产乱弄免费在线视频。 | 新亚洲无码| 久久香蕉影院| 超碰免费欧美7| 强奸抽插av| 欧美图片偷拍| 啊啊啊骚| 久久久久国产精品片区无码直播| 成人综合网 欧美| 白丝av| 国产精品交换一区二区| 啊啊啊轻点在线观看| 日韩国产不卡在线视频| 午夜欧美J进J出白浆流出久久久 | 9色国产精品一区粉嫩| 内射老妇BBWX0C0CK| 97WW精品| 日韩欧美女求操每天更新| 五月天黄色激情视频| 97在线观视频免费观看| 欧美性爱日韩高清| 亚洲熟妇丝袜在线观看| 婷婷涩嫩草鲁丝久久午夜精品| 五月天激情四射| 国产精品另类一区大香蕉| 91三级理论片播放器| 国产欧美成人精品| 国产91啪| 日本中文字幕一区| 国产不卡免费在线视频| 亚洲熟久久| 国产精品麻豆视频网站| 秋霞鲁丝午夜无码一区二区三| 吖在线不卡一区二区国产剧情| 综合久欧洲| 成人无遮挡毛片免费看| 绑缚麻绳人妻寝取完整版| 日本色色视频网站| 欧美亚洲日韩16色| 青青久久手机线视频| 日韩亚洲97| 色综合色欲色综合色综合色综合| 97人人夜| 校园春色 男人天堂| 国产综合日韩伦理| 久久久久ab| 加勒比在线视频一区二区三区 | 国产 热久久久久国产精品| 亚洲资源网| 麻豆国产96在线| 又黄又硬又粗又长国产视频| 五月天色图影视| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 熟妇最新先锋一二三区| 摸奶性爱视频网站在线免费播放| 97国产色图| 久久久久久AV无码免费网站| 天天操妹子| 亚洲色欲一区二区三区| 亚洲国产一区二区入口| 久久久久深夜无码| 日韩精品区二区三区不卡| 精品国产三级av韩国在线| 国产噜噜噜噜噜久久久久久久久| 国产成人在线观看综合| 东京热男人的天堂| 小骚逼被操的爽不爽| 日韩999| 国内精品嫩模A∨私拍小视频| 九9热伊人| 中文字幕高清20页视频| 99老司机精品视频在线观看| 一本道综合色图| 神马久久久久久久久久| 色噜噜人妻丝袜a∨先锋影| 日本媚薬中文字幕在线| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 中文字幕中文字幕一区二区| 精品一区二区三区18| 狠插 制服 自拍| 亚洲精品久久久久久久蜜桃臀| 97在线视频观看| 校园春色欧美| 午夜情侣自拍网站| 日韩一级片在线看| 懂色中文一区二区三区| 精品人妻少妇| 九九九九精品一区| 在现视频女上位好爽| 国产精品岛国片在线观看| 高清国产精品福利网站| 日韩国产九九精品一区二区三区毛片| 91蜜臀熟女| 久久久久久AⅤ无码免费肉站| 国产操逼网站亚洲一级黄色| 99热99re6国产在线播放| 色女综合| 一区二区三区精品黑丝白丝酒店对鸡| 岛国视频一二三区| 毛片久久| 三四中文字幕| 91色人| 97精品久久久久中文字幕| 91女在线观看| 精品人妻伦一二三区久久| 欧美日韩操逼动图| 人人贴人人摸| 国产强奸乱伦欧美| 伊人久久AV诱惑悠悠| 少妇精品久久久八区九区| 久久久久久久久久黄色网| 麻豆久久视频在线地址| 欧美黄色大香蕉一区二区| 三级激情网站| 一本色道综合久久欧美| 亚洲图片另类| 成年人一级黄色毛片大全在线观看| 久久久久亚洲Av无码专区老牛影视| 亚洲黄色电影| 亚洲清纯综合| 久久噜噜噜精品国产亚洲综合| 97看操| 在线视频五十市| 激情图片亚洲色图| 嗯嗯嗯啊啊啊操的我好爽| 婷婷久草一区二区三区| 久久五月婷| 婷婷五月综合激情| 久久大香蕉| 99精品网| 色色色综合| 亚洲欧美精品一区天堂久久 | 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 欧美91视频| 久久青青草原免费视频| 国产精品麻豆免费视频| 狠狠操官网| 国产专区第一页| 近亲乱伦一区二区| 人人妻人人狠人人| 啪啪自拍九九综合| www.狠狠操| 美女天天干| 日韩免费在线观看不卡| 亚洲成人精品在线一区| 亚州熟女乱伦| 久久伊人亚洲AV无码网站| 无遮挡一级毛片视频免费的| 国产视频一区二区三区在线免费观看| A一区片| 国产精品麻豆视频网站| 精品亚洲国产成人av网站| 午夜国产成人福利视频| 免费一级视频特黄色大片| 99re视频在线观看这里只有精品|