亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

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)與配置等模塊并強(qiáng)調(diào)遵循 robots.txt提供直接 API 與子類擴(kuò)展方式。對鏡像過程中的資源下載、鏈接重寫和配置管理有較清晰的組織適合用來理解站點鏡像流程、搭建離線歸檔腳本或進(jìn)行定制化抓取實踐。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 文件還會再進(jìn)去掃一遍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 章會給出補(bǔ)刀方案。2.2 裝好環(huán)境跑通第一次 save_webpage建議單獨開一個虛擬環(huán)境因為 pywebcopy 會拉進(jìn) 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)用把目標(biāo)地址、產(chǎn)物根目錄、任務(wù)名三個東西給齊就行from pywebcopy import save_webpage # 單頁歸檔抓目標(biāo)頁本身和它引用的 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 映射成目錄層級資源集中落在頁面同級或子級的資源目錄里。第一次跑完建議對照下面這張表逐個確認(rèn)缺哪一類就說明哪一層的解析漏了。路徑 / 文件內(nèi)容驗收要點project_folder/project_name/任務(wù)根目錄每次調(diào)用生成一個命名要可回溯與 URL path 對應(yīng)的.html頁面主體打開后正文應(yīng)完整不依賴網(wǎng)絡(luò)資源子目錄css / js / 字體 / 圖片目錄名隨版本略有差異以實際產(chǎn)物為準(zhǔn)HTML 內(nèi)的引用屬性已改寫成相對路徑用編輯器搜索https://應(yīng)基本清空原始 HTML 備份部分版本改寫前的副本有的話留著出問題能對比驗收動作可以很簡單把網(wǎng)線拔了雙擊那個 HTML看三件事——正文在不在、樣式對不對、圖片裂沒裂。三樣都過單頁這條鏈路就算通了。有一樣不過回到 2.1 的三層模型去定位。2.4 三個必須先定下來的參數(shù)單頁場景真正需要調(diào)的參數(shù)不多但下面這幾個一旦定錯后面整站鏡像會放大成災(zāi)難。參數(shù)默認(rèn)值作用我一般怎么定project_folder當(dāng)前目錄產(chǎn)物根目錄掛到獨立數(shù)據(jù)盤別放代碼倉庫里project_name按 URL 生成本次任務(wù)子目錄日期_slug歸檔場景絕不復(fù)用overwriteFalse同名任務(wù)是否覆蓋調(diào)試True正式歸檔Falsedelay0請求間隔秒目標(biāo)站有頻控就調(diào)到 0.51.0threadedFalse是否多線程下載單頁無所謂整站建議關(guān)zip_projectFalse抓完是否打包成 zip需要交付單個文件時開delay這個參數(shù)值得單獨說一句。它控制的是每次請求之間的等待看起來不起眼但在整站鏡像里是決定你會不會被目標(biāo)站限流的關(guān)鍵。很多人第一次跑整站就把delay設(shè)成 0、threaded開成 True結(jié)果前兩百個請求很順第三百個開始全變 429后面抓回來的全是錯誤頁還得清空重來。3. 整站鏡像max_depth 與域名邊界決定你抓到的是站點還是垃圾場單頁跑通之后save_website的誘惑很大——一行調(diào)用抓一整個站。但整站鏡像的本質(zhì)是「從一個入口出發(fā)做廣度優(yōu)先遍歷」你不畫邊界它就會順著分頁、日歷、標(biāo)簽、搜索參數(shù)一路爬下去最后抓回來的東西和你想歸檔的內(nèi)容可能只重合三成。這一章講的就是怎么畫這個邊界。3.1 save_website 和 save_webpage 的差別不在抓多抓少兩者真正的差別在于「有沒有 URL 隊列」。save_webpage是一次性的解析當(dāng)前頁、下載依賴、改寫、結(jié)束不關(guān)心頁面里指向的其他 HTML。save_website維護(hù)一個待抓隊列每抓到一個 HTML 就從中提取站內(nèi)鏈接判斷是否在白名單內(nèi)、是否超過深度、是否命中黑名單通過了才入隊。這個機(jī)制帶來兩個直接后果。第一深度是相對入口頁計算的入口頁算第 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(jìn)黑名單。3.2 用 allowed_domains 和 blacklist_urls 畫一個抓取圍欄下面這份調(diào)用是我在歸檔一個內(nèi)容站時的常用配置注釋寫得比較細(xì)可以直接照著改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)資源域也加進(jìn)去。至于資源抓取是否嚴(yán)格受這個白名單約束不同版本行為有差異所以最終還是要靠產(chǎn)物驗收來判斷別把它當(dāng)成鐵律。blacklist_urls用的是正則匹配匹配對象是完整 URL。寫的時候把/logout、/search?、/calendar/這幾類先排掉能省掉一大半無效請求。帶查詢串的 URL 記得把?也轉(zhuǎn)義進(jìn)去否則只匹配到路徑部分。3.3 delay 和 threaded 的取舍限速比并發(fā)重要整站鏡像最常見的誤區(qū)是把「抓得快」當(dāng)成目標(biāo)。實際上你真正要的是「抓得全且不重來」而重來的成本遠(yuǎn)高于慢一點的成本。配置組合適用場景風(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í)慣是第一次跑永遠(yuǎn)用單線程加 1 秒間隔先抓個二三十頁看看產(chǎn)物質(zhì)量和日志確認(rèn)沒問題再決定要不要提速。提速的方式我傾向于「分批跑」而不是「調(diào)高并發(fā)」——把站點按欄目拆成多個任務(wù)每個任務(wù)用不同的project_name跑完再合并。這樣任何一個批次失敗損失都是局部可重跑的。還有一點容易被忽略delay作用的是請求之間的間隔但整站鏡像里有一部分耗時是資源下載那部分如果不走同一個限速器實際壓力可能比你預(yù)期的大。所以跑的時候盯著目標(biāo)站的響應(yīng)碼看一旦出現(xiàn) 429 或 503 的批量出現(xiàn)立刻停把delay翻倍再繼續(xù)。3.4 robots 與 bypass_robots 的邊界pywebcopy 有一個bypass_robots參數(shù)含義是抓取時是否忽略目標(biāo)站的 robots.txt 限制。這個參數(shù)的默認(rèn)值是False也就是默認(rèn)遵守。我的建議很明確除了你自己擁有或者明確獲得授權(quán)的站點其他場景一律保持默認(rèn)。robots.txt 表達(dá)的是站點運營方對爬蟲的意愿繞過它既可能違反站點條款也會讓你在對方日志里變成明顯的異常流量。歸檔公開內(nèi)容時正確的做法是先看一眼目標(biāo)站的 robots.txt瀏覽器直接訪問/robots.txt就能看確認(rèn)你要抓的路徑不在禁止列表里再按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é)果可能算錯基準(zhǔn)目錄導(dǎo)致資源被下載到了另一個位置而引用路徑指向空處。解決先手工確認(rèn)基準(zhǔn)。打開產(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一遍確認(rèn)。4.2 抓回來一片空白HTML 里只有一個空的掛載點現(xiàn)象產(chǎn)物 HTML 打開是白屏查看源碼只有div idapp/div和幾個 script 標(biāo)簽正文一個字都沒有。原因目標(biāo)是單頁應(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 的抓取層。前者改動小后者可控性強(qiáng)我一般先用前者快速驗證。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保持同一基準(zhǔn)否則改寫出來的相對路徑會偏。4.4 中文全是亂碼英文正常現(xiàn)象抓下來的頁面中文變成???–?這種字符英文和數(shù)字完全正常。原因目標(biāo)站響應(yīng)頭里沒給charset或者給了一個錯誤的默認(rèn)值比如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)容推測兩者不一致時以推測為準(zhǔn) print(declared:, resp.encoding) print(detected:, resp.apparent_encoding)較新版本的 pywebcopy 支持傳入編碼相關(guān)的關(guān)鍵字參數(shù)把探測到的值傳進(jìn)去即可。如果你的版本不認(rèn)這個參數(shù)退路是先按正確編碼把內(nèi)容寫成臨時 HTML 文件本地起一個 http 服務(wù)讓 pywebcopy 從本地地址抓——本地服務(wù)的響應(yīng)頭你可以完全控制編碼問題就繞過去了。4.5 整站跑到一半卡住內(nèi)存持續(xù)上漲現(xiàn)象任務(wù)跑到幾百個頁面之后速度明顯變慢進(jìn)程內(nèi)存一路漲到幾個 G最后要么被系統(tǒng)殺掉要么一直掛在那里不動。原因遞歸隊列沒有做上限控制加上threadedTrue時多個線程同時往隊列里塞 URL去重表膨脹再加上每個頁面的 DOM 對象沒有被及時釋放累積起來就是內(nèi)存雪崩。站點越大、重復(fù)入口越多這個問題越明顯。解決三個動作一起做。第一關(guān)掉多線程threadedFalse把并發(fā)壓力換成可預(yù)測的順序執(zhí)行。第二把blacklist_urls補(bǔ)齊尤其是帶分頁參數(shù)的?page、帶排序參數(shù)的?sort這些是隊列膨脹的主要來源。第三分批跑按欄目或按字母區(qū)間拆成多個任務(wù)每個任務(wù)用獨立的project_name跑完再合并目錄。批量跑的時候在外面套一層循環(huán)單任務(wù)失敗不影響后續(xù)日志里記清楚哪一批失敗了好補(bǔ)跑。注意整站鏡像前先估算體量。用max_depth1試跑一次看單頁平均產(chǎn)物大小和頁面數(shù)乘以預(yù)估總頁數(shù)得出來的數(shù)字如果超過磁盤剩余空間的七成就先拆批次。5. 封裝成能反復(fù)用的鏡像工具批處理、增量與產(chǎn)物校驗單次調(diào)用解決不了「每周歸檔一次」這種需求。真正要長期用得往上包一層命令行入口負(fù)責(zé)批量調(diào)度狀態(tài)庫負(fù)責(zé)跳過沒變的頁面校驗?zāi)_本負(fù)責(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ù)名默認(rèn)按時間戳生成) 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)白名單省掉手填但如果目標(biāo)站的資源在獨立 CDN 域上這個默認(rèn)值會漏抓所以正式場景還是建議加一個--allow-domain參數(shù)手動補(bǔ)。異常捕獲用寬泛的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 的相對引用掃一遍檢查目標(biāo)文件是否存在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三個細(xì)節(jié)決定這個腳本準(zhǔn)不準(zhǔn)。第一過濾協(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. 進(jìn)階把預(yù)渲染和特性補(bǔ)刀接進(jìn)同一條流水線走到這一步pywebcopy 能覆蓋的場景已經(jīng)比較清楚了靜態(tài)渲染的內(nèi)容站、文檔站、活動頁歸檔幾行代碼就能出可用產(chǎn)物。剩下的短板集中在兩類一類是 JS 渲染一類是 HTML 特性覆蓋不全這兩塊都可以在調(diào)用它之前用幾十行代碼補(bǔ)上。先看一張對比表把不同頁面類型的推薦路徑列清楚省得每次都重新想頁面類型直接 save_webpage預(yù)渲染后再抓說明服務(wù)端渲染的內(nèi)容頁可用不必要首選方案成本最低靜態(tài)文檔 / 博客可用不必要注意 CSS 里的字體和 import單頁應(yīng)用產(chǎn)物為空殼必選先拿到渲染后 DOM 再抓重圖片的電商詳情頁部分可用建議srcset 多分辨率容易漏抓需要登錄的頁面不可用不可用會話態(tài)不在這個工具的射程內(nèi)預(yù)渲染那一步在第 4 章已經(jīng)給過代碼這里補(bǔ)一個把兩者串起來的做法先用無頭瀏覽器拿到渲染后的 HTML寫到一個臨時目錄起一個本地靜態(tài)服務(wù)再把本地地址交給 pywebcopy。這樣 pywebcopy 的解析和改寫能力仍然能用上同時它面對的不再是空殼。落地時注意本地服務(wù)的端口要固定別用隨機(jī)端口否則日志里的產(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存在時才改沒有的話補(bǔ)一個。取最后一張是因為大多數(shù)站點的srcset按從小到大排列最后一張分辨率最高離線歸檔場景下清晰度比體積重要。最后說個我自己的習(xí)慣每次歸檔任務(wù)開始前先在紙上寫三行——這次要抓什么、抓到什么程度算完成、產(chǎn)物交給誰。這三行寫不出來說明需求還沒想清楚這時候調(diào)參數(shù)都是瞎調(diào)。鏡像網(wǎng)頁這件事工具只占三成剩下七成是想清楚邊界。前面那些踩坑記錄有一半是因為我一開始沒寫這三行。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
蜜臀无码视频在线观看| 91精品在线播放| 国产女人9999| 在线αⅴ| 亚洲日韩欧美一区二区| 国产成年女黄特黄| 蜜臀久久99精品久久久老,,| 91精品人妻一品二品三品| 精品欧美乱码久| 无码丰满熟妇一区二区浪潮AV| 开心五月深爱五月| 青青草依人大香蕉| 天天做日日爱夜夜爽| 亚洲中文人妻色| 精品丰满熟妇人妻一区| 十八禁成人网站在线观看| 久久99国产综合精品女同| 久久噜噜噜精品国产亚洲综合| 精品性爱| 97干天天| 成年人一级黄色毛片大全在线观看| 欧美亚洲激情小说| 亭亭在线资源| 干婷婷综合网| 天天综合网~91| 91丨九色丨熟女高潮| 日本一级不卡一二区| 一级AV性爱| 116美女午夜| 欧美高清第一页| 亚洲天堂中文字幕无码男同| 玖玖综合网| 大香蕉在线视频15| 国产最火爆久久国产网站网站| 亚洲精品天天影视综合网 | 中文字幕AV片| 秋霞久久亚洲精品成人| 久久久久无码一妻区| 亚洲成人性爱在线观看| 青青久草| 欧美少妇一区二区三区| 日韩操逼HD| 欧美亚洲韩国视频十五区| 国产亚洲日本精品在线| 亚洲操操操无码| 九九热精品| 啊v在线观看视频| 强奸乱伦免费网站| 日本不卡一区二区三区| av九九| 四虎影视欧美| 麻豆福利视频导航| 18禁网站在线播放| 欧美天天射| 91 丝袜在线| 亚洲一卡2卡3卡4卡乱码网站 | 日韩一999精品| 国产无码三级视频在线观看| 亚洲无码一区成人免费午夜| 色999偷自拍拍| 日本精品高清一二区一本到| 久久久久久久伊人精品| 亚洲s色图| 91精品黄在线观看| 亚洲中字幕日本一区二区三区| 中出789在线视频| 天天干夜夜一操| 丰满人妻-区二区三区免费看 | 精品v日韩欧美国产| 久久久久极品| 青青草无码视频| 国产欧美日韩在线不卡第一页| 葡萄牙性视频一二区| 色五月69夫妻| 天天影视网综合少妇| AV一起草在线| 综合网少妇| 欧美第38页| 日本日皮视频逼| 情趣丝袜无码操逼视频| 久久久人妻| 亚洲天堂日本| 超碰97玖玖爱| 91N欧美| 欧美日韩国产高清在线一二三区 | 秋霞一区二区三区四区五区六区七区| a久久| 国产亚洲美日韩Aⅴ中文字幕无码成人| 激情婷婷丁香| 欧美亚洲高清不卡| 久草视频制服诱惑| 欧美|91色综合| 欧美人妻制服| 青草地一本线一区二区三区| 97精品网站| 久久久久久久久久久久久久久乱码| 亚洲欧洲综合视频在线| 99re热有精品视频国产| 亚洲97精品| 制服丝袜第二页| 欧洲免费一区二| 色香蕉影院| 手机在线视频国内精品| 粉嫩av平台| 亚洲牲交| 国产内射爽爽大片| 91综合网站| 超碰69| 久久久久久久久久久久黄色| 天天综合影院91| 六六久久日韩不卡| 五月丁香影视| 色婷婷综合网| 天美传媒国产原创中文字幕亚洲欧美另类| www.色操逼| 国产第25页在线观看| 不卡中文字幕aⅴ在线| 中国AV美女| 翔田千里爆乳巨臀无码| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 上海一级黄片| 久久精品毛片免费不卡| 日日摸夜夜夜夜爽| 黄片www.| www久久99| 99热最新| 日韩一区二区精品视频| 中日无幕一二三四区| 欧美不卡在线美女| 日韩紧密久久| 嗯阿好爽好紧| 久操影视| 青青草国产一区二区三区| 欧美日韩97在线| 午夜操操操| 欧美姓爱综合网| 欧美加勒比| 欧美 亚洲 在线| 精品视频在线观看| 操99| 中文字幕av片| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 97超碰超| 日本在线播放不卡一区| 久久久不能久久久久| 免費人妻夜夜爽天天爽爽一区| 中文字幕制服欧美久久一区| 久久久久久裸体| 淫纸中9区| 97啪啪| 国产91av在线播放| 日韩另类色图| 日本精品一区二区三| 99超碰碰| 被男人吃奶很爽的毛片| www.婷婷六月天| 狠狠躁AV| 亚洲欧美日韩电影网站一区| 偷偷人人精品女女久久| 先锋激情∨在线视频播放| 欧美日韩岛国大片在线观看| 九九热精品在线| 成人精品一区二区三区| 夜夜精品视频| 在线一道啪| 婷婷五月天伊人| 96AV久久久| 人人妻人人爽一区二区三区| www.久久制服糖| 亚洲精品美女久久久久久久久| 蜜乳AV色欲AVAV无码| 亚洲精品蜜桃久久久一区二区三区| 精人妻无码一区二区三区伊人直播 | 99九九久久| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 狠狠综合| 91在线一起| TS人妖另类精品视频系列| 国产Aα| 人妻夜夜爽天天爽麻豆三区网站| 99re在线视频这里只有精品| 激情抓乳插进去啪啪啪日韩| 免费看美国人人爽,人人操| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 操九九九九九九| 91路www| 青娱乐国产剧情av一区| 丁香五月天堂网| 日韩一级二级三级免费看完整版国语版 | 中文字幕在在线观看网站| 四虎精品亚洲| 亚洲成人性| 91人人爽人人爽| 国产乱码久久久| 看一级特黄a大一片| 日本精品人妻少妇一区二区| 久9精品| 99久久久久久久久| 人澡逼| 欧亚性爱在线视频| 青青草精品| 99婷婷一区二区| 天天操夜夜操| 精品无码秘 人妻一区二区| 无码日韩人妻av一| 97超碰久| 波多野结衣一级视频| 久久精品亚洲婷婷| 操逼无码操逼| 91中出| 久久精品美女一区| 久操| 麻豆2区1区天美| 精品久9| 黄色网址久久精品欧美喷水| 伊人操操| AV免费在线播放一区| 色婷婷综合久久久久中文一区二区 | 久久,精品一二三| 午夜经典| 国产亚洲人妻综合日韩 久久| 超碰吊日色| 日本在线激情一区二区三区 | 宅男91视频在线播放| 中文字幕精品码亚洲| 伊人AAA| 成人情色综合网| 我要看免费韩日黄片| 午夜福利一区二区三区四区五区色婷婷| 不卡av在线中文字幕| 一区| 亚洲精品日日夜夜52| 内射卯月麻衣| 国产麻豆一级精品视频| 天天综合站| 激情接吻视频久久久久久| 国产丝袜高跟美女av免费观看| 一级AV性爱| 精久久久91| 午夜视频久久久久一区| AV色图| 国产福利第一视频| 精品国产91内射久久| 狠色婷婷久久一区二区三区_| 久久久久国产一区二| 中文字幕丝袜| 亚拍在线| 91一区二区| 欧美一级黄色免费专区| 蜜臀99999| 翔田千里av一区二区三区| 久久内射| 国产日韩欧美| 夂久色| 欧美Aⅴ| 久久久久96| 超踫中文字幕| 中国少妇XXXX做受| 国产剧情在线| 超碰这里只有精品| 99精品免费| 免费日韩黄片| 黑人猛交| 日韩无码服务区| 校园春色之综合网| 丁香五月激情综合国产| 日欧操屄| 五月天加勒比啪| 亚洲AV无线| 大香蕉78| 亚州春色| 欧美日韩在线小说| 综合情欲网| 丰满少妇一区二区三区专区| 亚洲经典啪啪| 国产精品久久久久久久毛片1| 久久久精品网| oumeizonghese,www| 成人网站 免费观看| 亚洲97超碰| 欧洲精品久久| 麻豆区99999| 久99| 最新国产亚洲精品精品国产亚洲综合| 美日韩男女操屄视频| 久久久久久人体| 91超碰碰在线| 日韩久久超碰色| 丁香六月婷婷久久综合| a v网站在线播放| 国产v片在线免费观看| 日本欧美不卡| 91欧美性| 国产精品久久久999| 精品视频123区小说区| 日韩人妻一区二区精品| 成人日韩欧美| 日韩A优精品在线观看| 中文字幕天堂在线| 一起草三级AV电影在线观看 | 亚洲人妻爽爽爽| 嗯嗯,好大,好爽,好骚| 久久侵犯人妻爽爽爽| 婷婷六月色| 乳欲人妻办公室奶水| 亚洲AV成人无码一二三久久 | 蜜桃无码AV一区二区| 热久久国产| 内射老妇BBWX0C0CK| 成人午夜高潮av猛片| TS人妖另类精品视频系列| 手机在线大香蕉| 日1区2区3区2020| 色97国产69香蕉| 97操97干| 偷拍视频青青草在线视频| 凹凸 69堂 在线播放| 亚洲交换| 免费视频一二三区| 亚洲一区日韩精品中文字幕| 日产操逼| 色欲久久久久综合网| 中文字幕丰满人妻日本| 综合操逼| 丁香五月天啪啪| 口爆综合网| www.婷婷| 色诱avtt| 丰满精品人妻少妇久久字幕| 欧美中字不卡| 欧美综合色,www| 超碰97男女| 国产午夜精品理论片a大结局| 亚洲久久久| 亚洲成人激情小说视频| 波多野结衣一级视频| 久精品无码av一区二免费国产在线观看| 婷婷亚洲五月***久久| 久热99| 超碰爽人妻熟女Av| 啊啊啊不要好爽日韩无码一区| 综合97亚洲| 舔舔啊| 奶水 人妻 哺乳 在线| 无码78| 国产精品熟女九色九色蜜臀| 久久久久久欧美精品se一二三四| 可以免费观看的av| 欧美91网站| 精品国产乱码久久久| 亚洲综合九九| 五月天玖玖资源站| 日韩人妻网站| 一本大道青青| 秋霞网—男女啪啪亚洲免费体验区| 日本精品无码三级网站| 97精品一二区| 欧美人妻一区二区| 国产v亚洲v日韩v欧美v片另类| 麻豆国产视频精品观看| 色9999日韩国产| 亚洲色图欧美色图制服丝袜| 九九九九国产| 新婚人妻扶着粗大强行坐下| 欧美日韩m| 呦女网站| 成人麻豆av电影网站| 懂色中文一区二区三区| 亚洲色阁| 97久久精品国产| 夜嗨影院| 国产性爱欧美性爱在线| 97国伦国色| 色 婷97| 婷婷伊人一区| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 嫩草美女久久| 久久99网站| 北条麻妃性愛视频| 69视频入口| 大屁股xxxxx| 人妻在线大香蕉| 亚洲美女精品九九视频| 中文字幕乱在线伦视频中文字幕乱码在线 | 亚洲精品视频二区| 色原狠狠天天天| 丰满人妻无码一区二区三区| 欧美一二在线| 亚洲一区日韩精品中文字幕 | 日本三级韩三级99久久| 精品少妇一区二区| av网站在线观看了| 国产污视频麻豆传媒一区二区 | 久久一留热品黄| …亚洲黄色厕厕女女在线播…| 国产精品无码av| 性性久久| 亚洲精品一二区| 亚洲色图a| 97超碰色色| 日本99久久| 国产精品视频播放| 伊人黄色片| 日韩传媒在线| 国产亚洲精品一区二区三区| 色第一页| 色婷婷影视| 国产欧美日韩臀| 天天日天天看| 久久婷婷影院| 超碰在线综合97| 熟女精品va中文字幕| 欧美亚洲国产日本在线,久久精品国产| 高清不卡 中文 人妻| 综合亚洲欧美精品日韩?v| 人人妻人人操人人乐| 亚洲日韩天堂| 91精品丝袜久久久久久| 加勒比综合88| 欧美天天拍| 天天日天天操天天射河南省| 久久久精久久久| 精品无码秘 人妻一区二区| 91女在线观看| 老司机天天操| 91国产丝袜美女| 999国产精品999| 夜夜无码| 国内91熟女人妻丝袜天天精品视频在线 | 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 老熟妇综合| 九九综合久久中文字幕| 1二区9| 午夜男女爽爽爽影院视频| 久热伊人99re| 人人操人人93| 9999亚洲精品| 欧洲色| 成 人 A V免费视频在线观看| 色色99| 粉嫩av在线一区二区| 欧美后入式| 综合自拍| 国产肏逼网站| 大香蕉琪琪日本女优不卡| 中文字幕乱在线伦视频中文字幕乱码在线 | 97在线无精品| 免费AV播放| 九九热av| 久啪| 粉嫩国产精品久久粉嫩| 综合操逼| 日本精品中文字幕视频| 91热色| 殴美日韩m| 日韩人妻一二三区视频 | 人人妻人人爱人人玩| 91国产大片| 五月丁香社区婷婷日韩欧美精品影院 | 久久亚洲AV成人精品无码| av2014 日韩在线中文字幕| 内射日韩大臀美女| 婷婷久久久| 免费一级a毛片久久久久久鸭绿欲| 亚洲影视高清三级-草1024榴社区入口-品爱AV| 六月色婷婷| 色综合天天| 超碰97人妻在线| 欧美激情亚洲情色| 狠狠躁天天躁日日躁| 2010男人的天堂| 黄片com.| 国产精品久久久无码aV去| 啊啊啊啊好疼| 2003天天干夜夜操| 91天射| 久久综合日韩亚洲欧美| av中文在线| 岛国黄色大片网站| AV网站高清无码在线观看| 婷婷午夜清品久久久久久久性色视频观| SS久久| 噜噜在线| 婷色五月| 亚洲av淫乱| 日本一级性爱| 又大又长又粗又爽又黄| 日韩精品一区二区日韩| 久久久99免费| 熟女乱3伦999| 精品999一区二区| 超碰在线日韩一区| 精品免费成人久久| 人妻色情天天操| 久久色AV线| 99re99视频在线免费观看| 人妻美腿丝袜制服诱惑综合天堂-| 天天插天天干| 男人在线天堂| 97视频一区| 亚洲AV人人澡人人爱| 精品国产嫩穴视频| 青青草在线成人视频| 啪啪AV导航| 亚洲国产奇米影视久久| 超碰97护士| 91一区二匹| 91精品人妻一区二区三区蜜臀| 竹菊一区二区三区AV线| 久热这里| 午夜一区| 九九综合九九综合| 天天操人人操狠狠插| AV一区观看| 亚洲精品一二区| 一级黄色牲爱A级片| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 久久同城AV| 人妻黑丝袜电影| 天堂涩涩| 97在线视频免费看| 大肥女高潮bbwbbwhd视频| 狠狠操,使劲操| 2018天天干在线视频| 91n免费处女| 久久超碰亚洲人| 亚州综合色图| 999热日韩精品| 嗯嗯不要视频| 日韩精品在线视频在线观看 | 久久国产精品91| 亚洲欧美另类少妇精品| 亚洲AV在线资源| 天天影视综合色| 中文一区二区三区影院| 色姑娘综合网| 国产AV激情无码久久无码| 密乳无码| 五月天激情网图片| 神马午夜久久久| 亚洲涩图欧美| 久久久96| 人人操人人摸avav| 亚洲一区二区性爱电影| 91精品国产麻豆国产自产在| 四虎影视在线| 激情久久日韩精品中文字幕麻豆| 欧美色图20p| 美女视频尤物网在线看| 成视频在线观看免费看| 国产人妻精品久久久一区二区三区| 久久精品视频久久久| 婷婷15月天青娱乐| 精品人妻一区二区三区在| 国产精品69人妻无码久久久| 久久久久久久一级黄色打同平台| 天天插天天操天天摸天天射天天看| 亚洲图片小说欧洲| 色色毛片| 男人的天堂啪啪啪啪啪蜜桃不卡| 91色色综合| 成年人黄色| 亚洲欧美国产成人综合不卡| 欧美性,色九九| 欧美高清91| 久久精品中文字幕观看| 欧亚在线视频| 久久久久久91香蕉国产| 亚洲一二三四区| 无码国产Av| 国产久久一区二区三区野外在线| 精品人妻15区| 家庭乱伦网站国产| 精品小视频在线| 精品久久艹| 无码一区免费在线不卡| 日本一区三级韩国| 久久中文字幕女同性恋一区| 美国一区二区三区视频| 97 超碰 人人做 人人爱| 亚洲天堂电影网| 男人天堂电影院| 99激情视频| 四虎精品永久在线观看| 夜嗨影院| 国产不卡的视频| 亚洲无吗在线视频| 久久爽爽精品| 岛国激情视频软件| 97干天天| 久久久久久亚洲中文| 成人网欧美风情| 小说区 图片区色 综合区| 欧美黑人XXXⅩ高潮交| 欧美与日韩97| 国产熟女乱论| 超碰碰小说97| 日本在线视频导航| 中文字幕熟女人妻丝袜丝| 成年人一级黄色毛片大全在线观看| 人人噜夜夜操| 八人操人人摸人人看| 日韩天堂av电影在线观看| 曰韩中文人妻视频| 麻豆乱码久久精| 91在线视频国产网站| 狠狠中文字幕| 丝袜美腿亚洲| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 色悠久久久av| 91天堂色男人的天堂| 亚洲成人在线资源| 免费在线观看国内色片网站网址| 青青草乱入乱欲视频在线观看| 免费av在线播放二区| 97人肏| 另类亚洲一区二区三区| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 久噜噜| 操逼片中文| 鸥美插入视频| 手机在线观看不卡无码av| 久久精品噜噜噜成人看免欧美大片| 少妇滛荡视频| WWW.操逼.COM| 麻豆天美在线喷水AV| 福利色色| 成·人免费午夜在线观看| 99热综合| 大学生美女口爆| 美欧老女人97| 丁香六月综合激情| 亚洲一区二区三区春色| 久久人妻少妇| 亚洲欧美在线观看2021 | 国产家庭乱伦性爱视频| 蜜色网色哟哟| 久久久久久久亚洲Av无码| 91亚洲黄色网| 爱干爱射网啊啊啊| 欧亚性爱在线视频| 极品少妇久久久| 理论久久婷婷网 8| 色呦呦呦在线观看视频| 久操视频在线观看| 亚洲se电影| 九月丁香婷婷| 天天色,天天干,天天干| 亚洲丝袜少妇在线| 我中文字幕6区| 很很干很很操| 国产69精品久久久久99尤物| 蜜臀99久久精品久久久懂爱| 操老熟女AV| 亚洲精品色| 天天色,天天干,天天干| 色五月AV| 亚洲熟女乱综合一区二区三区| 99热这里| 蜜乳AV网址| 99国产女人| 另类视频在线| 男人兔费天堂| 国产一级黄色片在线观看| 欧洲性爱无码区| 美女91网| 天天享受天天看| 99无码| 久久人人爽人人爽人人片Ⅴ| 免费αⅴ在线观看| 欧美Ⅴ性爱| 天天操妹子| 亚洲91综合| 大香蕉伊在线久草麻豆天堂故事| 久久久人体| 日本黄 R色 成 人网站| 国产高清MV操逼视频| 日韩无码视频黄色| 欧美一级在线观看成人| 一本久久久精品| 亚洲情色综合网| 天天综合AV| av天堂影视中文在字幕在线中文| 福利在线黄片| 日韩成年人性爱视频| 69一区二区三区| 天天射夜夜| 好好的日:com久久九九| 69AV女优男人的天堂| 97久久精品亚洲| 这里有精品| 日韩成人精品| 久久精品国产AV一区二区三区| 日本1区2区不卡视频| 91熟女在线| 色与欲影视天天看综合网| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 欧美91网| 亚洲综合在线91| 成人青青草原伊人| 91免费看中出视频| 92久久| 欧美亚洲中文| 放黄片放3级黄片没穿衣服| 精品国产乱码久久| 欧美成人免费在线观看| 国产对白刺激视频| 亚洲一区二区三区中文字幕| 亚洲黄片免费在线播放| 国产高清成人mv在线观看| 乳欲人妻办公室奶水| a天堂视频| 国产精品老师| 91人妻视频在线| 国产高清不卡视频| 超碰亚洲欧美日韩无| 超97在线精品视频| 久久精品国产亚洲AV高级北京| 日韩人妻播放| 婷婷六月色开| 奸色色 男人天堂 天天射| 亚州综合色图| 日韩无码服务区| 亚洲欧美日韩不卡人妻| 亚洲激情深爱文学小说网站| 欧洲人妻视频| 操啊国产| 亚洲蜜桃V妇女| 精品视频123区小说区| 四虎国产成人精品免费一女五男| 久草在| 四虎影视国产精品| 曰韩人妻中文字幕在线| 亚洲成人av电影在线| 一区二区三区四区色图| 欧亚第一综合网| 日韩中文9| 天天干夜夜鈤| 26uuu国产亚洲综合| 人妻在线视频| 精品无码一区二区| 玖玖无码超碰| 午夜男女爽爽爽影院视频| 亚洲一欧洲中文字幕在线 | 久久久婷婷| 夜色97| 亚洲色天| 久久‘黄片视频| 夜夜嗨av午夜成人| 丝袜美腿91| 欧美日韩啪啪电影| 国产欧美岛国精品一区| 青青草视频这里只有精品| 激情五月天校园春色网| 中日韓欧美高清| 国产精品99久久久www| 日本不卡码黄色| 中文字幕av片| 国产久久成人| 超碰亚洲97| 国产精品高朝久久久久久久| 一级毛片久久久久久久女人18| 欧美一级色| 91爱做| av三级电影在线播放| 国产成人精品日本亚洲语言| 精彩国产视频播放1区2区| 33044男人的天堂深夜备| 精品国产乱码| 婷婷久久网| 久久久久9| 91国产操逼视频| 97人人射| 亚洲精品国产熟女久久久| 久久久久久日韩| 四虎 精品 WWW| 东京热,男人的天堂| 亚洲小电影免费涩涩成人在线高清| 97爱免费插| 78m啪啪啪| 香蕉久久国产AV一区二区| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 蜜桃久久久久久| 大香蕉99999| 一级免费啪啪片| 欧美大干日韩| 人妻 丝袜美腿 中文字幕| 97超碰热线| 8x福利精品第一福利视频导航| 人人手机欧洲亚洲国产人妻| 天天做天天爱| 黄色网址久久精品欧美喷水| 日天天九九天堂666| 强奸乱伦αv片| 一本大道久| 婬女免费一二三区A片| 亚洲天天精品| 五月天婷精品激情| 淫穴高潮色图| 国内自拍 日韩激情 99| 亚洲精品黑丝| 欧美国产伊人久久久久| 亚洲瓯美色图| 国产亚洲精品农村妇女| 超碰夫妻97| 九九干| 美女91色黄18| 国产小视频91| 人妻激情视频| 亚洲国产欧美日韩人妻日中文| 97在线视频网站| 综合一区中亚洲国产成人综合精品| 夜夜做夜夜爽精品视频| 亚洲精品久久久久久久蜜桃臀| 色悠久久久av| 日本色婷婷| 色吧91| 亚洲情色五月天 | 中文字幕少妇色| 最新av网站在线观看| 国产25页| 久草福利在线资源站| 亚洲丝袜二区在线| 色蜜AV| 欧美99999| 国产精品乱码久久久久久久久久久久| 久综合国内精品自在自线| 国产精品色约约| 久热伊人| 天天操天天舔| 亚洲婷婷五月天| 超碰在线974| 黄视频免费| 91网站18在线| 成人八戒网站| 亚洲色天| 婷婷五月天无码| 日韩人妻一区二区精品| 啊啊啊久久| 美欧老女人97| 亚洲中文字幕av| 一级日本牲交大片好爽在线看| 欧美亚州色的图| 婷婷香蕉| 无码区蜜乳| 精品国产乱码久久久久久久| 亚洲。日韩。欧美| 久久久九九网站| 日本成人在线不卡一区二区三区| 丝袜狠狠草尤物人妻av91| 日本精品成人无码| 午夜成人爽爽爽爽A片李冰冰| 女人天堂网| 亚洲一区二区三区久久 亚洲一区二区| 搡老女人老91二区| 97色妞| 日日夜夜狠狠| 99精品欧美一区二区三区桃色| 青草伊人网| 影音先锋一区二区在线资源| 国产最新AV| 2018天天日天天日| 午夜美女诱惑电源网| 91欧美偷拍| 欧美一区二区亚洲天堂| 啊啊啊啊啊好多水| 精品无码产区一区二| 日本免费不卡二区| 免费的很黄很污的全部视频| 九九九久久久| 国产成人精品午夜福利| 97 视频在线| 屌色在线97视频| 天堂中文资源在线bt| 免费一级精品啪啪视频| 超碰78| 99re这里只有精品2| 丰满精品人妻少妇久久字幕| 麻豆天美国美国产| 日韩精品碰碰| 国内偷拍精品一区二区| 天天日天天看| 亚洲熟女诱惑| 日韩专区久久久| 91色伦综合| 69精品人人人人| 奸色色 男人天堂 天天射| 国产99 中文字幕日韩小视频| 十八禁的黄污污免费网站| 88xx成人精品视频| 屁股久久久久久久久久| 老熟乱一区二区三区四区| 久久一区二区加油站| 超碰碰小说97| 久久是精品| 国偷自 一区| 国产中文日韩欧美一区二区三区人妻丝袜美腿 | 日本一二区免费| 日韩一级二级| 日本免费一区二| 天美传媒国产原创中文字幕亚洲欧美另类 | 久久女人| 六月丁香久久| 亚洲福利中文字幕在线| 国产一区二区精品久久99| 亚洲码在线中文在线观看| 免费精品国偷自产在线在线| 干超碰碰熟女| 国产精品久久久久无码Av网曝门 | 日韩AV色图| WWW4虎| 天堂日本亚洲欧美| 中文字幕天天天天天| 97超碰在线资源网站| 久久香蕉超碰97国产精品| 91AV天美在线视频| 久久久久一本一区二区青青蜜月| 97超碰色屌| 九九九九九九九| 男人的天堂三级| 少妇色欲综合网2| 欧美日韩精品一区二区三区高清| 人人摸人人叼| av在线资源| 成年男人的天堂| 天天欧美欧美亚洲网| 久久久久久久久久久久黄色 | 精品人妻美妇91job| 五月丁香婷婷色| 农村妇女一级二级三级视频| 天天操av懂色| 你草精品在线视频| 91模特在线观看| 国产视频97| 亚洲无码国产探花在线观看| 欧美极品美女aaaaaa级黄片| 亚洲欧洲综合成人av一区| 国产又操| 久久久com| 激情人妻另类| 漂亮人妻被强中文字幕hd| 男人的午夜天堂| JIZZJIZZ国产精品喷水| 丁香六月婷婷久久综合| 亚洲国产剧情少妇激情| 1024午夜激情男人的天堂| 无码操逼天堂| 久久久久久久| 日韩国产乱子伦App| 日本亚洲熟女视频| 九九毛片这里只有精品| 精久久久| 欧美色就是色| 人人透人人操| 一区二区三区四区五区高清无码永久视频 | 综合色91| 综合久久久久久久综合网| 久久98| 天天日美女的B| 中文字幕乱码在线观看| 欧美日韩色综合网| 爆乳免费黄网站| 亚洲情色综合网| 久思思热视频在线观看| 五月丁香| 久久久精品久久| 国产最火爆久久国产网站网站| 亚洲日韩精品在线播放| 色天使大香蕉| 人妻天堂三区| 综合久久中文字幕综合日韩精品| 一区二区三区视频| 玖玖爱一区在线| 福利视频香蕉免费一区二区在线| 黄aaaaaaaaaaaaaaaaaa色网站| 色综合潮| 欧美懂色综合网| 亚洲激情综合| 亚洲色图伊人网| 综合伊人激情| 九九热精品免费视频| 亚洲综合草草| 人妻日日干| 97精品中文字幕| 边做饭边操逼逼| 大香蕉在线视频15| 欲色综合| 国产亚洲精品玖玖玖在线观看| 暖暖精品二区三区观看| 91模特在线观看| AVE乱伦| 大香交伊人网| 91白虎| 久草视频观看视频在线| 无码人妻丰满熟妇奶水区毛片| 国产精品久久久吖| 蜜桃色色网站视频三区| 久久日韩肥臀| 国产伦乱91| 少妇熟女视频一区二区三区| 欧美偷拍区| 99re这里只有精品3| 呦呦影院| 性色高清在线| 99久久久久久亚洲精品不卡| 亚洲综合影视| 欧美97超碰| 无码人妻一区二区一牛影视| 九九九九免费| 偷窥自拍亚洲色图| 欧美色图99| 国产尹人在线视频免费| 欧美 色 亚洲| 久久综合99| Julia Annxxxxx| 亚洲三区视频| 精品区9| 91艹| 国产呦精品一区二区三区下载| 中文字幕精品亚洲熟女| 亚洲一本大道中文字幕无码在线| 日本一级不卡一二区| 日本中文字幕在线电影| 综合亚洲网| 欧美大香蕉卡久久| 无码区蜜乳| 裸体美女久久久| 色欲日韩欧美在线一区| 熟女久久久| 久久九九视频九九视频| 深夜激情| 欧美亚洲综合色| 久久久久亚洲三级电影| 牛牛久久国产精品视频一二三| 亚洲国产ⅴ高清在线观看| 91欧洲入口| 欧美性爱五月天| 干我久操| 好爽要喷了| 亚洲欧美日韩综合在线尤物 | 国产精品一区二区手机看片| 欧美精品双插| 加勒比在线视频一区二区三区| 91白嫩| 亚洲人在线成线成人| 日逼国产| 国产精品96| 美国久久一二三四| 97操操| 日韩精品国产一区二区| 福利大香蕉| 欧美毛片在线网| 成人97人人超碰人人| 久99在线免费观看视频| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 97资源制服丝袜| 国产精品探花色| 精品二999| 天天做日日做| 亚洲91在线| 亚洲AV色图一区| 国产黄a三级三级三级av在线看 | 美女诱惑在线一区| 不卡一区二区日本视频| 久久久青青草| 天综合网欧美| 91原创在线观看| 久久东京伊人一本到鬼色| 99热这里都是精品| 欧美色图天堂网m| 岛国片在线观看视频亚洲| 午夜性生活av免费在线看| 中文字幕乱偷人妻久久艾草网| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 亚洲一区中文精品| 综合网亚洲1| 欲色影视综合吧| 男人的天堂2019AV| 91成人久久| 飘花国产午夜精品不卡| 色图四区| 色偷综合| 91网站18在线| 啪啪视频亚洲第一| 亚洲一级黄色毛片| 玖玖久久久| 欧美偷偷网| 99国产精品免费| 婷婷三区| 九九热最新| 五月天婷精品激情| 人人干黄色| 97资源久久| 精品丰满熟妇人妻一区| 五月婷婷六月丁香| 亚洲国产高清福利视频| AV不卡在线| 波多野42部无码喷潮在线观看| 日韩在线国产字幕| 亚州一区二区| 91亚洲欧洲| 欧美色吧综合| 亚洲清纯唯美| 老熟女熟妇| 宅男91视频在线播放| 91精品操美女| 欧美成人9797| 日韩无码嘿咻黑热久| 97超碰国产亚洲精品资源| 爱做久久久久久| 日韩探花精品在线视频| 风流老熟女一区二区三区l| 国产强奸乱伦xd| 国产精品久久久吖| 国产狂喷潮在线精品| 97爱综合| 久久精品国产亚洲AV先锋| 欧美91变态| 91亚洲情色| 岛国爱情动作片在国产AV无码专区亚洲AV漫画| 99热这里都是精品| 天干天干天干天天做| 青草一区二区| 懂色aV一区二区天美传媒| 夜夜爽夜夜高潮夜夜爽| 色综合1991| 操淫穴亚洲五月丁香 | 成人女人国产| 欧美日韩淫加| 少妇与黑人高潮在线| 天美国产精品| 欧美激情性爱视频网站| 色婷婷六月丁香七月婷婷| Sekablack无码一区| 大香蕉乱级| 午夜啪啪片| 精品性爱无码在线播放| 亚洲AV成人无码一区二区三区在线观看 | 无码少妇精品一区二区60岁老人 | 亚洲精品欧洲色| 91国模| 国产精品露脸在线观看| se01国产在线视频| 国产成人无码高清| 人人操人人插人人摸人人干| 岛国大片在线观看网站入口| 中文字幕性感少妇av| 婷婷色色五月| 综合久| 国产一级做a爰大片免费久久| 久久 国产精品 一区| 99热色精品| 精品久久久中文字幕不| 又黄又爽在线观看视频| 日本淫色网| 色九九九综合| 热久久无毒不卡| 国产馆| 久久夜夜| ?亚洲伊人伊成久久人综合网|